@posiwise/admin-module 0.0.65 → 0.0.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/index.mjs +1 -2
- package/esm2022/lib/admin-guard.service.mjs +3 -3
- package/esm2022/lib/admin-module.routing.mjs +4 -4
- package/esm2022/lib/admin.module.mjs +6 -6
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +6 -6
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +7 -7
- package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +3 -3
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +7 -7
- package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +6 -6
- package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +3 -3
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +6 -6
- package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +3 -3
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +6 -6
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +7 -7
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +3 -3
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +6 -6
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +6 -6
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +7 -7
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +6 -6
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +3 -3
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +7 -7
- package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +3 -3
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +7 -7
- package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +6 -6
- package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +3 -3
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +6 -6
- package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +3 -3
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +7 -7
- package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +3 -3
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +6 -6
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +7 -7
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +7 -7
- package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +6 -6
- package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +6 -6
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +6 -6
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +6 -6
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +8 -8
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +7 -7
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +6 -6
- package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +3 -3
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +7 -7
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +6 -6
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +7 -7
- package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +3 -3
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +3 -3
- package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +3 -3
- package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +3 -3
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +7 -7
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +7 -7
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +7 -7
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +7 -7
- package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +3 -3
- package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +3 -3
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +6 -6
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +6 -6
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +3 -3
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +6 -6
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +6 -6
- package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +8 -8
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +3 -3
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +5 -5
- package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +3 -3
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +5 -5
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +3 -3
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +3 -3
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +3 -3
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +3 -3
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +3 -3
- package/esm2022/lib/components/tracking/events/events.component.mjs +3 -3
- package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +3 -3
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +3 -3
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +7 -7
- package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +6 -6
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +6 -6
- package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +3 -3
- package/fesm2022/posiwise-admin-module.mjs +322 -1062
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/index.d.ts +0 -1
- package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +1 -1
- package/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.d.ts +1 -1
- package/lib/components/config/global-config-details/global-config-details.component.d.ts +1 -1
- package/lib/components/config/global-config-list/global-config-list.component.d.ts +1 -1
- package/lib/components/contact-us/contact-us-list/contact-us-list.component.d.ts +1 -1
- package/lib/components/credentials/credentials/credentials.component.d.ts +1 -1
- package/lib/components/credentials/credentials-details/credentials-details.component.d.ts +1 -1
- package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +1 -1
- package/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +1 -1
- package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +1 -1
- package/lib/components/faqs/faqs-list/faqs-list.component.d.ts +1 -1
- package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +1 -1
- package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +1 -1
- package/lib/components/generic/generic-misc/generic-misc.component.d.ts +1 -1
- package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +1 -1
- package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +1 -1
- package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +1 -1
- package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +1 -1
- package/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.d.ts +1 -1
- package/lib/components/newsletters/newsletters-insight/newsletters-insight.component.d.ts +1 -1
- package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +1 -1
- package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +1 -1
- package/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.d.ts +2 -0
- package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +1 -1
- package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +1 -1
- package/lib/components/permissions/role-details/role-details.component.d.ts +1 -1
- package/lib/components/permissions/roles-list/roles-list.component.d.ts +1 -1
- package/lib/components/products/product-details/product-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-agents/subscription-agents.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-details/subscription-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +1 -1
- package/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.d.ts +2 -0
- package/lib/components/users/user-details/user-details.component.d.ts +1 -1
- package/lib/components/users/users-insight/users-insight.component.d.ts +1 -1
- package/lib/components/users/users-list/users-list.component.d.ts +1 -1
- package/package.json +3 -3
- package/esm2022/lib/admin.service.mjs +0 -411
- package/esm2022/lib/shared/models/admin.model.mjs +0 -338
- package/lib/admin.service.d.ts +0 -145
- package/lib/shared/models/admin.model.d.ts +0 -29
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import { Component, Injector } from '@angular/core';
|
|
3
3
|
import { NgbModal } from '@ng-bootstrap/ng-bootstrap';
|
|
4
|
-
import { AdminService } from '
|
|
5
|
-
import { AppAdmin } from '
|
|
4
|
+
import { AdminService } from '@posiwise/admin-module-utils';
|
|
5
|
+
import { AppAdmin } from '@posiwise/admin-module-utils';
|
|
6
6
|
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
7
7
|
import { PermissionService } from '@posiwise/common-services';
|
|
8
8
|
import { ProductService } from '@posiwise/common-services';
|
|
@@ -10,7 +10,7 @@ import { ValidateForm } from '@posiwise/utils';
|
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@posiwise/common-services";
|
|
12
12
|
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
13
|
-
import * as i3 from "
|
|
13
|
+
import * as i3 from "@posiwise/admin-module-utils";
|
|
14
14
|
import * as i4 from "primeng/tooltip";
|
|
15
15
|
import * as i5 from "primeng/accordion";
|
|
16
16
|
import * as i6 from "primeng/dropdown";
|
|
@@ -292,8 +292,8 @@ export class ProductDetailsComponent extends AppBaseComponent {
|
|
|
292
292
|
ngOnDestroy() {
|
|
293
293
|
super.ngOnDestroy();
|
|
294
294
|
}
|
|
295
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
296
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ProductDetailsComponent, selector: "pw-product-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab product-form overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">Product: {{ data?.name ? data?.name : 'Add New' }}</h3>\n <div class=\"my-4\">\n <p-accordion>\n <p-accordionTab [header]=\"'How To'\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\">\n <h4>Product / Feature logic</h4>\n <p>\n Logic for back-end/front-end permissions binding: <br />\n * product.permission_key => users can be subscribed to only\n one product of same permission_key <br />\n * product.category (these are features) => users can\n subscribed to multiple features within the same\n product.permission_key<br />\n * product.product_key => this is unique, it defines the\n permission for frontend binding<br />\n * Example of permission =>\n {{ 'Pages.Product.{permission_key}.{product_key}' }}<br />\n * If it's a feature associated to an existing project, you can\n to set the \"dependency product\" accordingly.\n </p>\n </div>\n <div class=\"col-12 col-md-6\">\n <h4>If free product</h4>\n <p>\n Stripe Plan needs to be nil. <br />\n \"Price\" per Unit needs to be set as 0. <br />\n \"Trial Days\" needs to be something like 99999. <br />\n The product should be set as \"visible===false\".\n </p>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <div class=\"row\"\n *ngIf=\"id\">\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">\n {{ 'User.Subscriptions.FullLogo' | transloco }}\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.FullLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"fullLogo\"\n alt=\"\"\n class=\"image full-logo w-100 h-100\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/demo_logo1.png';\" />\n <div class=\"overlay mt-2\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">\n <a href=\"javascript:void(0)\">{{\n 'User.Profile.Change' | transloco\n }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">\n {{ 'User.Subscriptions.SquaredLogo' | transloco }}\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.SquaredLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"squaredLogo\"\n alt=\"\"\n width=\"70\"\n class=\"squared_logo\"\n height=\"70\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n <div class=\"overlay mt-2\"\n (click)=\"openModal(squaredLogoContent)\">\n <div class=\"overlay-text\">\n <a href=\"javascript:void(0)\">{{\n 'User.Profile.Change' | transloco\n }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Name' | transloco\"\n [label]=\"'Label.Name' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"name\"\n [errorMsg]=\"'Admin.Products.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.NickName' | transloco\"\n [label]=\"'Admin.Products.NickName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"nickname\"\n [errorMsg]=\"\n 'Admin.Products.Validation.NickName' | transloco\n \">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"nickname\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['nickname'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Products.MinUnit' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MinUnits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Products.Validation.MinUnit' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"min_units\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['min_units'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Products.MaxUnit' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MaxUnits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_units\"\n [errorMsg]=\"'Admin.Products.Validation.MaxUnit' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"max_units\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['max_units'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <label class=\"info-circle\">\n {{ 'Admin.Products.DependencyProducts' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Products.Tooltip.DependencyProducts' | transloco\n }}</span>\n </label>\n <p-multiSelect [options]=\"productsList\"\n [(ngModel)]=\"selectedScopes\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onChange)=\"onSearchCriteria($event)\"\n [showHeader]=\"false\"\n maxSelectedLabels=\"1\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.StripePlan' | transloco\"\n [label]=\"'Admin.Products.StripePlan' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"stripe_plan_id\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_plan_id\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Price' | transloco\"\n [label]=\"'Admin.Products.Price' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"price_per_unit\"\n [errorMsg]=\"'Admin.Products.Validation.Name' | transloco\">\n <input type=\"text\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"price_per_unit\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['price_per_unit'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.TrialDays' | transloco\"\n [label]=\"'Admin.Products.TrialDays' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"trial_days\"\n [errorMsg]=\"'Admin.Products.Validation.TrialDays' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"trial_days\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['trial_days'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MaxTrialHits' | transloco\"\n [label]=\"'Admin.Products.MaxTrialHits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_hits_trial\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"max_hits_trial\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['max_hits_trial'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.TrialHits' | transloco\"\n [label]=\"'Admin.Products.TrialHits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_hits\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"max_hits\"\n [ngClass]=\"{ 'is-invalid': submitted && f['max_hits'].errors }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Description' | transloco\"\n [label]=\"'Admin.Products.Description' | transloco\"\n name=\"description\"\n [errorMsg]=\"'Admin.Products.Validation.Description' | transloco\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.SignupInstructions' | transloco\"\n [label]=\"'Admin.Products.SignupInstructions' | transloco\"\n name=\"signup_instructions\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"signup_instructions\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['signup_instructions'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.SignupInstructionEmployees' | transloco\"\n [label]=\"'Admin.Products.SignupInstructionEmployees' | transloco\"\n name=\"signup_instruction_employees\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"signup_instruction_employees\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && f['signup_instruction_employees'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.PermissionKey' | transloco\"\n [label]=\"'Admin.Products.PermissionKey' | transloco\"\n name=\"permission_key\"\n [errorMsg]=\"\n 'Admin.Products.Validation.PermissionKey' | transloco\n \">\n <input type=\"text\"\n class=\"form-control\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['permission_key'].errors\n }\"\n formControlName=\"permission_key\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.FeatureKey' | transloco\"\n [label]=\"'Admin.Products.FeatureKey' | transloco\"\n name=\"feature_key\"\n [errorMsg]=\"'Admin.Products.Validation.FeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['feature_key'].errors\n }\"\n formControlName=\"feature_key\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Admin.Products.ProductKey' | transloco\"\n class=\"col-md-6 p-0\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.Products.Tooltip.PermissionKey' | transloco\n \"\n name=\"product_key\"\n [errorMsg]=\"'Admin.Products.Validation.ProductKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"product_key\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['product_key'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Admin.Products.Category' | transloco\"\n class=\"col-md-6 p-0\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.Products.Tooltip.PermissionKey' | transloco\n \"\n name=\"category\"\n [errorMsg]=\"'Admin.Products.Validation.Category' | transloco\">\n <p-dropdown [options]=\"categories\"\n class=\"dropdown-bg-transparent\"\n formControlName=\"category\"\n [style]=\"{ width: '100%' }\"\n [ngClass]=\"{ 'is-invalid': submitted && f['category'].errors }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.BillingFrequency' | transloco\"\n [label]=\"'Admin.Products.BillingFrequency' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"billing_frequency\">\n <p-dropdown [options]=\"frequency\"\n class=\"dropdown-bg-transparent\"\n formControlName=\"billing_frequency\"\n [required]=\"true\"\n [style]=\"{ width: '100%' }\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['billing_frequency'].errors\n }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.ProductPrivacyService' | transloco\"\n [label]=\"'Admin.Products.ProductPrivacyService' | transloco\"\n name=\"product_privacy_service_id\">\n <select formControlName=\"product_privacy_service_id\"\n class=\"form-control form-select\">\n <option *ngFor=\"let option of allTos\"\n [value]=\"option.id\">\n {{ option.title }}\n </option>\n </select>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MasterProduct' | transloco\"\n [label]=\"'Admin.Products.MasterProduct' | transloco\"\n name=\"master_product_id\">\n <select formControlName=\"master_product_id\"\n class=\"form-control form-select\">\n <option *ngFor=\"let option of productsList\"\n [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </pw-input-container>\n </div>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-4\">\n <label class=\"info-circle\">{{ 'Admin.Products.AssignedRoles' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Subscriptions.Tooltip.AssignedRoles' | transloco\n }}</span>\n </label>\n <p-multiSelect [options]=\"allRoles\"\n formControlName=\"roles\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n <div class=\"col-12 col-md-4\"\n *ngIf=\"supportedCurrency$ | async as currency\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Currency' | transloco\"\n [label]=\"'Admin.Products.Currency' | transloco\"\n name=\"currency\"\n [errorMsg]=\"'Admin.Products.Validation.Currency' | transloco\">\n <select class=\"form-select\"\n formControlName=\"currency\"\n [ngClass]=\"{ 'is-invalid': submitted && f['currency'].errors }\">\n <option *ngFor=\"let option of currency['regions']\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\"\n *ngIf=\"supportedRegions$ | async as region\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Region' | transloco\"\n [label]=\"'Admin.Products.Region' | transloco\"\n name=\"region\"\n [errorMsg]=\"'Admin.Products.Validation.Region' | transloco\">\n <select class=\"form-select\"\n formControlName=\"region\"\n [ngClass]=\"{ 'is-invalid': submitted && f['region'].errors }\">\n <option *ngFor=\"let option of region['regions']\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.GitLabServiceDeskEmail' | transloco\"\n [label]=\"'Admin.Products.GitLabServiceDeskEmail' | transloco\"\n name=\"gitlab_service_desk_email\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"gitlab_service_desk_email\" />\n </pw-input-container>\n </div>\n <!--start toggles -->\n <div class=\"col-12 row\">\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsActive' | transloco\"\n [label]=\"'Admin.Products.IsActive' | transloco\"\n name=\"active\">\n <ui-switch class=\"d-block\"\n formControlName=\"active\"\n name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MultipleAllowed' | transloco\"\n [label]=\"'Admin.Products.MultipleAllowed' | transloco\"\n class=\"nowrap\"\n name=\"multiple_allowed\">\n <ui-switch class=\"d-block\"\n formControlName=\"multiple_allowed\"\n name=\"multiple_allowed\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['multiple_allowed'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsVisible' | transloco\"\n [label]=\"'Admin.Products.IsVisible' | transloco\"\n name=\"visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"visible\"\n name=\"visible\"\n [ngClass]=\"{ 'is-invalid': submitted && f['visible'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MembersVisible' | transloco\"\n [label]=\"'Admin.Products.MembersVisible' | transloco\"\n name=\"members_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"members_visible\"\n name=\"members_visible\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['members_visible'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.ChatVisible' | transloco\"\n [label]=\"'Admin.Products.ChatVisible' | transloco\"\n name=\"chat_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"chat_visible\"\n name=\"chat_visible\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['chat_visible'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsMasterProduct' | transloco\"\n [label]=\"'Admin.Products.IsMasterProduct' | transloco\"\n name=\"is_master_product\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_master_product\"\n name=\"is_master_product\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['is_master_product'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n <!-- end toggles -->\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Product.Edit'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.FullLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"onImageSelection($event)\"\n aspectRatio=\"fullLogo\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<ng-template #squaredLogoContent\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.SquaredLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"uploadSquaredLogo($event)\"\n aspectRatio=\"auto\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".nowrap{white-space:nowrap}textarea{height:180px}.full-logo{object-fit:cover;width:280px}\n"], dependencies: [{ kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i5.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i5.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i7.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i11.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i11.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText"] }, { kind: "directive", type: i12.NumberDirective, selector: "input[numbersOnly]" }, { kind: "directive", type: i12.LazyImgDirective, selector: "img" }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i13.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }] }); }
|
|
295
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ProductDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.ProductService }, { token: i2.NgbModal }, { token: i3.AdminService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
296
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.1", type: ProductDetailsComponent, selector: "pw-product-details", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab product-form overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">Product: {{ data?.name ? data?.name : 'Add New' }}</h3>\n <div class=\"my-4\">\n <p-accordion>\n <p-accordionTab [header]=\"'How To'\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\">\n <h4>Product / Feature logic</h4>\n <p>\n Logic for back-end/front-end permissions binding: <br />\n * product.permission_key => users can be subscribed to only\n one product of same permission_key <br />\n * product.category (these are features) => users can\n subscribed to multiple features within the same\n product.permission_key<br />\n * product.product_key => this is unique, it defines the\n permission for frontend binding<br />\n * Example of permission =>\n {{ 'Pages.Product.{permission_key}.{product_key}' }}<br />\n * If it's a feature associated to an existing project, you can\n to set the \"dependency product\" accordingly.\n </p>\n </div>\n <div class=\"col-12 col-md-6\">\n <h4>If free product</h4>\n <p>\n Stripe Plan needs to be nil. <br />\n \"Price\" per Unit needs to be set as 0. <br />\n \"Trial Days\" needs to be something like 99999. <br />\n The product should be set as \"visible===false\".\n </p>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <div class=\"row\"\n *ngIf=\"id\">\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">\n {{ 'User.Subscriptions.FullLogo' | transloco }}\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.FullLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"fullLogo\"\n alt=\"\"\n class=\"image full-logo w-100 h-100\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/demo_logo1.png';\" />\n <div class=\"overlay mt-2\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">\n <a href=\"javascript:void(0)\">{{\n 'User.Profile.Change' | transloco\n }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">\n {{ 'User.Subscriptions.SquaredLogo' | transloco }}\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.SquaredLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"squaredLogo\"\n alt=\"\"\n width=\"70\"\n class=\"squared_logo\"\n height=\"70\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n <div class=\"overlay mt-2\"\n (click)=\"openModal(squaredLogoContent)\">\n <div class=\"overlay-text\">\n <a href=\"javascript:void(0)\">{{\n 'User.Profile.Change' | transloco\n }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Name' | transloco\"\n [label]=\"'Label.Name' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"name\"\n [errorMsg]=\"'Admin.Products.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.NickName' | transloco\"\n [label]=\"'Admin.Products.NickName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"nickname\"\n [errorMsg]=\"\n 'Admin.Products.Validation.NickName' | transloco\n \">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"nickname\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['nickname'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Products.MinUnit' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MinUnits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Products.Validation.MinUnit' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"min_units\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['min_units'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Products.MaxUnit' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MaxUnits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_units\"\n [errorMsg]=\"'Admin.Products.Validation.MaxUnit' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"max_units\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['max_units'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <label class=\"info-circle\">\n {{ 'Admin.Products.DependencyProducts' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Products.Tooltip.DependencyProducts' | transloco\n }}</span>\n </label>\n <p-multiSelect [options]=\"productsList\"\n [(ngModel)]=\"selectedScopes\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onChange)=\"onSearchCriteria($event)\"\n [showHeader]=\"false\"\n maxSelectedLabels=\"1\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.StripePlan' | transloco\"\n [label]=\"'Admin.Products.StripePlan' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"stripe_plan_id\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_plan_id\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Price' | transloco\"\n [label]=\"'Admin.Products.Price' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"price_per_unit\"\n [errorMsg]=\"'Admin.Products.Validation.Name' | transloco\">\n <input type=\"text\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"price_per_unit\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['price_per_unit'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.TrialDays' | transloco\"\n [label]=\"'Admin.Products.TrialDays' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"trial_days\"\n [errorMsg]=\"'Admin.Products.Validation.TrialDays' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"trial_days\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['trial_days'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MaxTrialHits' | transloco\"\n [label]=\"'Admin.Products.MaxTrialHits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_hits_trial\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"max_hits_trial\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['max_hits_trial'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.TrialHits' | transloco\"\n [label]=\"'Admin.Products.TrialHits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_hits\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"max_hits\"\n [ngClass]=\"{ 'is-invalid': submitted && f['max_hits'].errors }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Description' | transloco\"\n [label]=\"'Admin.Products.Description' | transloco\"\n name=\"description\"\n [errorMsg]=\"'Admin.Products.Validation.Description' | transloco\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.SignupInstructions' | transloco\"\n [label]=\"'Admin.Products.SignupInstructions' | transloco\"\n name=\"signup_instructions\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"signup_instructions\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['signup_instructions'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.SignupInstructionEmployees' | transloco\"\n [label]=\"'Admin.Products.SignupInstructionEmployees' | transloco\"\n name=\"signup_instruction_employees\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"signup_instruction_employees\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && f['signup_instruction_employees'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.PermissionKey' | transloco\"\n [label]=\"'Admin.Products.PermissionKey' | transloco\"\n name=\"permission_key\"\n [errorMsg]=\"\n 'Admin.Products.Validation.PermissionKey' | transloco\n \">\n <input type=\"text\"\n class=\"form-control\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['permission_key'].errors\n }\"\n formControlName=\"permission_key\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.FeatureKey' | transloco\"\n [label]=\"'Admin.Products.FeatureKey' | transloco\"\n name=\"feature_key\"\n [errorMsg]=\"'Admin.Products.Validation.FeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['feature_key'].errors\n }\"\n formControlName=\"feature_key\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Admin.Products.ProductKey' | transloco\"\n class=\"col-md-6 p-0\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.Products.Tooltip.PermissionKey' | transloco\n \"\n name=\"product_key\"\n [errorMsg]=\"'Admin.Products.Validation.ProductKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"product_key\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['product_key'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Admin.Products.Category' | transloco\"\n class=\"col-md-6 p-0\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.Products.Tooltip.PermissionKey' | transloco\n \"\n name=\"category\"\n [errorMsg]=\"'Admin.Products.Validation.Category' | transloco\">\n <p-dropdown [options]=\"categories\"\n class=\"dropdown-bg-transparent\"\n formControlName=\"category\"\n [style]=\"{ width: '100%' }\"\n [ngClass]=\"{ 'is-invalid': submitted && f['category'].errors }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.BillingFrequency' | transloco\"\n [label]=\"'Admin.Products.BillingFrequency' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"billing_frequency\">\n <p-dropdown [options]=\"frequency\"\n class=\"dropdown-bg-transparent\"\n formControlName=\"billing_frequency\"\n [required]=\"true\"\n [style]=\"{ width: '100%' }\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['billing_frequency'].errors\n }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.ProductPrivacyService' | transloco\"\n [label]=\"'Admin.Products.ProductPrivacyService' | transloco\"\n name=\"product_privacy_service_id\">\n <select formControlName=\"product_privacy_service_id\"\n class=\"form-control form-select\">\n <option *ngFor=\"let option of allTos\"\n [value]=\"option.id\">\n {{ option.title }}\n </option>\n </select>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MasterProduct' | transloco\"\n [label]=\"'Admin.Products.MasterProduct' | transloco\"\n name=\"master_product_id\">\n <select formControlName=\"master_product_id\"\n class=\"form-control form-select\">\n <option *ngFor=\"let option of productsList\"\n [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </pw-input-container>\n </div>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-4\">\n <label class=\"info-circle\">{{ 'Admin.Products.AssignedRoles' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Subscriptions.Tooltip.AssignedRoles' | transloco\n }}</span>\n </label>\n <p-multiSelect [options]=\"allRoles\"\n formControlName=\"roles\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n <div class=\"col-12 col-md-4\"\n *ngIf=\"supportedCurrency$ | async as currency\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Currency' | transloco\"\n [label]=\"'Admin.Products.Currency' | transloco\"\n name=\"currency\"\n [errorMsg]=\"'Admin.Products.Validation.Currency' | transloco\">\n <select class=\"form-select\"\n formControlName=\"currency\"\n [ngClass]=\"{ 'is-invalid': submitted && f['currency'].errors }\">\n <option *ngFor=\"let option of currency['regions']\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\"\n *ngIf=\"supportedRegions$ | async as region\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Region' | transloco\"\n [label]=\"'Admin.Products.Region' | transloco\"\n name=\"region\"\n [errorMsg]=\"'Admin.Products.Validation.Region' | transloco\">\n <select class=\"form-select\"\n formControlName=\"region\"\n [ngClass]=\"{ 'is-invalid': submitted && f['region'].errors }\">\n <option *ngFor=\"let option of region['regions']\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.GitLabServiceDeskEmail' | transloco\"\n [label]=\"'Admin.Products.GitLabServiceDeskEmail' | transloco\"\n name=\"gitlab_service_desk_email\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"gitlab_service_desk_email\" />\n </pw-input-container>\n </div>\n <!--start toggles -->\n <div class=\"col-12 row\">\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsActive' | transloco\"\n [label]=\"'Admin.Products.IsActive' | transloco\"\n name=\"active\">\n <ui-switch class=\"d-block\"\n formControlName=\"active\"\n name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MultipleAllowed' | transloco\"\n [label]=\"'Admin.Products.MultipleAllowed' | transloco\"\n class=\"nowrap\"\n name=\"multiple_allowed\">\n <ui-switch class=\"d-block\"\n formControlName=\"multiple_allowed\"\n name=\"multiple_allowed\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['multiple_allowed'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsVisible' | transloco\"\n [label]=\"'Admin.Products.IsVisible' | transloco\"\n name=\"visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"visible\"\n name=\"visible\"\n [ngClass]=\"{ 'is-invalid': submitted && f['visible'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MembersVisible' | transloco\"\n [label]=\"'Admin.Products.MembersVisible' | transloco\"\n name=\"members_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"members_visible\"\n name=\"members_visible\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['members_visible'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.ChatVisible' | transloco\"\n [label]=\"'Admin.Products.ChatVisible' | transloco\"\n name=\"chat_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"chat_visible\"\n name=\"chat_visible\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['chat_visible'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsMasterProduct' | transloco\"\n [label]=\"'Admin.Products.IsMasterProduct' | transloco\"\n name=\"is_master_product\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_master_product\"\n name=\"is_master_product\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['is_master_product'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n <!-- end toggles -->\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Product.Edit'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.FullLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"onImageSelection($event)\"\n aspectRatio=\"fullLogo\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<ng-template #squaredLogoContent\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.SquaredLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"uploadSquaredLogo($event)\"\n aspectRatio=\"auto\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".nowrap{white-space:nowrap}textarea{height:180px}.full-logo{object-fit:cover;width:280px}\n"], dependencies: [{ kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i5.Accordion, selector: "p-accordion", inputs: ["multiple", "style", "styleClass", "expandIcon", "collapseIcon", "activeIndex", "selectOnFocus", "headerAriaLevel"], outputs: ["onClose", "onOpen", "activeIndexChange"] }, { kind: "component", type: i5.AccordionTab, selector: "p-accordionTab", inputs: ["id", "header", "headerStyle", "tabStyle", "contentStyle", "tabStyleClass", "headerStyleClass", "contentStyleClass", "disabled", "cache", "transitionOptions", "iconPos", "selected", "headerAriaLevel"], outputs: ["selectedChange"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i7.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i9.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i11.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i11.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText"] }, { kind: "directive", type: i12.NumberDirective, selector: "input[numbersOnly]" }, { kind: "directive", type: i12.LazyImgDirective, selector: "img" }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i13.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "pipe", type: i14.TranslocoPipe, name: "transloco" }] }); }
|
|
297
297
|
}
|
|
298
298
|
__decorate([
|
|
299
299
|
ValidateForm('form'),
|
|
@@ -301,8 +301,8 @@ __decorate([
|
|
|
301
301
|
__metadata("design:paramtypes", []),
|
|
302
302
|
__metadata("design:returntype", void 0)
|
|
303
303
|
], ProductDetailsComponent.prototype, "onSave", null);
|
|
304
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: ProductDetailsComponent, decorators: [{
|
|
305
305
|
type: Component,
|
|
306
306
|
args: [{ selector: 'pw-product-details', template: "<div class=\"container-fluid pw-tab product-form overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <a href=\"javascript:void(0)\"\n (click)=\"back()\"\n class=\"previous\"><i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"\">Product: {{ data?.name ? data?.name : 'Add New' }}</h3>\n <div class=\"my-4\">\n <p-accordion>\n <p-accordionTab [header]=\"'How To'\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\">\n <h4>Product / Feature logic</h4>\n <p>\n Logic for back-end/front-end permissions binding: <br />\n * product.permission_key => users can be subscribed to only\n one product of same permission_key <br />\n * product.category (these are features) => users can\n subscribed to multiple features within the same\n product.permission_key<br />\n * product.product_key => this is unique, it defines the\n permission for frontend binding<br />\n * Example of permission =>\n {{ 'Pages.Product.{permission_key}.{product_key}' }}<br />\n * If it's a feature associated to an existing project, you can\n to set the \"dependency product\" accordingly.\n </p>\n </div>\n <div class=\"col-12 col-md-6\">\n <h4>If free product</h4>\n <p>\n Stripe Plan needs to be nil. <br />\n \"Price\" per Unit needs to be set as 0. <br />\n \"Trial Days\" needs to be something like 99999. <br />\n The product should be set as \"visible===false\".\n </p>\n </div>\n </div>\n </p-accordionTab>\n </p-accordion>\n <div class=\"row\"\n *ngIf=\"id\">\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">\n {{ 'User.Subscriptions.FullLogo' | transloco }}\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.FullLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"fullLogo\"\n alt=\"\"\n class=\"image full-logo w-100 h-100\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/demo_logo1.png';\" />\n <div class=\"overlay mt-2\"\n (click)=\"openModal(content)\">\n <div class=\"overlay-text\">\n <a href=\"javascript:void(0)\">{{\n 'User.Profile.Change' | transloco\n }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col-md-6\">\n <div class=\"text-center mt-5\">\n <div class=\"image-container\">\n <h4 class=\"mb-2\">\n {{ 'User.Subscriptions.SquaredLogo' | transloco }}\n <span class=\"tooltip-wrap ms-1\"\n [pTooltip]=\"'User.Subscriptions.Tooltip.SquaredLogo'|transloco\"\n [appendTo]=\"'body'\"\n [tooltipPosition]=\"'top'\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </h4>\n <img [src]=\"squaredLogo\"\n alt=\"\"\n width=\"70\"\n class=\"squared_logo\"\n height=\"70\"\n onerror=\"this.onerror=null;this.src='assets/img/icons/company.png';\" />\n <div class=\"overlay mt-2\"\n (click)=\"openModal(squaredLogoContent)\">\n <div class=\"overlay-text\">\n <a href=\"javascript:void(0)\">{{\n 'User.Profile.Change' | transloco\n }}</a>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"col-12 col-md-6\">\n <div class=\"row\">\n <div class=\"col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Name' | transloco\"\n [label]=\"'Label.Name' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"name\"\n [errorMsg]=\"'Admin.Products.Validation.Name' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"name\"\n [ngClass]=\"{ 'is-invalid': submitted && f['name'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"col-md-6\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.NickName' | transloco\"\n [label]=\"'Admin.Products.NickName' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"nickname\"\n [errorMsg]=\"\n 'Admin.Products.Validation.NickName' | transloco\n \">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"nickname\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['nickname'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"row\">\n <div class=\"mb-3 col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Products.MinUnit' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MinUnits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Products.Validation.MinUnit' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"min_units\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['min_units'].errors\n }\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-12 col-md-6\">\n <pw-input-container [label]=\"'Admin.Products.MaxUnit' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MaxUnits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_units\"\n [errorMsg]=\"'Admin.Products.Validation.MaxUnit' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"max_units\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['max_units'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <label class=\"info-circle\">\n {{ 'Admin.Products.DependencyProducts' | transloco\n }}<span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Products.Tooltip.DependencyProducts' | transloco\n }}</span>\n </label>\n <p-multiSelect [options]=\"productsList\"\n [(ngModel)]=\"selectedScopes\"\n [ngModelOptions]=\"{ standalone: true }\"\n (onChange)=\"onSearchCriteria($event)\"\n [showHeader]=\"false\"\n maxSelectedLabels=\"1\"\n appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.StripePlan' | transloco\"\n [label]=\"'Admin.Products.StripePlan' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"stripe_plan_id\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_plan_id\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Price' | transloco\"\n [label]=\"'Admin.Products.Price' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"price_per_unit\"\n [errorMsg]=\"'Admin.Products.Validation.Name' | transloco\">\n <input type=\"text\"\n numbersOnly\n class=\"form-control\"\n formControlName=\"price_per_unit\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['price_per_unit'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.TrialDays' | transloco\"\n [label]=\"'Admin.Products.TrialDays' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"trial_days\"\n [errorMsg]=\"'Admin.Products.Validation.TrialDays' | transloco\">\n <input type=\"number\"\n min=\"1\"\n class=\"form-control\"\n formControlName=\"trial_days\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['trial_days'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MaxTrialHits' | transloco\"\n [label]=\"'Admin.Products.MaxTrialHits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_hits_trial\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"max_hits_trial\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['max_hits_trial'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.TrialHits' | transloco\"\n [label]=\"'Admin.Products.TrialHits' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"max_hits\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"max_hits\"\n [ngClass]=\"{ 'is-invalid': submitted && f['max_hits'].errors }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Description' | transloco\"\n [label]=\"'Admin.Products.Description' | transloco\"\n name=\"description\"\n [errorMsg]=\"'Admin.Products.Validation.Description' | transloco\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"description\"\n [ngClass]=\"{ 'is-invalid': submitted && f['description'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.SignupInstructions' | transloco\"\n [label]=\"'Admin.Products.SignupInstructions' | transloco\"\n name=\"signup_instructions\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"signup_instructions\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['signup_instructions'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-12\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.SignupInstructionEmployees' | transloco\"\n [label]=\"'Admin.Products.SignupInstructionEmployees' | transloco\"\n name=\"signup_instruction_employees\">\n <quill-editor [styles]=\"{ height: '220px' }\"\n formControlName=\"signup_instruction_employees\"\n [ngClass]=\"{\n 'is-invalid':\n submitted && f['signup_instruction_employees'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.PermissionKey' | transloco\"\n [label]=\"'Admin.Products.PermissionKey' | transloco\"\n name=\"permission_key\"\n [errorMsg]=\"\n 'Admin.Products.Validation.PermissionKey' | transloco\n \">\n <input type=\"text\"\n class=\"form-control\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['permission_key'].errors\n }\"\n formControlName=\"permission_key\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.FeatureKey' | transloco\"\n [label]=\"'Admin.Products.FeatureKey' | transloco\"\n name=\"feature_key\"\n [errorMsg]=\"'Admin.Products.Validation.FeatureKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['feature_key'].errors\n }\"\n formControlName=\"feature_key\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Admin.Products.ProductKey' | transloco\"\n class=\"col-md-6 p-0\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.Products.Tooltip.PermissionKey' | transloco\n \"\n name=\"product_key\"\n [errorMsg]=\"'Admin.Products.Validation.ProductKey' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"product_key\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['product_key'].errors\n }\" />\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Admin.Products.Category' | transloco\"\n class=\"col-md-6 p-0\"\n [showTooltip]=\"true\"\n [tooltipText]=\"\n 'Admin.Products.Tooltip.PermissionKey' | transloco\n \"\n name=\"category\"\n [errorMsg]=\"'Admin.Products.Validation.Category' | transloco\">\n <p-dropdown [options]=\"categories\"\n class=\"dropdown-bg-transparent\"\n formControlName=\"category\"\n [style]=\"{ width: '100%' }\"\n [ngClass]=\"{ 'is-invalid': submitted && f['category'].errors }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.BillingFrequency' | transloco\"\n [label]=\"'Admin.Products.BillingFrequency' | transloco\"\n class=\"col-md-6 p-0\"\n name=\"billing_frequency\">\n <p-dropdown [options]=\"frequency\"\n class=\"dropdown-bg-transparent\"\n formControlName=\"billing_frequency\"\n [required]=\"true\"\n [style]=\"{ width: '100%' }\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['billing_frequency'].errors\n }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.ProductPrivacyService' | transloco\"\n [label]=\"'Admin.Products.ProductPrivacyService' | transloco\"\n name=\"product_privacy_service_id\">\n <select formControlName=\"product_privacy_service_id\"\n class=\"form-control form-select\">\n <option *ngFor=\"let option of allTos\"\n [value]=\"option.id\">\n {{ option.title }}\n </option>\n </select>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 col-md-4\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MasterProduct' | transloco\"\n [label]=\"'Admin.Products.MasterProduct' | transloco\"\n name=\"master_product_id\">\n <select formControlName=\"master_product_id\"\n class=\"form-control form-select\">\n <option *ngFor=\"let option of productsList\"\n [value]=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </pw-input-container>\n </div>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-4\">\n <label class=\"info-circle\">{{ 'Admin.Products.AssignedRoles' | transloco }}\n <span class=\"tooltiptext gradient-custom-branding\">{{\n 'Admin.Subscriptions.Tooltip.AssignedRoles' | transloco\n }}</span>\n </label>\n <p-multiSelect [options]=\"allRoles\"\n formControlName=\"roles\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n <div class=\"col-12 col-md-4\"\n *ngIf=\"supportedCurrency$ | async as currency\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Currency' | transloco\"\n [label]=\"'Admin.Products.Currency' | transloco\"\n name=\"currency\"\n [errorMsg]=\"'Admin.Products.Validation.Currency' | transloco\">\n <select class=\"form-select\"\n formControlName=\"currency\"\n [ngClass]=\"{ 'is-invalid': submitted && f['currency'].errors }\">\n <option *ngFor=\"let option of currency['regions']\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\"\n *ngIf=\"supportedRegions$ | async as region\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.Region' | transloco\"\n [label]=\"'Admin.Products.Region' | transloco\"\n name=\"region\"\n [errorMsg]=\"'Admin.Products.Validation.Region' | transloco\">\n <select class=\"form-select\"\n formControlName=\"region\"\n [ngClass]=\"{ 'is-invalid': submitted && f['region'].errors }\">\n <option *ngFor=\"let option of region['regions']\"\n [value]=\"option\">\n {{ option }}\n </option>\n </select>\n </pw-input-container>\n </div>\n <div class=\"col-12 col-md-4\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.GitLabServiceDeskEmail' | transloco\"\n [label]=\"'Admin.Products.GitLabServiceDeskEmail' | transloco\"\n name=\"gitlab_service_desk_email\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"gitlab_service_desk_email\" />\n </pw-input-container>\n </div>\n <!--start toggles -->\n <div class=\"col-12 row\">\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsActive' | transloco\"\n [label]=\"'Admin.Products.IsActive' | transloco\"\n name=\"active\">\n <ui-switch class=\"d-block\"\n formControlName=\"active\"\n name=\"active\"\n [ngClass]=\"{ 'is-invalid': submitted && f['active'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MultipleAllowed' | transloco\"\n [label]=\"'Admin.Products.MultipleAllowed' | transloco\"\n class=\"nowrap\"\n name=\"multiple_allowed\">\n <ui-switch class=\"d-block\"\n formControlName=\"multiple_allowed\"\n name=\"multiple_allowed\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['multiple_allowed'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsVisible' | transloco\"\n [label]=\"'Admin.Products.IsVisible' | transloco\"\n name=\"visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"visible\"\n name=\"visible\"\n [ngClass]=\"{ 'is-invalid': submitted && f['visible'].errors }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.MembersVisible' | transloco\"\n [label]=\"'Admin.Products.MembersVisible' | transloco\"\n name=\"members_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"members_visible\"\n name=\"members_visible\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['members_visible'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.ChatVisible' | transloco\"\n [label]=\"'Admin.Products.ChatVisible' | transloco\"\n name=\"chat_visible\">\n <ui-switch class=\"d-block\"\n formControlName=\"chat_visible\"\n name=\"chat_visible\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['chat_visible'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Products.Tooltip.IsMasterProduct' | transloco\"\n [label]=\"'Admin.Products.IsMasterProduct' | transloco\"\n name=\"is_master_product\">\n <ui-switch class=\"d-block\"\n formControlName=\"is_master_product\"\n name=\"is_master_product\"\n [ngClass]=\"{\n 'is-invalid': submitted && f['is_master_product'].errors\n }\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n <!-- end toggles -->\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"back()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n class=\"btn btn-primary\"\n *rbacAllow=\"'Pages.Admin.Product.Edit'\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.FullLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"onImageSelection($event)\"\n aspectRatio=\"fullLogo\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n<ng-template #squaredLogoContent\n let-modal>\n <div class=\"modal-header\">\n <h3 class=\"modal-title mb-0 p-0\">{{ 'User.Subscriptions.SquaredLogo' | transloco }}</h3>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small> {{ 'User.Profile.PictureMessage' | transloco }}</small>\n <pw-image-cropper #profile\n (imageSelectionEvent)=\"uploadSquaredLogo($event)\"\n aspectRatio=\"auto\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".nowrap{white-space:nowrap}textarea{height:180px}.full-logo{object-fit:cover;width:280px}\n"] }]
|
|
307
307
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.ProductService }, { type: i2.NgbModal }, { type: i3.AdminService }], propDecorators: { onSave: [] } });
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbHMvcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbHMvcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBd0R6RCxZQUNJLFFBQWtCLEVBQ1YsY0FBOEIsRUFDOUIsWUFBc0IsRUFDdEIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSlIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3RCLGlCQUFZLEdBQVos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WSxDQUFDLE1BQU0sQ0FBQzs7OztxREFRcEI7MkZBcExRLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxvQkFBb0I7NEpBaUw5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FkbWluLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwQWRtaW4gfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvbW9kZWxzL2FkbWluLm1vZGVsJztcbmltcG9ydCB7IFByaXZhY3lUb3MgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL3ByaXZhY3ktdG9zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctcHJvZHVjdC1kZXRhaWxzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaWQ6IG51bWJlcjtcblxuICAgIGR1cGxpY2F0ZUlkOiBudW1iZXI7XG5cbiAgICBkYXRhOiBhbnk7XG5cbiAgICBwcm9kdWN0c0xpc3Q6IFNlbGVjdEl0ZW1bXTtcblxuICAgIHNlbGVjdGVkUHJvZHVjdHM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgc2VsZWN0ZWRTY29wZXM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgc3F1YXJlZExvZ28gPSAnJztcblxuICAgIGZyZXF1ZW5jeSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdTZWxlY3QnLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdNb250aGx5JyxcbiAgICAgICAgICAgIHZhbHVlOiAnbW9udGgnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnWWVhcmx5JyxcbiAgICAgICAgICAgIHZhbHVlOiAneWVhcidcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBjYXRlZ29yaWVzID0gW107XG5cbiAgICBhbGxUb3M6IFByaXZhY3lUb3NbXTtcblxuICAgIGFsbFJvbGVzOiBhbnlbXTtcblxuICAgIHN1YnNjcmlwdGlvbnNSb2xlc0RhdGE6IGFueTtcblxuICAgIHByb2R1Y3RSb2xlczogYW55O1xuXG4gICAgc2x1Zzogc3RyaW5nO1xuXG4gICAgZnVsbExvZ28gPSAnJztcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBtYXN0ZXJQcm9kdWN0SWQ6IG51bWJlcjtcblxuICAgIHN1cHBvcnRlZEN1cnJlbmN5JDogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgc3VwcG9ydGVkUmVnaW9ucyQ6IE9ic2VydmFibGU8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRQcm9kdWN0c0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRDdXJyZW5jeSQgPSB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFN1cHBvcnRlZEN1cnJlbmN5KCk7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkUmVnaW9ucyQgPSB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFN1cHBvcnRlZFJlZ2lvbnMoKTtcbiAgICAgICAgdGhpcy5tYXN0ZXJQcm9kdWN0SWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnByb2R1Y3RfaWQ7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMuZHVwbGljYXRlSWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZHVwbGljYXRlX3Byb2R1Y3RfaWQnXSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9ICtwYXJhbXNbJ2lkJ10gfHwgMDtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb2R1Y3REZXRhaWxzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25Sb2xlKHRoaXMuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZHVwbGljYXRlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RHVwbGljYXRlUHJvZHVjdERldGFpbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uUm9sZSh0aGlzLmR1cGxpY2F0ZUlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbHVnID0gdXNlci5zbHVnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRQcm9kdWN0cygpO1xuICAgICAgICB0aGlzLmdldEFsbFRvcygxLCB0aGlzLlBBR0VfU0laRSk7XG4gICAgICAgIHRoaXMuZ2V0Um9sZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1Y3RzKCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdHMoe1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICBtYXN0ZXJfcHJvZHVjdF9pZDogdGhpcy5tYXN0ZXJQcm9kdWN0SWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwPy5wcm9kdWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNMaXN0ID0gcmVzcC5wcm9kdWN0cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ3JpdGVyaWEoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2R1Y3RzID0gZXZlbnQudmFsdWUubWFwKHggPT4geCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREdXBsaWNhdGVQcm9kdWN0RGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0QnlJZCh0aGlzLmR1cGxpY2F0ZUlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNjb3BlcyA9IHJlc3BvbnNlLmRlcGVuZGVuY3lfcHJvZHVjdHM7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBkZWxldGUgZGF0YVsnaWQnXTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1Y3REZXRhaWxzKCkge1xuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0QnlJZCh0aGlzLmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY29wZXMgPSByZXNwb25zZS5kZXBlbmRlbmN5X3Byb2R1Y3RzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmZ1bGxfbG9nbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1bGxMb2dvID0gcmVzcG9uc2UuZnVsbF9sb2dvLnVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnNxdWFyZWRfbG9nbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNxdWFyZWRMb2dvID0gcmVzcG9uc2Uuc3F1YXJlZF9sb2dvLnVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0Q2F0ZWdvcmllcygpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNhdGVnb3JpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMudW5zaGlmdCh7XG4gICAgICAgICAgICBsYWJlbDogJ1NlbGVjdCcsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBhbGwgdG9zICovXG4gICAgcHJpdmF0ZSBnZXRBbGxUb3MocGFnZTogbnVtYmVyLCBwYWdlX3NpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldEFsbFRvcyh7IHBhZ2UsIHBhZ2Vfc2l6ZSB9LCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxUb3MgPSByZXNwb25zZS5wcm9kdWN0X3ByaXZhY3lfc2VydmljZXM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAVmFsaWRhdGVGb3JtKCdmb3JtJylcbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUsIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9O1xuICAgICAgICBkZWxldGUgZGF0YS5yb2xlcztcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmFkZFByb2R1Y3QoZGF0YSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5yb2xlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1JvbGVzRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9yb2xlczogdGhpcy5mb3JtLmdldCgncm9sZXMnKS52YWx1ZT8ubWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByb2xlX2lkOiByZXMgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHJlc3BvbnNlLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVByb2R1Y3RSb2xlcyh0aGlzLnN1YnNjcmlwdGlvbnNSb2xlc0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5VcGRhdGVkUm9sZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Qcm9kdWN0cy5BZGRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IodGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0dlbmVyaWNNZXNzYWdlLldlbnRXcm9uZycpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHRoaXMudG9hc3Quc2hvd1RvYXN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lfcHJvZHVjdHM6IHRoaXMuc2VsZWN0ZWRQcm9kdWN0cyxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgZGF0YS5yb2xlcztcblxuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZVByb2R1Y3QoZGF0YSwgdGhpcy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IodGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0dlbmVyaWNNZXNzYWdlLldlbnRXcm9uZycpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uUHJvZHVjdHMuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNSb2xlc0RhdGEgPSB7XG4gICAgICAgICAgICBwcm9kdWN0X3JvbGVzOiB0aGlzLmZvcm0uZ2V0KCdyb2xlcycpLnZhbHVlPy5tYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb2xlX2lkOiByZXMgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcHJvZHVjdF9pZDogdGhpcy5pZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnNhdmVQcm9kdWN0Um9sZXModGhpcy5zdWJzY3JpcHRpb25zUm9sZXNEYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5VcGRhdGVkUm9sZScpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb2xlcygpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0Um9sZXMoe30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbFJvbGVzID0gcmVzcG9uc2Uucm9sZXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uUm9sZShpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFByb2R1Y3RzUm9sZXMoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RSb2xlcyA9IHJlc3BvbnNlPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIHJvbGVzOiB0aGlzLnByb2R1Y3RSb2xlcy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5Nb2RhbChjb250ZW50KSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCwgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInIH0pO1xuICAgIH1cblxuICAgIG9uSW1hZ2VTZWxlY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihldmVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7YCR7dGhpcy5zbHVnLnRvTG9jYWxlTG93ZXJDYXNlKCl9XyR7RGF0ZS5wYXJzZShcbiAgICAgICAgICAgIG5ldyBEYXRlKCkudG9TdHJpbmcoKVxuICAgICAgICApfWB9LnBuZ2A7XG4gICAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZmlsZURhdGEuYXBwZW5kKCdmdWxsX2xvZ28nLCBmaWxlKTtcbiAgICAgICAgZmlsZURhdGEuYXBwZW5kKCdzdWJzY3JpcHRpb25faWQnLCBgJHt0aGlzLnN1YnNjcmlwdGlvbklkfWApO1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZVByb2R1Y3QoZmlsZURhdGEsIHRoaXMuaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgICAgICAgICAgdGhpcy5mdWxsTG9nbyA9IHJlcz8uZnVsbF9sb2dvPy51cmw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwbG9hZFNxdWFyZWRMb2dvKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLmRhdGFVUkx0b0Jsb2IoZXZlbnQpO1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGAke2Ake3RoaXMuc2x1Zy50b0xvY2FsZUxvd2VyQ2FzZSgpfV8ke0RhdGUucGFyc2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSgpLnRvU3RyaW5nKClcbiAgICAgICAgKX1gfS5wbmdgO1xuICAgICAgICBjb25zdCBmaWxlOiBGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSk7XG4gICAgICAgIGNvbnN0IGZpbGVEYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZpbGVEYXRhLmFwcGVuZCgnc3F1YXJlZF9sb2dvJywgZmlsZSk7XG4gICAgICAgIGZpbGVEYXRhLmFwcGVuZCgnc3Vic2NyaXB0aW9uX2lkJywgYCR7dGhpcy5zdWJzY3JpcHRpb25JZH1gKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS51cGRhdGVQcm9kdWN0KGZpbGVEYXRhLCB0aGlzLmlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuc3F1YXJlZExvZ28gPSByZXM/LnNxdWFyZWRfbG9nbz8udXJsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgZGF0YVVSTHRvQmxvYihkYXRhdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYXJyID0gZGF0YXVybC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBtaW1lID0gYXJyWzBdLm1hdGNoKC9eW0EtWl0qW2Etel0qOiguKj8pO1tBLVpdKi8pWzFdO1xuICAgICAgICBjb25zdCBic3RyID0gYXRvYihhcnJbMV0pO1xuICAgICAgICBsZXQgbiA9IGJzdHIubGVuZ3RoO1xuICAgICAgICBjb25zdCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgICB3aGlsZSAobi0tKSB7XG4gICAgICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbdThhcnJdLCB7IHR5cGU6IG1pbWUgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgcHJvZHVjdC1mb3JtIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC1ib2R5XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICA8aDMgY2xhc3M9XCJcIj5Qcm9kdWN0OiB7eyBkYXRhPy5uYW1lID8gZGF0YT8ubmFtZSA6ICdBZGQgTmV3JyB9fTwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtoZWFkZXJdPVwiJ0hvdyBUbydcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgIDxoND5Qcm9kdWN0IC8gRmVhdHVyZSBsb2dpYzwvaDQ+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICBMb2dpYyBmb3IgYmFjay1lbmQvZnJvbnQtZW5kIHBlcm1pc3Npb25zIGJpbmRpbmc6IDxiciAvPlxuICAgICAgICAgICAgICAgICAgKiBwcm9kdWN0LnBlcm1pc3Npb25fa2V5ID0mZ3Q7IHVzZXJzIGNhbiBiZSBzdWJzY3JpYmVkIHRvIG9ubHlcbiAgICAgICAgICAgICAgICAgIG9uZSBwcm9kdWN0IG9mIHNhbWUgcGVybWlzc2lvbl9rZXkgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAqIHByb2R1Y3QuY2F0ZWdvcnkgKHRoZXNlIGFyZSBmZWF0dXJlcykgPSZndDsgdXNlcnMgY2FuXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVkIHRvIG11bHRpcGxlIGZlYXR1cmVzIHdpdGhpbiB0aGUgc2FtZVxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC5wZXJtaXNzaW9uX2tleTxiciAvPlxuICAgICAgICAgICAgICAgICAgKiBwcm9kdWN0LnByb2R1Y3Rfa2V5ID0mZ3Q7IHRoaXMgaXMgdW5pcXVlLCBpdCBkZWZpbmVzIHRoZVxuICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiBmb3IgZnJvbnRlbmQgYmluZGluZzxiciAvPlxuICAgICAgICAgICAgICAgICAgKiBFeGFtcGxlIG9mIHBlcm1pc3Npb24gPSZndDtcbiAgICAgICAgICAgICAgICAgIHt7ICdQYWdlcy5Qcm9kdWN0LntwZXJtaXNzaW9uX2tleX0ue3Byb2R1Y3Rfa2V5fScgfX08YnIgLz5cbiAgICAgICAgICAgICAgICAgICogSWYgaXQncyBhIGZlYXR1cmUgYXNzb2NpYXRlZCB0byBhbiBleGlzdGluZyBwcm9qZWN0LCB5b3UgY2FuXG4gICAgICAgICAgICAgICAgICB0byBzZXQgdGhlIFwiZGVwZW5kZW5jeSBwcm9kdWN0XCIgYWNjb3JkaW5nbHkuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgIDxoND5JZiBmcmVlIHByb2R1Y3Q8L2g0PlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgU3RyaXBlIFBsYW4gbmVlZHMgdG8gYmUgbmlsLiA8YnIgLz5cbiAgICAgICAgICAgICAgICAgIFwiUHJpY2VcIiBwZXIgVW5pdCBuZWVkcyB0byBiZSBzZXQgYXMgMC4gPGJyIC8+XG4gICAgICAgICAgICAgICAgICBcIlRyaWFsIERheXNcIiBuZWVkcyB0byBiZSBzb21ldGhpbmcgbGlrZSA5OTk5OS4gPGJyIC8+XG4gICAgICAgICAgICAgICAgICBUaGUgcHJvZHVjdCBzaG91bGQgYmUgc2V0IGFzIFwidmlzaWJsZT09PWZhbHNlXCIuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICAgIDwvcC1hY2NvcmRpb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICpuZ0lmPVwiaWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC01XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnVXNlci5TdWJzY3JpcHRpb25zLkZ1bGxMb2dvJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInVXNlci5TdWJzY3JpcHRpb25zLlRvb2x0aXAuRnVsbExvZ28nfHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIid0b3AnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImZ1bGxMb2dvXCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlIGZ1bGwtbG9nbyB3LTEwMCBoLTEwMFwiXG4gICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J2Fzc2V0cy9pbWcvaWNvbnMvZGVtb19sb2dvMS5wbmcnO1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXkgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci5Qcm9maWxlLkNoYW5nZScgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdVc2VyLlN1YnNjcmlwdGlvbnMuU3F1YXJlZExvZ28nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcCBtcy0xXCJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidVc2VyLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5TcXVhcmVkTG9nbyd8dHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3RvcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic3F1YXJlZExvZ29cIlxuICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNzBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcXVhcmVkX2xvZ29cIlxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNzBcIlxuICAgICAgICAgICAgICAgICAgb25lcnJvcj1cInRoaXMub25lcnJvcj1udWxsO3RoaXMuc3JjPSdhc3NldHMvaW1nL2ljb25zL2NvbXBhbnkucG5nJztcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5IG10LTJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Nb2RhbChzcXVhcmVkTG9nb0NvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci5Qcm9maWxlLkNoYW5nZScgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0xhYmVsLk5hbWUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5OYW1lJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ25hbWUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuTmlja05hbWUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5OaWNrTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuaWNrbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLlByb2R1Y3RzLlZhbGlkYXRpb24uTmlja05hbWUnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5pY2tuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyduaWNrbmFtZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuTWluVW5pdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5NaW5Vbml0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtaW5fdW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlByb2R1Y3RzLlZhbGlkYXRpb24uTWluVW5pdCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5fdW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21pbl91bml0cyddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLk1heFVuaXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuTWF4VW5pdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibWF4X3VuaXRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5Qcm9kdWN0cy5WYWxpZGF0aW9uLk1heFVuaXQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4X3VuaXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYXhfdW5pdHMnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICB7eyAnQWRtaW4uUHJvZHVjdHMuRGVwZW5kZW5jeVByb2R1Y3RzJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLkRlcGVuZGVuY3lQcm9kdWN0cycgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cInByb2R1Y3RzTGlzdFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNjb3Blc1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hDcml0ZXJpYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRMYWJlbHM9XCIxXCJcbiAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj5cbiAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuU3RyaXBlUGxhbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5TdHJpcGVQbGFuJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic3RyaXBlX3BsYW5faWRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RyaXBlX3BsYW5faWRcIiAvPlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlByaWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlByaWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicHJpY2VfcGVyX3VuaXRcIlxuICAgICAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5Qcm9kdWN0cy5WYWxpZGF0aW9uLk5hbWUnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBudW1iZXJzT25seVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlX3Blcl91bml0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydwcmljZV9wZXJfdW5pdCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlRyaWFsRGF5cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5UcmlhbERheXMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTYgcC0wXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmlhbF9kYXlzXCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5UcmlhbERheXMnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX2RheXNcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2RheXMnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5NYXhUcmlhbEhpdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuTWF4VHJpYWxIaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwibWF4X2hpdHNfdHJpYWxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4X2hpdHNfdHJpYWxcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21heF9oaXRzX3RyaWFsJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuVHJpYWxIaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlRyaWFsSGl0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cIm1heF9oaXRzXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heF9oaXRzXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYXhfaGl0cyddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICcyMjBweCcgfVwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Rlc2NyaXB0aW9uJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICA8L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5TaWdudXBJbnN0cnVjdGlvbnMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlNpZ251cEluc3RydWN0aW9ucycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaWdudXBfaW5zdHJ1Y3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnMjIwcHgnIH1cIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbnVwX2luc3RydWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnc2lnbnVwX2luc3RydWN0aW9ucyddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlNpZ251cEluc3RydWN0aW9uRW1wbG95ZWVzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5TaWdudXBJbnN0cnVjdGlvbkVtcGxveWVlcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaWdudXBfaW5zdHJ1Y3Rpb25fZW1wbG95ZWVzXCI+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnMjIwcHgnIH1cIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbnVwX2luc3RydWN0aW9uX2VtcGxveWVlc1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiYgZlsnc2lnbnVwX2luc3RydWN0aW9uX2VtcGxveWVlcyddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlBlcm1pc3Npb25LZXknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuUGVybWlzc2lvbktleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInBlcm1pc3Npb25fa2V5XCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5QZXJtaXNzaW9uS2V5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncGVybWlzc2lvbl9rZXknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGVybWlzc2lvbl9rZXlcIiAvPlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLkZlYXR1cmVLZXknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuRmVhdHVyZUtleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImZlYXR1cmVfa2V5XCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5GZWF0dXJlS2V5JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2ZlYXR1cmVfa2V5J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVfa2V5XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuUHJvZHVjdEtleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlBlcm1pc3Npb25LZXknIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInByb2R1Y3Rfa2V5XCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5Qcm9kdWN0S2V5JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0X2tleVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncHJvZHVjdF9rZXknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTYgcC0wXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5QZXJtaXNzaW9uS2V5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlByb2R1Y3RzLlZhbGlkYXRpb24uQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1iZy10cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjYXRlZ29yeSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuQmlsbGluZ0ZyZXF1ZW5jeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5CaWxsaW5nRnJlcXVlbmN5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiYmlsbGluZ19mcmVxdWVuY3lcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tYmctdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiaWxsaW5nX2ZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydiaWxsaW5nX2ZyZXF1ZW5jeSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5Qcm9kdWN0UHJpdmFjeVNlcnZpY2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuUHJvZHVjdFByaXZhY3lTZXJ2aWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicHJvZHVjdF9wcml2YWN5X3NlcnZpY2VfaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9wcml2YWN5X3NlcnZpY2VfaWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWxsVG9zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCJcbiAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLk1hc3RlclByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuTWFzdGVyUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cIm1hc3Rlcl9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1hc3Rlcl9wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb2R1Y3RzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImluZm8tY2lyY2xlXCI+e3sgJ0FkbWluLlByb2R1Y3RzLkFzc2lnbmVkUm9sZXMnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Bc3NpZ25lZFJvbGVzJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiYWxsUm9sZXNcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJvbGVzXCJcbiAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInN1cHBvcnRlZEN1cnJlbmN5JCB8IGFzeW5jIGFzIGN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5DdXJyZW5jeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuQ3VycmVuY3knIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5DdXJyZW5jeScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjdXJyZW5jeSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY3VycmVuY3lbJ3JlZ2lvbnMnXVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInN1cHBvcnRlZFJlZ2lvbnMkIHwgYXN5bmMgYXMgcmVnaW9uXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5SZWdpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlJlZ2lvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJyZWdpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5SZWdpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlZ2lvblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3JlZ2lvbiddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcmVnaW9uWydyZWdpb25zJ11cIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5HaXRMYWJTZXJ2aWNlRGVza0VtYWlsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5HaXRMYWJTZXJ2aWNlRGVza0VtYWlsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cImdpdGxhYl9zZXJ2aWNlX2Rlc2tfZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2l0bGFiX3NlcnZpY2VfZGVza19lbWFpbFwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tc3RhcnQgdG9nZ2xlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5Jc0FjdGl2ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLklzQWN0aXZlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydhY3RpdmUnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLk11bHRpcGxlQWxsb3dlZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLk11bHRpcGxlQWxsb3dlZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtdWx0aXBsZV9hbGxvd2VkXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtdWx0aXBsZV9hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibXVsdGlwbGVfYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbXVsdGlwbGVfYWxsb3dlZCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuSXNWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuSXNWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd2aXNpYmxlJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5NZW1iZXJzVmlzaWJsZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLk1lbWJlcnNWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtZW1iZXJzX3Zpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lbWJlcnNfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm1lbWJlcnNfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWVtYmVyc192aXNpYmxlJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5DaGF0VmlzaWJsZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLkNoYXRWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGF0X3Zpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoYXRfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNoYXRfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY2hhdF92aXNpYmxlJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIlxuICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5Jc01hc3RlclByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5Jc01hc3RlclByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzX21hc3Rlcl9wcm9kdWN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc19tYXN0ZXJfcHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzX21hc3Rlcl9wcm9kdWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydpc19tYXN0ZXJfcHJvZHVjdCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGVuZCB0b2dnbGVzIC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1lbmQgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Qcm9kdWN0LkVkaXQnXCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250ZW50XG4gIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoMyBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTAgcC0wXCI+e3sgJ1VzZXIuU3Vic2NyaXB0aW9ucy5GdWxsTG9nbycgfCB0cmFuc2xvY28gfX08L2gzPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0bi1jbG9zZSBmbG9hdC1lbmRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPHNtYWxsPiB7eyAnVXNlci5Qcm9maWxlLlBpY3R1cmVNZXNzYWdlJyB8IHRyYW5zbG9jbyB9fTwvc21hbGw+XG4gICAgPHB3LWltYWdlLWNyb3BwZXIgI3Byb2ZpbGVcbiAgICAgIChpbWFnZVNlbGVjdGlvbkV2ZW50KT1cIm9uSW1hZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICBhc3BlY3RSYXRpbz1cImZ1bGxMb2dvXCJcbiAgICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2UoKVwiPlxuICAgIDwvcHctaW1hZ2UtY3JvcHBlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzcXVhcmVkTG9nb0NvbnRlbnRcbiAgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGgzIGNsYXNzPVwibW9kYWwtdGl0bGUgbWItMCBwLTBcIj57eyAnVXNlci5TdWJzY3JpcHRpb25zLlNxdWFyZWRMb2dvJyB8IHRyYW5zbG9jbyB9fTwvaDM+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxuXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxzbWFsbD4ge3sgJ1VzZXIuUHJvZmlsZS5QaWN0dXJlTWVzc2FnZScgfCB0cmFuc2xvY28gfX08L3NtYWxsPlxuICAgIDxwdy1pbWFnZS1jcm9wcGVyICNwcm9maWxlXG4gICAgICAoaW1hZ2VTZWxlY3Rpb25FdmVudCk9XCJ1cGxvYWRTcXVhcmVkTG9nbygkZXZlbnQpXCJcbiAgICAgIGFzcGVjdFJhdGlvPVwiYXV0b1wiXG4gICAgICAoY2xvc2VFdmVudCk9XCJvbkNsb3NlKClcIj5cbiAgICA8L3B3LWltYWdlLWNyb3BwZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbHMvcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcm9kdWN0cy9wcm9kdWN0LWRldGFpbHMvcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBSXRELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU8vQyxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsZ0JBQWdCO0lBd0R6RCxZQUNJLFFBQWtCLEVBQ1YsY0FBOEIsRUFDOUIsWUFBc0IsRUFDdEIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSlIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBekR0QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBVWxCLHFCQUFnQixHQUFpQixFQUFFLENBQUM7UUFFcEMsbUJBQWMsR0FBaUIsRUFBRSxDQUFDO1FBRWxDLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLGNBQVMsR0FBRztZQUNSO2dCQUNJLEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUssRUFBRSxJQUFJO2FBQ2Q7WUFDRDtnQkFDSSxLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLE9BQU87YUFDakI7WUFDRDtnQkFDSSxLQUFLLEVBQUUsUUFBUTtnQkFDZixLQUFLLEVBQUUsTUFBTTthQUNoQjtTQUNKLENBQUM7UUFFRixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBWWhCLGFBQVEsR0FBRyxFQUFFLENBQUM7UUFpQlYsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3JFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDbkUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQztRQUNyRSxJQUFJLENBQUMsY0FBYyxHQUFHLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNqQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckIsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQ3JDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUIsSUFBSSxJQUFJLEVBQUU7Z0JBQ04sSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQ3pCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRU8sV0FBVztRQUNmLElBQUksQ0FBQyxjQUFjO2FBQ2QsV0FBVyxDQUFDO1lBQ1QsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ3BDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxlQUFlO1NBQzFDLENBQUM7YUFDRCxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDZCxJQUFJLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO2dCQUN4QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUM1QyxPQUFPO3dCQUNILEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRTt3QkFDakIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJO3FCQUN0QixDQUFDO2dCQUNOLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTywwQkFBMEI7UUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0RSxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQztZQUNuRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDO2dCQUNuRCxJQUFJLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztnQkFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEVBQUU7b0JBQ3BCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7aUJBQzFDO2dCQUNELElBQUksUUFBUSxDQUFDLFlBQVksRUFBRTtvQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQztpQkFDaEQ7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM1RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsVUFBVSxFQUFFO2dCQUNqQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDbEMsTUFBTSxJQUFJLEdBQUc7d0JBQ1QsS0FBSyxFQUFFLE9BQU87d0JBQ2QsS0FBSyxFQUFFLE9BQU87cUJBQ2pCLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1lBQ3BCLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLElBQUk7U0FDZCxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsK0JBQStCO0lBQ3ZCLFNBQVMsQ0FBQyxJQUFZLEVBQUUsU0FBaUI7UUFDN0MsSUFBSSxDQUFDLFlBQVk7YUFDWixTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUNuRCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsd0JBQXdCLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBR0QsTUFBTTtRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNULElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjthQUFNO1lBQ0gsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDRCxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDbEIsSUFBSSxDQUFDLGNBQWM7YUFDZCxVQUFVLENBQUMsSUFBSSxDQUFDO2FBQ2hCLFNBQVMsQ0FBQztZQUNQLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtvQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQy9CLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO3dCQUN2QixJQUFJLENBQUMsc0JBQXNCLEdBQUc7NEJBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dDQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDOzRCQUM1QixDQUFDLENBQUM7NEJBQ0YsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFO3lCQUMxQixDQUFDO3dCQUNGLElBQUksQ0FBQyxZQUFZOzZCQUNaLGdCQUFnQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQzs2QkFDN0MsU0FBUyxDQUFDLEdBQUcsRUFBRTs0QkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUN4RCxDQUFDO3dCQUNOLENBQUMsQ0FBQyxDQUFDO3FCQUNWO29CQUNELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDWixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUM1RCxDQUFDO2lCQUNMO3FCQUFNO29CQUNILElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztpQkFDNUU7WUFDTCxDQUFDO1lBQ0QsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO1NBQzlDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsUUFBUTtRQUNKLE1BQU0sSUFBSSxHQUFHO1lBQ1QsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7WUFDbEIsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMxQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDdkMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztRQUVsQixJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQzthQUM1RTtpQkFBTTtnQkFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDZjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLHNCQUFzQixHQUFHO1lBQzFCLGFBQWEsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQzVCLENBQUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUN0QixDQUFDO1FBQ0YsSUFBSSxDQUFDLFlBQVk7YUFDWixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7YUFDN0MsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztRQUM5RSxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ04sSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRU8sUUFBUTtRQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQy9DLE9BQU87b0JBQ0gsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNoQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUU7b0JBQ2QsUUFBUSxFQUFFLEtBQUssS0FBSyxDQUFDO2lCQUN4QixDQUFDO1lBQ04sQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxFQUFVO1FBQ2xDLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDckMsT0FBTztvQkFDSCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2lCQUNkLENBQUM7WUFDTixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUNqQixLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBSztRQUNsQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FDOUQsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FDeEIsRUFBRSxNQUFNLENBQUM7UUFDVixNQUFNLElBQUksR0FBUyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFDaEMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFLO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUM5RCxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUN4QixFQUFFLE1BQU0sQ0FBQztRQUNWLE1BQU0sSUFBSSxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN0QyxRQUFRLENBQUMsTUFBTSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFBRSxZQUFZLEVBQUUsR0FBRyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxhQUFhLENBQUMsT0FBZTtRQUN6QixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsRUFBRSxFQUFFO1lBQ1IsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakM7UUFFRCxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0E5VVEsdUJBQXVCO2tHQUF2Qix1QkFBdUIsaUZDbkJwQyxtdjhCQW9vQkE7O0FEcGNJO0lBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7OztxREFRcEI7MkZBcExRLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDSSxvQkFBb0I7NEpBaUw5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IFNlbGVjdEl0ZW0gfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IFByaXZhY3lUb3MgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvaW50ZXJmYWNlL3ByaXZhY3ktdG9zLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUHJvZHVjdFNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctcHJvZHVjdC1kZXRhaWxzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQcm9kdWN0RGV0YWlsc0NvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaWQ6IG51bWJlcjtcblxuICAgIGR1cGxpY2F0ZUlkOiBudW1iZXI7XG5cbiAgICBkYXRhOiBhbnk7XG5cbiAgICBwcm9kdWN0c0xpc3Q6IFNlbGVjdEl0ZW1bXTtcblxuICAgIHNlbGVjdGVkUHJvZHVjdHM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgc2VsZWN0ZWRTY29wZXM6IFNlbGVjdEl0ZW1bXSA9IFtdO1xuXG4gICAgc3F1YXJlZExvZ28gPSAnJztcblxuICAgIGZyZXF1ZW5jeSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdTZWxlY3QnLFxuICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6ICdNb250aGx5JyxcbiAgICAgICAgICAgIHZhbHVlOiAnbW9udGgnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiAnWWVhcmx5JyxcbiAgICAgICAgICAgIHZhbHVlOiAneWVhcidcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBjYXRlZ29yaWVzID0gW107XG5cbiAgICBhbGxUb3M6IFByaXZhY3lUb3NbXTtcblxuICAgIGFsbFJvbGVzOiBhbnlbXTtcblxuICAgIHN1YnNjcmlwdGlvbnNSb2xlc0RhdGE6IGFueTtcblxuICAgIHByb2R1Y3RSb2xlczogYW55O1xuXG4gICAgc2x1Zzogc3RyaW5nO1xuXG4gICAgZnVsbExvZ28gPSAnJztcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBtYXN0ZXJQcm9kdWN0SWQ6IG51bWJlcjtcblxuICAgIHN1cHBvcnRlZEN1cnJlbmN5JDogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgc3VwcG9ydGVkUmVnaW9ucyQ6IE9ic2VydmFibGU8YW55PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRQcm9kdWN0c0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRDdXJyZW5jeSQgPSB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFN1cHBvcnRlZEN1cnJlbmN5KCk7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkUmVnaW9ucyQgPSB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFN1cHBvcnRlZFJlZ2lvbnMoKTtcbiAgICAgICAgdGhpcy5tYXN0ZXJQcm9kdWN0SWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnByb2R1Y3RfaWQ7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMuZHVwbGljYXRlSWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtc1snZHVwbGljYXRlX3Byb2R1Y3RfaWQnXSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9ICtwYXJhbXNbJ2lkJ10gfHwgMDtcbiAgICAgICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb2R1Y3REZXRhaWxzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25Sb2xlKHRoaXMuaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuZHVwbGljYXRlSWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RHVwbGljYXRlUHJvZHVjdERldGFpbHMoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uUm9sZSh0aGlzLmR1cGxpY2F0ZUlkKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVzZXJTdG9yZSgpLnN1YnNjcmliZSh1c2VyID0+IHtcbiAgICAgICAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zbHVnID0gdXNlci5zbHVnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5nZXRQcm9kdWN0cygpO1xuICAgICAgICB0aGlzLmdldEFsbFRvcygxLCB0aGlzLlBBR0VfU0laRSk7XG4gICAgICAgIHRoaXMuZ2V0Um9sZXMoKTtcbiAgICB9XG5cbiAgICBnZXQgZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1Y3RzKCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdHMoe1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICBtYXN0ZXJfcHJvZHVjdF9pZDogdGhpcy5tYXN0ZXJQcm9kdWN0SWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwPy5wcm9kdWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdHNMaXN0ID0gcmVzcC5wcm9kdWN0cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU2VhcmNoQ3JpdGVyaWEoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb2R1Y3RzID0gZXZlbnQudmFsdWUubWFwKHggPT4geCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREdXBsaWNhdGVQcm9kdWN0RGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0QnlJZCh0aGlzLmR1cGxpY2F0ZUlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNjb3BlcyA9IHJlc3BvbnNlLmRlcGVuZGVuY3lfcHJvZHVjdHM7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBkZWxldGUgZGF0YVsnaWQnXTtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb2R1Y3REZXRhaWxzKCkge1xuICAgICAgICBpZiAodGhpcy5pZCkge1xuICAgICAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0QnlJZCh0aGlzLmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTY29wZXMgPSByZXNwb25zZS5kZXBlbmRlbmN5X3Byb2R1Y3RzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmZ1bGxfbG9nbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZ1bGxMb2dvID0gcmVzcG9uc2UuZnVsbF9sb2dvLnVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnNxdWFyZWRfbG9nbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNxdWFyZWRMb2dvID0gcmVzcG9uc2Uuc3F1YXJlZF9sb2dvLnVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS5nZXRQcm9kdWN0Q2F0ZWdvcmllcygpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmNhdGVnb3JpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMudW5zaGlmdCh7XG4gICAgICAgICAgICBsYWJlbDogJ1NlbGVjdCcsXG4gICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRnVuY3Rpb24gdG8gY2FsbCBhbGwgdG9zICovXG4gICAgcHJpdmF0ZSBnZXRBbGxUb3MocGFnZTogbnVtYmVyLCBwYWdlX3NpemU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldEFsbFRvcyh7IHBhZ2UsIHBhZ2Vfc2l6ZSB9LCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGxUb3MgPSByZXNwb25zZS5wcm9kdWN0X3ByaXZhY3lfc2VydmljZXM7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAVmFsaWRhdGVGb3JtKCdmb3JtJylcbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaWQpIHtcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUsIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCB9O1xuICAgICAgICBkZWxldGUgZGF0YS5yb2xlcztcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmFkZFByb2R1Y3QoZGF0YSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS52YWx1ZS5yb2xlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uc1JvbGVzRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdF9yb2xlczogdGhpcy5mb3JtLmdldCgncm9sZXMnKS52YWx1ZT8ubWFwKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyByb2xlX2lkOiByZXMgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHJlc3BvbnNlLmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2F2ZVByb2R1Y3RSb2xlcyh0aGlzLnN1YnNjcmlwdGlvbnNSb2xlc0RhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5VcGRhdGVkUm9sZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmFjaygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Qcm9kdWN0cy5BZGRlZE1lc3NhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IodGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0dlbmVyaWNNZXNzYWdlLldlbnRXcm9uZycpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHRoaXMudG9hc3Quc2hvd1RvYXN0KGVycm9yKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblVwZGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuZm9ybS52YWx1ZSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lfcHJvZHVjdHM6IHRoaXMuc2VsZWN0ZWRQcm9kdWN0cyxcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgZGF0YS5yb2xlcztcblxuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZVByb2R1Y3QoZGF0YSwgdGhpcy5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3QuZXJyb3IodGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0dlbmVyaWNNZXNzYWdlLldlbnRXcm9uZycpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uUHJvZHVjdHMuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnNSb2xlc0RhdGEgPSB7XG4gICAgICAgICAgICBwcm9kdWN0X3JvbGVzOiB0aGlzLmZvcm0uZ2V0KCdyb2xlcycpLnZhbHVlPy5tYXAocmVzID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyByb2xlX2lkOiByZXMgfTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgcHJvZHVjdF9pZDogdGhpcy5pZFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnNhdmVQcm9kdWN0Um9sZXModGhpcy5zdWJzY3JpcHRpb25zUm9sZXNEYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5Vc2Vycy5VcGRhdGVkUm9sZScpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSb2xlcygpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0Um9sZXMoe30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFsbFJvbGVzID0gcmVzcG9uc2Uucm9sZXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uUm9sZShpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmdldFByb2R1Y3RzUm9sZXMoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RSb2xlcyA9IHJlc3BvbnNlPy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5pZFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIHJvbGVzOiB0aGlzLnByb2R1Y3RSb2xlcy5tYXAoeCA9PiB4LmlkKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9wZW5Nb2RhbChjb250ZW50KSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCwgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInIH0pO1xuICAgIH1cblxuICAgIG9uSW1hZ2VTZWxlY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihldmVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7YCR7dGhpcy5zbHVnLnRvTG9jYWxlTG93ZXJDYXNlKCl9XyR7RGF0ZS5wYXJzZShcbiAgICAgICAgICAgIG5ldyBEYXRlKCkudG9TdHJpbmcoKVxuICAgICAgICApfWB9LnBuZ2A7XG4gICAgICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lKTtcbiAgICAgICAgY29uc3QgZmlsZURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgZmlsZURhdGEuYXBwZW5kKCdmdWxsX2xvZ28nLCBmaWxlKTtcbiAgICAgICAgZmlsZURhdGEuYXBwZW5kKCdzdWJzY3JpcHRpb25faWQnLCBgJHt0aGlzLnN1YnNjcmlwdGlvbklkfWApO1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLnVwZGF0ZVByb2R1Y3QoZmlsZURhdGEsIHRoaXMuaWQpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgICAgICAgICAgdGhpcy5mdWxsTG9nbyA9IHJlcz8uZnVsbF9sb2dvPy51cmw7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwbG9hZFNxdWFyZWRMb2dvKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSB0aGlzLmRhdGFVUkx0b0Jsb2IoZXZlbnQpO1xuICAgICAgICBjb25zdCBmaWxlbmFtZSA9IGAke2Ake3RoaXMuc2x1Zy50b0xvY2FsZUxvd2VyQ2FzZSgpfV8ke0RhdGUucGFyc2UoXG4gICAgICAgICAgICBuZXcgRGF0ZSgpLnRvU3RyaW5nKClcbiAgICAgICAgKX1gfS5wbmdgO1xuICAgICAgICBjb25zdCBmaWxlOiBGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSk7XG4gICAgICAgIGNvbnN0IGZpbGVEYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgIGZpbGVEYXRhLmFwcGVuZCgnc3F1YXJlZF9sb2dvJywgZmlsZSk7XG4gICAgICAgIGZpbGVEYXRhLmFwcGVuZCgnc3Vic2NyaXB0aW9uX2lkJywgYCR7dGhpcy5zdWJzY3JpcHRpb25JZH1gKTtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZS51cGRhdGVQcm9kdWN0KGZpbGVEYXRhLCB0aGlzLmlkKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICAgICAgICAgIHRoaXMuc3F1YXJlZExvZ28gPSByZXM/LnNxdWFyZWRfbG9nbz8udXJsO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgZGF0YVVSTHRvQmxvYihkYXRhdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYXJyID0gZGF0YXVybC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBtaW1lID0gYXJyWzBdLm1hdGNoKC9eW0EtWl0qW2Etel0qOiguKj8pO1tBLVpdKi8pWzFdO1xuICAgICAgICBjb25zdCBic3RyID0gYXRvYihhcnJbMV0pO1xuICAgICAgICBsZXQgbiA9IGJzdHIubGVuZ3RoO1xuICAgICAgICBjb25zdCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgICB3aGlsZSAobi0tKSB7XG4gICAgICAgICAgICB1OGFycltuXSA9IGJzdHIuY2hhckNvZGVBdChuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbdThhcnJdLCB7IHR5cGU6IG1pbWUgfSk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgcHJvZHVjdC1mb3JtIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC1ib2R5XCI+XG4gICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiXG4gICAgICAgIGNsYXNzPVwicHJldmlvdXNcIj48aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICA8aDMgY2xhc3M9XCJcIj5Qcm9kdWN0OiB7eyBkYXRhPy5uYW1lID8gZGF0YT8ubmFtZSA6ICdBZGQgTmV3JyB9fTwvaDM+XG4gICAgICA8ZGl2IGNsYXNzPVwibXktNFwiPlxuICAgICAgICA8cC1hY2NvcmRpb24+XG4gICAgICAgICAgPHAtYWNjb3JkaW9uVGFiIFtoZWFkZXJdPVwiJ0hvdyBUbydcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgIDxoND5Qcm9kdWN0IC8gRmVhdHVyZSBsb2dpYzwvaDQ+XG4gICAgICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgICAgICBMb2dpYyBmb3IgYmFjay1lbmQvZnJvbnQtZW5kIHBlcm1pc3Npb25zIGJpbmRpbmc6IDxiciAvPlxuICAgICAgICAgICAgICAgICAgKiBwcm9kdWN0LnBlcm1pc3Npb25fa2V5ID0mZ3Q7IHVzZXJzIGNhbiBiZSBzdWJzY3JpYmVkIHRvIG9ubHlcbiAgICAgICAgICAgICAgICAgIG9uZSBwcm9kdWN0IG9mIHNhbWUgcGVybWlzc2lvbl9rZXkgPGJyIC8+XG4gICAgICAgICAgICAgICAgICAqIHByb2R1Y3QuY2F0ZWdvcnkgKHRoZXNlIGFyZSBmZWF0dXJlcykgPSZndDsgdXNlcnMgY2FuXG4gICAgICAgICAgICAgICAgICBzdWJzY3JpYmVkIHRvIG11bHRpcGxlIGZlYXR1cmVzIHdpdGhpbiB0aGUgc2FtZVxuICAgICAgICAgICAgICAgICAgcHJvZHVjdC5wZXJtaXNzaW9uX2tleTxiciAvPlxuICAgICAgICAgICAgICAgICAgKiBwcm9kdWN0LnByb2R1Y3Rfa2V5ID0mZ3Q7IHRoaXMgaXMgdW5pcXVlLCBpdCBkZWZpbmVzIHRoZVxuICAgICAgICAgICAgICAgICAgcGVybWlzc2lvbiBmb3IgZnJvbnRlbmQgYmluZGluZzxiciAvPlxuICAgICAgICAgICAgICAgICAgKiBFeGFtcGxlIG9mIHBlcm1pc3Npb24gPSZndDtcbiAgICAgICAgICAgICAgICAgIHt7ICdQYWdlcy5Qcm9kdWN0LntwZXJtaXNzaW9uX2tleX0ue3Byb2R1Y3Rfa2V5fScgfX08YnIgLz5cbiAgICAgICAgICAgICAgICAgICogSWYgaXQncyBhIGZlYXR1cmUgYXNzb2NpYXRlZCB0byBhbiBleGlzdGluZyBwcm9qZWN0LCB5b3UgY2FuXG4gICAgICAgICAgICAgICAgICB0byBzZXQgdGhlIFwiZGVwZW5kZW5jeSBwcm9kdWN0XCIgYWNjb3JkaW5nbHkuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgIDxoND5JZiBmcmVlIHByb2R1Y3Q8L2g0PlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAgU3RyaXBlIFBsYW4gbmVlZHMgdG8gYmUgbmlsLiA8YnIgLz5cbiAgICAgICAgICAgICAgICAgIFwiUHJpY2VcIiBwZXIgVW5pdCBuZWVkcyB0byBiZSBzZXQgYXMgMC4gPGJyIC8+XG4gICAgICAgICAgICAgICAgICBcIlRyaWFsIERheXNcIiBuZWVkcyB0byBiZSBzb21ldGhpbmcgbGlrZSA5OTk5OS4gPGJyIC8+XG4gICAgICAgICAgICAgICAgICBUaGUgcHJvZHVjdCBzaG91bGQgYmUgc2V0IGFzIFwidmlzaWJsZT09PWZhbHNlXCIuXG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvcC1hY2NvcmRpb25UYWI+XG4gICAgICAgIDwvcC1hY2NvcmRpb24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICpuZ0lmPVwiaWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtdC01XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICB7eyAnVXNlci5TdWJzY3JpcHRpb25zLkZ1bGxMb2dvJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgbXMtMVwiXG4gICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInVXNlci5TdWJzY3JpcHRpb25zLlRvb2x0aXAuRnVsbExvZ28nfHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cIid0b3AnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImZ1bGxMb2dvXCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlIGZ1bGwtbG9nbyB3LTEwMCBoLTEwMFwiXG4gICAgICAgICAgICAgICAgICBvbmVycm9yPVwidGhpcy5vbmVycm9yPW51bGw7dGhpcy5zcmM9J2Fzc2V0cy9pbWcvaWNvbnMvZGVtb19sb2dvMS5wbmcnO1wiIC8+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXkgbXQtMlwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci5Qcm9maWxlLkNoYW5nZScgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG10LTVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImltYWdlLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdVc2VyLlN1YnNjcmlwdGlvbnMuU3F1YXJlZExvZ28nIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcCBtcy0xXCJcbiAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidVc2VyLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5TcXVhcmVkTG9nbyd8dHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ3RvcCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwic3F1YXJlZExvZ29cIlxuICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNzBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcXVhcmVkX2xvZ29cIlxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNzBcIlxuICAgICAgICAgICAgICAgICAgb25lcnJvcj1cInRoaXMub25lcnJvcj1udWxsO3RoaXMuc3JjPSdhc3NldHMvaW1nL2ljb25zL2NvbXBhbnkucG5nJztcIiAvPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5IG10LTJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Nb2RhbChzcXVhcmVkTG9nb0NvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVXNlci5Qcm9maWxlLkNoYW5nZScgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0xhYmVsLk5hbWUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5OYW1lJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ25hbWUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuTmlja05hbWUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5OaWNrTmFtZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJuaWNrbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLlByb2R1Y3RzLlZhbGlkYXRpb24uTmlja05hbWUnIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5pY2tuYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyduaWNrbmFtZSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuTWluVW5pdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5NaW5Vbml0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtaW5fdW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlByb2R1Y3RzLlZhbGlkYXRpb24uTWluVW5pdCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5fdW5pdHNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21pbl91bml0cyddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLk1heFVuaXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuTWF4VW5pdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibWF4X3VuaXRzXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5Qcm9kdWN0cy5WYWxpZGF0aW9uLk1heFVuaXQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBtaW49XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4X3VuaXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYXhfdW5pdHMnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiaW5mby1jaXJjbGVcIj5cbiAgICAgICAgICAgICAgICB7eyAnQWRtaW4uUHJvZHVjdHMuRGVwZW5kZW5jeVByb2R1Y3RzJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwidG9vbHRpcHRleHQgZ3JhZGllbnQtY3VzdG9tLWJyYW5kaW5nXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLkRlcGVuZGVuY3lQcm9kdWN0cycgfCB0cmFuc2xvY29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cInByb2R1Y3RzTGlzdFwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNjb3Blc1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25TZWFyY2hDcml0ZXJpYSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF4U2VsZWN0ZWRMYWJlbHM9XCIxXCJcbiAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj5cbiAgICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuU3RyaXBlUGxhbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5TdHJpcGVQbGFuJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwic3RyaXBlX3BsYW5faWRcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RyaXBlX3BsYW5faWRcIiAvPlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlByaWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlByaWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicHJpY2VfcGVyX3VuaXRcIlxuICAgICAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5Qcm9kdWN0cy5WYWxpZGF0aW9uLk5hbWUnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBudW1iZXJzT25seVxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByaWNlX3Blcl91bml0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydwcmljZV9wZXJfdW5pdCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAvPlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlRyaWFsRGF5cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5UcmlhbERheXMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTYgcC0wXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cmlhbF9kYXlzXCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5UcmlhbERheXMnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRyaWFsX2RheXNcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RyaWFsX2RheXMnXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5NYXhUcmlhbEhpdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuTWF4VHJpYWxIaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwibWF4X2hpdHNfdHJpYWxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4X2hpdHNfdHJpYWxcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ21heF9oaXRzX3RyaWFsJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiIC8+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuVHJpYWxIaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlRyaWFsSGl0cycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cIm1heF9oaXRzXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heF9oaXRzXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydtYXhfaGl0cyddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5EZXNjcmlwdGlvbicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICcyMjBweCcgfVwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Rlc2NyaXB0aW9uJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICA8L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5TaWdudXBJbnN0cnVjdGlvbnMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlNpZ251cEluc3RydWN0aW9ucycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaWdudXBfaW5zdHJ1Y3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnMjIwcHgnIH1cIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbnVwX2luc3RydWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnc2lnbnVwX2luc3RydWN0aW9ucyddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlNpZ251cEluc3RydWN0aW9uRW1wbG95ZWVzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5TaWdudXBJbnN0cnVjdGlvbkVtcGxveWVlcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJzaWdudXBfaW5zdHJ1Y3Rpb25fZW1wbG95ZWVzXCI+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnMjIwcHgnIH1cIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbnVwX2luc3RydWN0aW9uX2VtcGxveWVlc1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXR0ZWQgJiYgZlsnc2lnbnVwX2luc3RydWN0aW9uX2VtcGxveWVlcyddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxuICAgICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlBlcm1pc3Npb25LZXknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuUGVybWlzc2lvbktleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInBlcm1pc3Npb25fa2V5XCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5QZXJtaXNzaW9uS2V5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncGVybWlzc2lvbl9rZXknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGVybWlzc2lvbl9rZXlcIiAvPlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLkZlYXR1cmVLZXknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuRmVhdHVyZUtleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cImZlYXR1cmVfa2V5XCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5GZWF0dXJlS2V5JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2ZlYXR1cmVfa2V5J10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVfa2V5XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuUHJvZHVjdEtleScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbWQtNiBwLTBcIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLlBlcm1pc3Npb25LZXknIHwgdHJhbnNsb2NvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cInByb2R1Y3Rfa2V5XCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5Qcm9kdWN0S2V5JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0X2tleVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncHJvZHVjdF9rZXknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgLz5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTYgcC0wXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5QZXJtaXNzaW9uS2V5JyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJjYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlByb2R1Y3RzLlZhbGlkYXRpb24uQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1iZy10cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjYXRlZ29yeSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuQmlsbGluZ0ZyZXF1ZW5jeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5CaWxsaW5nRnJlcXVlbmN5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1tZC02IHAtMFwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwiYmlsbGluZ19mcmVxdWVuY3lcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tYmctdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJiaWxsaW5nX2ZyZXF1ZW5jeVwiXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydiaWxsaW5nX2ZyZXF1ZW5jeSddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5Qcm9kdWN0UHJpdmFjeVNlcnZpY2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuUHJvZHVjdFByaXZhY3lTZXJ2aWNlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicHJvZHVjdF9wcml2YWN5X3NlcnZpY2VfaWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9wcml2YWN5X3NlcnZpY2VfaWRcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYWxsVG9zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uLmlkXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCJcbiAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLk1hc3RlclByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuTWFzdGVyUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cIm1hc3Rlcl9wcm9kdWN0X2lkXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IGZvcm1Db250cm9sTmFtZT1cIm1hc3Rlcl9wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHByb2R1Y3RzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImluZm8tY2lyY2xlXCI+e3sgJ0FkbWluLlByb2R1Y3RzLkFzc2lnbmVkUm9sZXMnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwdGV4dCBncmFkaWVudC1jdXN0b20tYnJhbmRpbmdcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5Bc3NpZ25lZFJvbGVzJyB8IHRyYW5zbG9jb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiYWxsUm9sZXNcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJvbGVzXCJcbiAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInN1cHBvcnRlZEN1cnJlbmN5JCB8IGFzeW5jIGFzIGN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5DdXJyZW5jeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuQ3VycmVuY3knIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5DdXJyZW5jeScgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydjdXJyZW5jeSddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgY3VycmVuY3lbJ3JlZ2lvbnMnXVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uIH19XG4gICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTRcIlxuICAgICAgICAgICAgICAqbmdJZj1cInN1cHBvcnRlZFJlZ2lvbnMkIHwgYXN5bmMgYXMgcmVnaW9uXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5SZWdpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLlJlZ2lvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJyZWdpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uUHJvZHVjdHMuVmFsaWRhdGlvbi5SZWdpb24nIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInJlZ2lvblwiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3JlZ2lvbiddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgcmVnaW9uWydyZWdpb25zJ11cIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00XCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5HaXRMYWJTZXJ2aWNlRGVza0VtYWlsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5HaXRMYWJTZXJ2aWNlRGVza0VtYWlsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cImdpdGxhYl9zZXJ2aWNlX2Rlc2tfZW1haWxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZ2l0bGFiX3NlcnZpY2VfZGVza19lbWFpbFwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tc3RhcnQgdG9nZ2xlcyAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcm93XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5Jc0FjdGl2ZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLklzQWN0aXZlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydhY3RpdmUnXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5Qcm9kdWN0cy5Ub29sdGlwLk11bHRpcGxlQWxsb3dlZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLk11bHRpcGxlQWxsb3dlZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5vd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtdWx0aXBsZV9hbGxvd2VkXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtdWx0aXBsZV9hbGxvd2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibXVsdGlwbGVfYWxsb3dlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbXVsdGlwbGVfYWxsb3dlZCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlByb2R1Y3RzLlRvb2x0aXAuSXNWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uUHJvZHVjdHMuSXNWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ2aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd2aXNpYmxlJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5NZW1iZXJzVmlzaWJsZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLk1lbWJlcnNWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtZW1iZXJzX3Zpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1lbWJlcnNfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm1lbWJlcnNfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnbWVtYmVyc192aXNpYmxlJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5DaGF0VmlzaWJsZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLlByb2R1Y3RzLkNoYXRWaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJjaGF0X3Zpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoYXRfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNoYXRfdmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnY2hhdF92aXNpYmxlJ10uZXJyb3JzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIlxuICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uUHJvZHVjdHMuVG9vbHRpcC5Jc01hc3RlclByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5Qcm9kdWN0cy5Jc01hc3RlclByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzX21hc3Rlcl9wcm9kdWN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpc19tYXN0ZXJfcHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlzX21hc3Rlcl9wcm9kdWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydpc19tYXN0ZXJfcHJvZHVjdCddLmVycm9yc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGVuZCB0b2dnbGVzIC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1lbmQgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5Qcm9kdWN0LkVkaXQnXCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjb250ZW50XG4gIGxldC1tb2RhbD5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxuICAgIDxoMyBjbGFzcz1cIm1vZGFsLXRpdGxlIG1iLTAgcC0wXCI+e3sgJ1VzZXIuU3Vic2NyaXB0aW9ucy5GdWxsTG9nbycgfCB0cmFuc2xvY28gfX08L2gzPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXG4gICAgICBjbGFzcz1cImJ0bi1jbG9zZSBmbG9hdC1lbmRcIlxuICAgICAgYXJpYS1sYWJlbD1cIkNsb3NlXCJcbiAgICAgIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPHNtYWxsPiB7eyAnVXNlci5Qcm9maWxlLlBpY3R1cmVNZXNzYWdlJyB8IHRyYW5zbG9jbyB9fTwvc21hbGw+XG4gICAgPHB3LWltYWdlLWNyb3BwZXIgI3Byb2ZpbGVcbiAgICAgIChpbWFnZVNlbGVjdGlvbkV2ZW50KT1cIm9uSW1hZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICBhc3BlY3RSYXRpbz1cImZ1bGxMb2dvXCJcbiAgICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2UoKVwiPlxuICAgIDwvcHctaW1hZ2UtY3JvcHBlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNzcXVhcmVkTG9nb0NvbnRlbnRcbiAgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGgzIGNsYXNzPVwibW9kYWwtdGl0bGUgbWItMCBwLTBcIj57eyAnVXNlci5TdWJzY3JpcHRpb25zLlNxdWFyZWRMb2dvJyB8IHRyYW5zbG9jbyB9fTwvaDM+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxuXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxzbWFsbD4ge3sgJ1VzZXIuUHJvZmlsZS5QaWN0dXJlTWVzc2FnZScgfCB0cmFuc2xvY28gfX08L3NtYWxsPlxuICAgIDxwdy1pbWFnZS1jcm9wcGVyICNwcm9maWxlXG4gICAgICAoaW1hZ2VTZWxlY3Rpb25FdmVudCk9XCJ1cGxvYWRTcXVhcmVkTG9nbygkZXZlbnQpXCJcbiAgICAgIGFzcGVjdFJhdGlvPVwiYXV0b1wiXG4gICAgICAoY2xvc2VFdmVudCk9XCJvbkNsb3NlKClcIj5cbiAgICA8L3B3LWltYWdlLWNyb3BwZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|