@posiwise/admin-module 0.0.180 → 0.0.182
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/fesm2022/posiwise-admin-module.mjs +463 -441
- package/fesm2022/posiwise-admin-module.mjs.map +1 -1
- package/lib/components/resources/resources-admin-details/resources-admin-details.component.d.ts +1 -1
- package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +1 -1
- package/package.json +4 -6
- package/esm2022/index.mjs +0 -87
- package/esm2022/lib/admin-guard.service.mjs +0 -44
- package/esm2022/lib/admin-module.routing.mjs +0 -919
- package/esm2022/lib/admin.module.mjs +0 -485
- package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +0 -93
- package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +0 -98
- package/esm2022/lib/components/TOS/terms-of-service-tabs/terms-of-service-tabs.component.mjs +0 -26
- package/esm2022/lib/components/config/global-config-details/global-config-details.component.mjs +0 -75
- package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +0 -92
- package/esm2022/lib/components/config/global-config-tabs/global-config-tabs.component.mjs +0 -24
- package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +0 -101
- package/esm2022/lib/components/contact-us/contact-us-tabs/contact-us-tabs.component.mjs +0 -25
- package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +0 -88
- package/esm2022/lib/components/credentials/credentials-details/credentials-details.component.mjs +0 -79
- package/esm2022/lib/components/credentials/credentials-tab/credentials-tab.component.mjs +0 -31
- package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +0 -92
- package/esm2022/lib/components/credentials/subscription-credentials-details/subscription-credentials-details.component.mjs +0 -102
- package/esm2022/lib/components/domain-config/domain-config-details/base-domain-config.component.mjs +0 -88
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +0 -731
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.mjs +0 -123
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-details.component.mjs +0 -57
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +0 -91
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +0 -144
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +0 -31
- package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +0 -30
- package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +0 -98
- package/esm2022/lib/components/domain-config/domain-config-tabs/domain-config-tabs.component.mjs +0 -25
- package/esm2022/lib/components/faqs/add-faq/add-faq.component.mjs +0 -218
- package/esm2022/lib/components/faqs/edit-faq/edit-faq.component.mjs +0 -204
- package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +0 -277
- package/esm2022/lib/components/faqs/faqs-tabs/faqs-tabs.component.mjs +0 -25
- package/esm2022/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.mjs +0 -84
- package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +0 -98
- package/esm2022/lib/components/generic/generic-insight/generic-insight.component.mjs +0 -12
- package/esm2022/lib/components/generic/generic-misc/generic-misc.component.mjs +0 -127
- package/esm2022/lib/components/generic/generic-tabs/generic-tabs.component.mjs +0 -31
- package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +0 -152
- package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +0 -118
- package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notification-details/login-notification-details.component.mjs +0 -111
- package/esm2022/lib/components/login-notifications/login-notification-tabs/login-notification-tabs.component.mjs +0 -25
- package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +0 -97
- package/esm2022/lib/components/mailer/mailer-details/mailer-details.component.mjs +0 -115
- package/esm2022/lib/components/mailer/mailer-list/mailer-list.component.mjs +0 -113
- package/esm2022/lib/components/mailer/mailer-tabs/mailer-tabs.component.mjs +0 -24
- package/esm2022/lib/components/newsletters/newsletter-details/newsletter-details.component.mjs +0 -87
- package/esm2022/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.mjs +0 -284
- package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +0 -76
- package/esm2022/lib/components/newsletters/newsletters-insight/newsletters-insight.component.mjs +0 -53
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items-view-details/newsletters-items-view-details.component.mjs +0 -59
- package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +0 -179
- package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +0 -103
- package/esm2022/lib/components/newsletters/newsletters-tabs/newsletters-tabs.component.mjs +0 -38
- package/esm2022/lib/components/permissions/permissions-details/permissions-details.component.mjs +0 -109
- package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +0 -87
- package/esm2022/lib/components/permissions/permissions-tabs/permissions-tabs.component.mjs +0 -31
- package/esm2022/lib/components/permissions/role-details/role-details.component.mjs +0 -140
- package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +0 -93
- package/esm2022/lib/components/products/product-details/product-details.component.mjs +0 -370
- package/esm2022/lib/components/products/products-insight/products-insight.component.mjs +0 -52
- package/esm2022/lib/components/products/products-list/products-list.component.mjs +0 -144
- package/esm2022/lib/components/products/products-tabs/products-tabs.component.mjs +0 -28
- package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +0 -55
- package/esm2022/lib/components/resources/resources-admin-details/resources-admin-details.component.mjs +0 -380
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-admin-tabs.component.mjs +0 -33
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-index/resources-index.component.mjs +0 -154
- package/esm2022/lib/components/resources/resources-admin-tabs/resources-insight/resources-insight.component.mjs +0 -54
- package/esm2022/lib/components/resources/resources-lists-insight/resources-lists-insight.component.mjs +0 -61
- package/esm2022/lib/components/subscriptions/subscription-agents/subscription-agents.component.mjs +0 -120
- package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +0 -135
- package/esm2022/lib/components/subscriptions/subscription-details/subscription-details.component.mjs +0 -210
- package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +0 -225
- package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +0 -66
- package/esm2022/lib/components/subscriptions/subscription-users/add-members/add-members.component.mjs +0 -173
- package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +0 -215
- package/esm2022/lib/components/subscriptions/subscriptions-insight/base-subscription-insight.component.mjs +0 -47
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-price/subscription-insight-average-price.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-average-user/subscription-insight-average-user.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-churn/subscription-insight-churn.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +0 -103
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-product-session/subscription-insight-product-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-revenue/subscription-insight-revenue.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-tabs/subscription-insight-tabs.component.mjs +0 -23
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-user-session/subscription-insight-user-session.component.mjs +0 -34
- package/esm2022/lib/components/subscriptions/subscriptions-insight/subscriptions-insight.component.mjs +0 -55
- package/esm2022/lib/components/subscriptions/subscriptions-list/invite-users/invite-users.component.mjs +0 -232
- package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +0 -311
- package/esm2022/lib/components/subscriptions/subscriptions-tabs/subscriptions-tabs.component.mjs +0 -35
- package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-details/tags-details.component.mjs +0 -153
- package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +0 -145
- package/esm2022/lib/components/tags/tags-tabs/tags-tabs.component.mjs +0 -32
- package/esm2022/lib/components/tips/tip-detail/tip-detail.component.mjs +0 -88
- package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +0 -49
- package/esm2022/lib/components/tips/tips-tabs/tips-tabs.component.mjs +0 -25
- package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +0 -216
- package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +0 -200
- package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +0 -198
- package/esm2022/lib/components/tracking/events/events.component.mjs +0 -198
- package/esm2022/lib/components/tracking/tracking-tabs/tracking-tabs.component.mjs +0 -49
- package/esm2022/lib/components/tracking/versions/versions.component.mjs +0 -208
- package/esm2022/lib/components/users/user-details/user-details.component.mjs +0 -167
- package/esm2022/lib/components/users/users-insight/users-insight.component.mjs +0 -53
- package/esm2022/lib/components/users/users-list/users-list.component.mjs +0 -338
- package/esm2022/lib/components/users/users-tabs/users-tabs.component.mjs +0 -32
- package/esm2022/lib/shared/interface/admin-module-shared.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/api-response.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/contact-us.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/credential.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/domain-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/feedback-question.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/global-config.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/login-notification.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/newsletter.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/permission.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/privacy-tos.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tip.interface.mjs +0 -2
- package/esm2022/lib/shared/interface/tracking.interface.mjs +0 -2
- package/esm2022/lib/shared/routers/routers.mjs +0 -40
- package/esm2022/posiwise-admin-module.mjs +0 -5
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { DatePipe } from '@angular/common';
|
|
3
|
-
import { Component, Injector, ViewChild } from '@angular/core';
|
|
4
|
-
import { AdminService, AppAdmin } from '@posiwise/admin-module-utils';
|
|
5
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
6
|
-
import { NgbDateCustomParserFormatter, ProductService } from '@posiwise/common-services';
|
|
7
|
-
import { HelperService } from '@posiwise/helper-service';
|
|
8
|
-
import { ValidateForm } from '@posiwise/utils';
|
|
9
|
-
import groupBy from 'lodash/groupBy';
|
|
10
|
-
import { AutoComplete } from 'primeng/autocomplete';
|
|
11
|
-
import { ROUTERS } from '../../../shared/routers/routers';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@posiwise/admin-module-utils";
|
|
14
|
-
import * as i2 from "@posiwise/common-services";
|
|
15
|
-
import * as i3 from "@angular/common";
|
|
16
|
-
import * as i4 from "primeng/autocomplete";
|
|
17
|
-
import * as i5 from "@angular/forms";
|
|
18
|
-
import * as i6 from "ngx-ui-switch";
|
|
19
|
-
import * as i7 from "primeng/progressspinner";
|
|
20
|
-
import * as i8 from "@posiwise/shared-components";
|
|
21
|
-
import * as i9 from "@posiwise/directives";
|
|
22
|
-
import * as i10 from "@ng-bootstrap/ng-bootstrap";
|
|
23
|
-
import * as i11 from "@jsverse/transloco";
|
|
24
|
-
export class SubscriptionProductDetailsComponent extends AppBaseComponent {
|
|
25
|
-
constructor(injector, adminService, productService, dateFormatService, datePipe) {
|
|
26
|
-
super(injector);
|
|
27
|
-
this.adminService = adminService;
|
|
28
|
-
this.productService = productService;
|
|
29
|
-
this.dateFormatService = dateFormatService;
|
|
30
|
-
this.datePipe = datePipe;
|
|
31
|
-
this.submitted = false;
|
|
32
|
-
this.routers = ROUTERS;
|
|
33
|
-
this.minDate = HelperService.minDateToday();
|
|
34
|
-
this.filteredProducts = [];
|
|
35
|
-
this.productsList = [];
|
|
36
|
-
this.disableExpiresAt = false;
|
|
37
|
-
this.isSuperAdmin = this.permissionService.isSuperAdmin();
|
|
38
|
-
this.form = AppAdmin.subscriptionProductForm();
|
|
39
|
-
}
|
|
40
|
-
ngOnInit() {
|
|
41
|
-
this.addValidation();
|
|
42
|
-
this.subscriptionId = Number(this.route.snapshot.queryParamMap.get('subscription_id'));
|
|
43
|
-
this.productService
|
|
44
|
-
.getProductList({ search: '' }, this.subscriptionId)
|
|
45
|
-
.subscribe(response => {
|
|
46
|
-
this.filteredProducts = this.groupProducts(response.products);
|
|
47
|
-
});
|
|
48
|
-
this.route.params.subscribe(params => {
|
|
49
|
-
this.id = Number(params['id']);
|
|
50
|
-
this.getProductList();
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
get f() {
|
|
54
|
-
return this.form.controls;
|
|
55
|
-
}
|
|
56
|
-
getProductList() {
|
|
57
|
-
this.productService
|
|
58
|
-
.getProductList({}, this.subscriptionId)
|
|
59
|
-
.subscribe(response => {
|
|
60
|
-
this.productsList = this.groupProducts(response.products);
|
|
61
|
-
})
|
|
62
|
-
.add(() => {
|
|
63
|
-
if (this.id) {
|
|
64
|
-
this.subscriptionProductDetails();
|
|
65
|
-
}
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
subscriptionProductDetails() {
|
|
69
|
-
this.adminService
|
|
70
|
-
.getSubscriptionProduct(this.id, this.subscriptionId)
|
|
71
|
-
.subscribe(response => {
|
|
72
|
-
this.data = response;
|
|
73
|
-
this.isPurchasedUnitsDisable =
|
|
74
|
-
this.permissionService.isSuperAdmin() ||
|
|
75
|
-
(this.permissionService.isUserSubscriptionSuperAdmin() &&
|
|
76
|
-
!response.stripe_subscription_id);
|
|
77
|
-
if (this.isPurchasedUnitsDisable) {
|
|
78
|
-
this.form.get('purchased_units').enable();
|
|
79
|
-
this.form.get('new_product_id').enable();
|
|
80
|
-
this.form.get('expires_at').enable();
|
|
81
|
-
this.disableExpiresAt = false;
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
this.form.get('purchased_units').disable();
|
|
85
|
-
this.form.get('new_product_id').disable();
|
|
86
|
-
this.form.get('expires_at').disable();
|
|
87
|
-
this.disableExpiresAt = true;
|
|
88
|
-
}
|
|
89
|
-
const externalPayment = this.permissionService.isSuperAdmin() ?? !response?.stripe_subscription_id;
|
|
90
|
-
if (externalPayment) {
|
|
91
|
-
this.form.get('external_payment').enable();
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
this.form.get('external_payment').disable();
|
|
95
|
-
}
|
|
96
|
-
response.expires_at = this.datePipe.transform(response.expires_at, 'yyyy-MM-dd');
|
|
97
|
-
if (response?.signed_up_at) {
|
|
98
|
-
response.signed_up_at = this.datePipe.transform(response?.signed_up_at, 'yyyy-MM-dd');
|
|
99
|
-
}
|
|
100
|
-
this.form.patchValue(response);
|
|
101
|
-
const expDate = this.dateFormatService.dateFormatForPicker(response?.expires_at);
|
|
102
|
-
let signedUpDate;
|
|
103
|
-
if (response?.signed_up_at) {
|
|
104
|
-
signedUpDate = this.dateFormatService.dateFormatForPicker(response?.signed_up_at);
|
|
105
|
-
this.form.get('signed_up_at').patchValue(signedUpDate);
|
|
106
|
-
}
|
|
107
|
-
this.form.get('expires_at').patchValue(expDate);
|
|
108
|
-
if (response?.product_id) {
|
|
109
|
-
this.form.patchValue({
|
|
110
|
-
new_product_id: this.productsList.find(x => x.id === this.data?.product_id)
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
sortObj(obj) {
|
|
116
|
-
return Object.keys(obj)
|
|
117
|
-
.sort((a, b) => a.localeCompare(b))
|
|
118
|
-
.reduce((result, key) => {
|
|
119
|
-
result[key] = obj[key];
|
|
120
|
-
return result;
|
|
121
|
-
}, {});
|
|
122
|
-
}
|
|
123
|
-
searchProduct(event) {
|
|
124
|
-
this.productService
|
|
125
|
-
.getProductList({ search: event.query }, this.subscriptionId)
|
|
126
|
-
.subscribe(response => {
|
|
127
|
-
this.filteredProducts = this.groupProducts(response.products);
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
groupProducts(products) {
|
|
131
|
-
if (products?.length) {
|
|
132
|
-
products = products.filter(x => x.dependency_products?.length < 1 && x.active);
|
|
133
|
-
products = groupBy(products, 'currency');
|
|
134
|
-
products = this.sortObj(products);
|
|
135
|
-
let groupedArray = [];
|
|
136
|
-
// eslint-disable-next-line no-restricted-syntax
|
|
137
|
-
for (const p in products) {
|
|
138
|
-
const value = products[p].sort((a, b) => Number(b.price_per_unit) - Number(a.price_per_unit));
|
|
139
|
-
groupedArray.push(...value);
|
|
140
|
-
}
|
|
141
|
-
groupedArray = groupedArray.map(x => {
|
|
142
|
-
return {
|
|
143
|
-
id: x.id,
|
|
144
|
-
label: `${x.name} | ${x.region} | ${x.billing_frequency} | ${x.min_units} x ${(x.price_per_unit / 100).toFixed(2)} | ${x.currency}`
|
|
145
|
-
};
|
|
146
|
-
});
|
|
147
|
-
return groupedArray;
|
|
148
|
-
}
|
|
149
|
-
return [];
|
|
150
|
-
}
|
|
151
|
-
onSave() {
|
|
152
|
-
this.submitted = true;
|
|
153
|
-
const expDate = this.form.value.expires_at;
|
|
154
|
-
const signedUpAt = this.form.value.signed_up_at;
|
|
155
|
-
const data = {
|
|
156
|
-
subscription_id: this.subscriptionId,
|
|
157
|
-
product_id: this.data?.product_id,
|
|
158
|
-
expires_at: expDate ? HelperService.dateFormat(expDate) : null,
|
|
159
|
-
signed_up_at: signedUpAt ? HelperService.dateFormat(signedUpAt) : null,
|
|
160
|
-
external_payment: this.form.value.external_payment,
|
|
161
|
-
stripe_subscription_id: this.form.value.stripe_subscription_id,
|
|
162
|
-
min_units: this.form.value.min_units
|
|
163
|
-
};
|
|
164
|
-
if (this.form.value?.new_product_id) {
|
|
165
|
-
data['new_product_id'] = this.form.value?.new_product_id?.id ?? null;
|
|
166
|
-
}
|
|
167
|
-
if (this.form.value.purchased_units) {
|
|
168
|
-
data['purchased_units'] = this.form.value.purchased_units;
|
|
169
|
-
}
|
|
170
|
-
this.adminService
|
|
171
|
-
.updateSubscriptionProduct(data)
|
|
172
|
-
.subscribe({
|
|
173
|
-
next: () => {
|
|
174
|
-
this.toast.success(this.translation.translate('Admin.Subscriptions.UpdatedMessage'));
|
|
175
|
-
this.back();
|
|
176
|
-
}
|
|
177
|
-
})
|
|
178
|
-
.add(() => {
|
|
179
|
-
this.submitted = false;
|
|
180
|
-
});
|
|
181
|
-
}
|
|
182
|
-
addValidation() {
|
|
183
|
-
// stripe subscription should be disable if not superadmin
|
|
184
|
-
if (!this.isSuperAdmin) {
|
|
185
|
-
this.form.get('signed_up_at').disable();
|
|
186
|
-
this.form.get('stripe_subscription_id').disable();
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
this.form.get('signed_up_at').enable();
|
|
190
|
-
this.form.get('stripe_subscription_id').enable();
|
|
191
|
-
}
|
|
192
|
-
// external payment
|
|
193
|
-
// this.form.get('external_payment').valueChanges.subscribe(res => {
|
|
194
|
-
// if (!res) {
|
|
195
|
-
// this.form.controls['signed_up_at'].clearValidators();
|
|
196
|
-
// } else {
|
|
197
|
-
// this.form.controls['signed_up_at'].setValidators([Validators.required]);
|
|
198
|
-
// }
|
|
199
|
-
// this.form.controls['signed_up_at'].updateValueAndValidity();
|
|
200
|
-
// });
|
|
201
|
-
}
|
|
202
|
-
onProductChange(event) {
|
|
203
|
-
const productId = Number(event?.value.id);
|
|
204
|
-
const productObj = this.productsList.find(x => x.id === productId);
|
|
205
|
-
this.form.patchValue({
|
|
206
|
-
new_product_id: productObj
|
|
207
|
-
});
|
|
208
|
-
}
|
|
209
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionProductDetailsComponent, deps: [{ token: i0.Injector }, { token: i1.AdminService }, { token: i2.ProductService }, { token: i2.NgbDateCustomParserFormatter }, { token: i3.DatePipe }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
210
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionProductDetailsComponent, selector: "pw-subscription-product-details", viewQueries: [{ propertyName: "refProduct", first: true, predicate: ["refProduct"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signed up at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete #refProduct\n [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"id\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n (onSelect)=\"onProductChange($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\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 [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i4.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i5.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: i5.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i5.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "component", type: i6.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: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i8.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i9.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i10.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "contentTemplate", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "pipe", type: i11.TranslocoPipe, name: "transloco" }] }); }
|
|
211
|
-
}
|
|
212
|
-
__decorate([
|
|
213
|
-
ValidateForm('form'),
|
|
214
|
-
__metadata("design:type", Function),
|
|
215
|
-
__metadata("design:paramtypes", []),
|
|
216
|
-
__metadata("design:returntype", void 0)
|
|
217
|
-
], SubscriptionProductDetailsComponent.prototype, "onSave", null);
|
|
218
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionProductDetailsComponent, decorators: [{
|
|
219
|
-
type: Component,
|
|
220
|
-
args: [{ selector: 'pw-subscription-product-details', template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"back()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i>\n </a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n <span>Subscription Product</span>\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <div class=\"p-2 mt-3\">\n <p>\n You can update the Purchased Seats, Product, and Product Expiry date as long as the user hasn't subscribed using stripe.\n </p>\n <p class=\"mb-5\">\n If you set the subscription as External Payment you'll have to manually manage the Product Expiry Date.\n </p>\n <form [formGroup]=\"form\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.PurchasedSeats' | transloco\"\n [showTooltip]=\"true\"\n name=\"purchased_units\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.PurchasedSeats' | transloco\">\n <input type=\"number\"\n min=\"0\"\n class=\"form-control\"\n formControlName=\"purchased_units\" />\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.MinUnits' | transloco\"\n [showTooltip]=\"true\"\n name=\"min_units\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.MinUnits' | transloco\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.MinUnits' | transloco\">\n <input type=\"number\"\n min=\"0\"\n [max]=\"form.get('purchased_units').value\"\n class=\"form-control\"\n formControlName=\"min_units\" />\n </pw-input-container>\n </div>\n <!-- product expiry date -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ProductExpiryDate' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ProductExpiryDate' | transloco\"\n name=\"expires_at\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Expiry Date\"\n formControlName=\"expires_at\"\n [outsideDays]=\"'hidden'\"\n ngbDatepicker\n #c=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"disableExpiresAt\"\n (click)=\"c.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n\n <!-- signed up at-->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3 col-lg-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.SignedUpAt' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.SignedUpAt' | transloco\"\n name=\"signed_up_at\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.SignedUpAt' | transloco\">\n <div class=\"input-group\">\n <input class=\"form-control\"\n container=\"body\"\n placeholder=\"Signed Up At\"\n formControlName=\"signed_up_at\"\n ngbDatepicker\n #d=\"ngbDatepicker\" />\n <div class=\"input-group-append\">\n <button class=\"btn btn-primary\"\n [disabled]=\"!isSuperAdmin\"\n (click)=\"d.toggle()\"\n type=\"button\">\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\n </button>\n </div>\n </div>\n </pw-input-container>\n </div>\n <!-- stripe subscription id -->\n <div class=\"mb-3 col-xs-12 col-sm-6 col-md-3\">\n <pw-input-container [label]=\"'Admin.Subscriptions.StripeSubscriptionId' | transloco\"\n name=\"stripe_subscription_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.StripeSubscriptionId' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"stripe_subscription_id\" />\n </pw-input-container>\n </div>\n <!-- external payment toggle -->\n <div class=\"col-12 col-sm-2\">\n <pw-input-container [label]=\"'Admin.Subscriptions.ExternalPayment' | transloco\"\n name=\"external_payment\"\n [showTooltip]=\"true\"\n [tooltipPosition]=\"'left'\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.ExternalPayment' | transloco\">\n <ui-switch formControlName=\"external_payment\"\n name=\"external_payment\">\n </ui-switch>\n </pw-input-container>\n </div>\n <div class=\"mb-3 col-sm-4\">\n <pw-input-container [label]=\"'Label.Product' | transloco\"\n name=\"new_product_id\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Subscriptions.Tooltip.Product' | transloco\"\n [errorMsg]=\"'Admin.Subscriptions.Validation.Product' | transloco\">\n <p-autoComplete #refProduct\n [suggestions]=\"filteredProducts\"\n formControlName=\"new_product_id\"\n dataKey=\"id\"\n field=\"label\"\n [dropdown]=\"true\"\n [delay]=\"1000\"\n (completeMethod)=\"searchProduct($event)\"\n (onSelect)=\"onProductChange($event)\"\n styleClass=\"w-100\"\n placeholder=\"Search Product\"\n [inputStyle]=\"\n form.get('new_product_id').touched && form.get('new_product_id').invalid\n ? { border: '1px solid #ff586b' }\n : { border: '1px solid gray' }\n \"\n [multiple]=\"false\">\n </p-autoComplete>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-12 text-end mt-3\">\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 [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
221
|
-
}], ctorParameters: () => [{ type: i0.Injector }, { type: i1.AdminService }, { type: i2.ProductService }, { type: i2.NgbDateCustomParserFormatter }, { type: i3.DatePipe }], propDecorators: { refProduct: [{
|
|
222
|
-
type: ViewChild,
|
|
223
|
-
args: ['refProduct']
|
|
224
|
-
}], onSave: [] } });
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvc3Vic2NyaXB0aW9ucy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscy9zdWJzY3JpcHRpb24tcHJvZHVjdC1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFL0MsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBR3BELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7OztBQU0xRCxNQUFNLE9B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ZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBBZG1pblNlcnZpY2UsIEFwcEFkbWluIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHBvc2l3aXNlL2FwcC1iYXNlLWNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ2JEYXRlQ3VzdG9tUGFyc2VyRm9ybWF0dGVyLCBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0ZUZvcm0gfSBmcm9tICdAcG9zaXdpc2UvdXRpbHMnO1xuXG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdsb2Rhc2gvZ3JvdXBCeSc7XG5pbXBvcnQgeyBBdXRvQ29tcGxldGUgfSBmcm9tICdwcmltZW5nL2F1dG9jb21wbGV0ZSc7XG5cbmltcG9ydCB7IFN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL2ludGVyZmFjZS9hZG1pbi1tb2R1bGUtc2hhcmVkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBST1VURVJTIH0gZnJvbSAnLi4vLi4vLi4vc2hhcmVkL3JvdXRlcnMvcm91dGVycyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctc3Vic2NyaXB0aW9uLXByb2R1Y3QtZGV0YWlscycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3N1YnNjcmlwdGlvbi1wcm9kdWN0LWRldGFpbHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBpc1B1cmNoYXNlZFVuaXRzRGlzYWJsZTogYm9vbGVhbjtcblxuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgIGRhdGE6IFN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzO1xuXG4gICAgcm91dGVycyA9IFJPVVRFUlM7XG5cbiAgICBpc0xvYWRpbmc6IGJvb2xlYW47XG5cbiAgICBpZDogbnVtYmVyO1xuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBtaW5EYXRlID0gSGVscGVyU2VydmljZS5taW5EYXRlVG9kYXkoKTtcblxuICAgIGZpbHRlcmVkUHJvZHVjdHMgPSBbXTtcbiAgICBwcm9kdWN0c0xpc3QgPSBbXTtcblxuICAgIGRpc2FibGVFeHBpcmVzQXQgPSBmYWxzZTtcblxuICAgIGlzU3VwZXJBZG1pbiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCk7XG5cbiAgICBAVmlld0NoaWxkKCdyZWZQcm9kdWN0JykgcmVmUHJvZHVjdDogQXV0b0NvbXBsZXRlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZUZvcm1hdFNlcnZpY2U6IE5nYkRhdGVDdXN0b21QYXJzZXJGb3JtYXR0ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uc3Vic2NyaXB0aW9uUHJvZHVjdEZvcm0oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5hZGRWYWxpZGF0aW9uKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBOdW1iZXIodGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtTWFwLmdldCgnc3Vic2NyaXB0aW9uX2lkJykpO1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdExpc3QoeyBzZWFyY2g6ICcnIH0sIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkUHJvZHVjdHMgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzcG9uc2UucHJvZHVjdHMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5pZCA9IE51bWJlcihwYXJhbXNbJ2lkJ10pO1xuICAgICAgICAgICAgdGhpcy5nZXRQcm9kdWN0TGlzdCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXQgZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICBnZXRQcm9kdWN0TGlzdCgpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RMaXN0KHt9LCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0c0xpc3QgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzcG9uc2UucHJvZHVjdHMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uUHJvZHVjdERldGFpbHMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvblByb2R1Y3REZXRhaWxzKCkge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLmdldFN1YnNjcmlwdGlvblByb2R1Y3QodGhpcy5pZCwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQdXJjaGFzZWRVbml0c0Rpc2FibGUgPVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzU3VwZXJBZG1pbigpIHx8XG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLmlzVXNlclN1YnNjcmlwdGlvblN1cGVyQWRtaW4oKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXJlc3BvbnNlLnN0cmlwZV9zdWJzY3JpcHRpb25faWQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzUHVyY2hhc2VkVW5pdHNEaXNhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3B1cmNoYXNlZF91bml0cycpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCduZXdfcHJvZHVjdF9pZCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdleHBpcmVzX2F0JykuZW5hYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUV4cGlyZXNBdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3B1cmNoYXNlZF91bml0cycpLmRpc2FibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnbmV3X3Byb2R1Y3RfaWQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4cGlyZXNfYXQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZUV4cGlyZXNBdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybmFsUGF5bWVudCA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNTdXBlckFkbWluKCkgPz8gIXJlc3BvbnNlPy5zdHJpcGVfc3Vic2NyaXB0aW9uX2lkO1xuICAgICAgICAgICAgICAgIGlmIChleHRlcm5hbFBheW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXh0ZXJuYWxfcGF5bWVudCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2V4dGVybmFsX3BheW1lbnQnKS5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLmV4cGlyZXNfYXQgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShyZXNwb25zZS5leHBpcmVzX2F0LCAneXl5eS1NTS1kZCcpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8uc2lnbmVkX3VwX2F0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNpZ25lZF91cF9hdCA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2U/LnNpZ25lZF91cF9hdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICd5eXl5LU1NLWRkJ1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwRGF0ZSA9IHRoaXMuZGF0ZUZvcm1hdFNlcnZpY2UuZGF0ZUZvcm1hdEZvclBpY2tlcihyZXNwb25zZT8uZXhwaXJlc19hdCk7XG4gICAgICAgICAgICAgICAgbGV0IHNpZ25lZFVwRGF0ZTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2U/LnNpZ25lZF91cF9hdCkge1xuICAgICAgICAgICAgICAgICAgICBzaWduZWRVcERhdGUgPSB0aGlzLmRhdGVGb3JtYXRTZXJ2aWNlLmRhdGVGb3JtYXRGb3JQaWNrZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZT8uc2lnbmVkX3VwX2F0XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLnBhdGNoVmFsdWUoc2lnbmVkVXBEYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnZXhwaXJlc19hdCcpLnBhdGNoVmFsdWUoZXhwRGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5wcm9kdWN0X2lkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld19wcm9kdWN0X2lkOiB0aGlzLnByb2R1Y3RzTGlzdC5maW5kKHggPT4geC5pZCA9PT0gdGhpcy5kYXRhPy5wcm9kdWN0X2lkKVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzb3J0T2JqKG9iaikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHNlYXJjaFByb2R1Y3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RMaXN0KHsgc2VhcmNoOiBldmVudC5xdWVyeSB9LCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFByb2R1Y3RzID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3BvbnNlLnByb2R1Y3RzKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBQcm9kdWN0cyhwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBwcm9kdWN0cy5maWx0ZXIoeCA9PiB4LmRlcGVuZGVuY3lfcHJvZHVjdHM/Lmxlbmd0aCA8IDEgJiYgeC5hY3RpdmUpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBncm91cEJ5KHByb2R1Y3RzLCAnY3VycmVuY3knKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gdGhpcy5zb3J0T2JqKHByb2R1Y3RzKTtcbiAgICAgICAgICAgIGxldCBncm91cGVkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0c1twXS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGIucHJpY2VfcGVyX3VuaXQpIC0gTnVtYmVyKGEucHJpY2VfcGVyX3VuaXQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBncm91cGVkQXJyYXkucHVzaCguLi52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cGVkQXJyYXkgPSBncm91cGVkQXJyYXkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7eC5uYW1lfSB8ICR7eC5yZWdpb259IHwgJHt4LmJpbGxpbmdfZnJlcXVlbmN5fSB8ICR7eC5taW5fdW5pdHN9IHggJHsoXG4gICAgICAgICAgICAgICAgICAgICAgICB4LnByaWNlX3Blcl91bml0IC8gMTAwXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKX0gfCAke3guY3VycmVuY3l9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBAVmFsaWRhdGVGb3JtKCdmb3JtJylcbiAgICBvblNhdmUoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZXhwRGF0ZSA9IHRoaXMuZm9ybS52YWx1ZS5leHBpcmVzX2F0O1xuICAgICAgICBjb25zdCBzaWduZWRVcEF0ID0gdGhpcy5mb3JtLnZhbHVlLnNpZ25lZF91cF9hdDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIHByb2R1Y3RfaWQ6IHRoaXMuZGF0YT8ucHJvZHVjdF9pZCxcbiAgICAgICAgICAgIGV4cGlyZXNfYXQ6IGV4cERhdGUgPyBIZWxwZXJTZXJ2aWNlLmRhdGVGb3JtYXQoZXhwRGF0ZSkgOiBudWxsLFxuICAgICAgICAgICAgc2lnbmVkX3VwX2F0OiBzaWduZWRVcEF0ID8gSGVscGVyU2VydmljZS5kYXRlRm9ybWF0KHNpZ25lZFVwQXQpIDogbnVsbCxcbiAgICAgICAgICAgIGV4dGVybmFsX3BheW1lbnQ6IHRoaXMuZm9ybS52YWx1ZS5leHRlcm5hbF9wYXltZW50LFxuICAgICAgICAgICAgc3RyaXBlX3N1YnNjcmlwdGlvbl9pZDogdGhpcy5mb3JtLnZhbHVlLnN0cmlwZV9zdWJzY3JpcHRpb25faWQsXG4gICAgICAgICAgICBtaW5fdW5pdHM6IHRoaXMuZm9ybS52YWx1ZS5taW5fdW5pdHNcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWx1ZT8ubmV3X3Byb2R1Y3RfaWQpIHtcbiAgICAgICAgICAgIGRhdGFbJ25ld19wcm9kdWN0X2lkJ10gPSB0aGlzLmZvcm0udmFsdWU/Lm5ld19wcm9kdWN0X2lkPy5pZCA/PyBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsdWUucHVyY2hhc2VkX3VuaXRzKSB7XG4gICAgICAgICAgICBkYXRhWydwdXJjaGFzZWRfdW5pdHMnXSA9IHRoaXMuZm9ybS52YWx1ZS5wdXJjaGFzZWRfdW5pdHM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVTdWJzY3JpcHRpb25Qcm9kdWN0KGRhdGEpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5TdWJzY3JpcHRpb25zLlVwZGF0ZWRNZXNzYWdlJylcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZFZhbGlkYXRpb24oKSB7XG4gICAgICAgIC8vIHN0cmlwZSBzdWJzY3JpcHRpb24gc2hvdWxkIGJlIGRpc2FibGUgaWYgbm90IHN1cGVyYWRtaW5cbiAgICAgICAgaWYgKCF0aGlzLmlzU3VwZXJBZG1pbikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc2lnbmVkX3VwX2F0JykuZGlzYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc3RyaXBlX3N1YnNjcmlwdGlvbl9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3NpZ25lZF91cF9hdCcpLmVuYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnc3RyaXBlX3N1YnNjcmlwdGlvbl9pZCcpLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGV4dGVybmFsIHBheW1lbnRcbiAgICAgICAgLy8gdGhpcy5mb3JtLmdldCgnZXh0ZXJuYWxfcGF5bWVudCcpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgLy8gICAgIGlmICghcmVzKSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzaWduZWRfdXBfYXQnXS5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydzaWduZWRfdXBfYXQnXS5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ3NpZ25lZF91cF9hdCddLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgb25Qcm9kdWN0Q2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RJZCA9IE51bWJlcihldmVudD8udmFsdWUuaWQpO1xuICAgICAgICBjb25zdCBwcm9kdWN0T2JqID0gdGhpcy5wcm9kdWN0c0xpc3QuZmluZCh4ID0+IHguaWQgPT09IHByb2R1Y3RJZCk7XG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgICAgICAgIG5ld19wcm9kdWN0X2lkOiBwcm9kdWN0T2JqXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWQgcHctdGFiIG92ZXJmbG93LWhpZGRlblwiPlxuICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkXCI+XG4gICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC1ib2R5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibWUtYXV0byBjb2wteHMtNiBtdC00XCI+XG4gICAgICAgIDxhIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byBUYXJnZXRcIlxuICAgICAgICAgIChjbGljayk9XCJiYWNrKClcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgPC9hPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICAgICAgICA8c3Bhbj5TdWJzY3JpcHRpb24gUHJvZHVjdDwvc3Bhbj5cbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgICAqbmdJZj1cImlzTG9hZGluZ1wiPlxuICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIgbXQtM1wiPlxuICAgICAgICA8cD5cbiAgICAgICAgICBZb3UgY2FuIHVwZGF0ZSB0aGUgUHVyY2hhc2VkIFNlYXRzLCBQcm9kdWN0LCBhbmQgUHJvZHVjdCBFeHBpcnkgZGF0ZSBhcyBsb25nIGFzIHRoZSB1c2VyIGhhc24ndCBzdWJzY3JpYmVkIHVzaW5nIHN0cmlwZS5cbiAgICAgICAgPC9wPlxuICAgICAgICA8cCBjbGFzcz1cIm1iLTVcIj5cbiAgICAgICAgICBJZiB5b3Ugc2V0IHRoZSBzdWJzY3JpcHRpb24gYXMgRXh0ZXJuYWwgUGF5bWVudCB5b3UnbGwgaGF2ZSB0byBtYW51YWxseSBtYW5hZ2UgdGhlIFByb2R1Y3QgRXhwaXJ5IERhdGUuXG4gICAgICAgIDwvcD5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wteHMtMTIgY29sLXNtLTYgY29sLW1kLTMgY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHVyY2hhc2VkU2VhdHMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInB1cmNoYXNlZF91bml0c1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuUHVyY2hhc2VkU2VhdHMnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdXJjaGFzZWRfdW5pdHNcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zIGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLk1pblVuaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJtaW5fdW5pdHNcIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5WYWxpZGF0aW9uLk1pblVuaXRzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlRvb2x0aXAuTWluVW5pdHMnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICBbbWF4XT1cImZvcm0uZ2V0KCdwdXJjaGFzZWRfdW5pdHMnKS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5fdW5pdHNcIiAvPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBwcm9kdWN0IGV4cGlyeSBkYXRlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlByb2R1Y3RFeHBpcnlEYXRlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlByb2R1Y3RFeHBpcnlEYXRlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cImV4cGlyZXNfYXRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkV4cGlyeSBEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZXhwaXJlc19hdFwiXG4gICAgICAgICAgICAgICAgICAgIFtvdXRzaWRlRGF5c109XCInaGlkZGVuJ1wiXG4gICAgICAgICAgICAgICAgICAgIG5nYkRhdGVwaWNrZXJcbiAgICAgICAgICAgICAgICAgICAgI2M9XCJuZ2JEYXRlcGlja2VyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1hcHBlbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFeHBpcmVzQXRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjLnRvZ2dsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBzaWduZWQgdXAgYXQtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIGNvbC14cy0xMiBjb2wtc20tNiBjb2wtbWQtMyBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5TaWduZWRVcEF0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlNpZ25lZFVwQXQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwic2lnbmVkX3VwX2F0XCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5TaWduZWRVcEF0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2lnbmVkIFVwIEF0XCJcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2lnbmVkX3VwX2F0XCJcbiAgICAgICAgICAgICAgICAgICAgbmdiRGF0ZXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAjZD1cIm5nYkRhdGVwaWNrZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzU3VwZXJBZG1pblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImQudG9nZ2xlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPCEtLSBzdHJpcGUgc3Vic2NyaXB0aW9uIGlkIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgY29sLXhzLTEyIGNvbC1zbS02IGNvbC1tZC0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLlN0cmlwZVN1YnNjcmlwdGlvbklkJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgbmFtZT1cInN0cmlwZV9zdWJzY3JpcHRpb25faWRcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5TdHJpcGVTdWJzY3JpcHRpb25JZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RyaXBlX3N1YnNjcmlwdGlvbl9pZFwiIC8+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8IS0tIGV4dGVybmFsIHBheW1lbnQgdG9nZ2xlIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtc20tMlwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5FeHRlcm5hbFBheW1lbnQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZXh0ZXJuYWxfcGF5bWVudFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwiJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVG9vbHRpcC5FeHRlcm5hbFBheW1lbnQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJleHRlcm5hbF9wYXltZW50XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJleHRlcm5hbF9wYXltZW50XCI+XG4gICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyBjb2wtc20tNFwiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInTGFiZWwuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJuZXdfcHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uU3Vic2NyaXB0aW9ucy5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLlN1YnNjcmlwdGlvbnMuVmFsaWRhdGlvbi5Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSAjcmVmUHJvZHVjdFxuICAgICAgICAgICAgICAgICAgW3N1Z2dlc3Rpb25zXT1cImZpbHRlcmVkUHJvZHVjdHNcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmV3X3Byb2R1Y3RfaWRcIlxuICAgICAgICAgICAgICAgICAgZGF0YUtleT1cImlkXCJcbiAgICAgICAgICAgICAgICAgIGZpZWxkPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2RlbGF5XT1cIjEwMDBcIlxuICAgICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaFByb2R1Y3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAob25TZWxlY3QpPVwib25Qcm9kdWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIFByb2R1Y3RcIlxuICAgICAgICAgICAgICAgICAgW2lucHV0U3R5bGVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5nZXQoJ25ld19wcm9kdWN0X2lkJykudG91Y2hlZCAmJiBmb3JtLmdldCgnbmV3X3Byb2R1Y3RfaWQnKS5pbnZhbGlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geyBib3JkZXI6ICcxcHggc29saWQgI2ZmNTg2YicgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgYm9yZGVyOiAnMXB4IHNvbGlkIGdyYXknIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgdGV4dC1lbmQgbXQtM1wiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwic3VibWl0dGVkXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Component, Injector } from '@angular/core';
|
|
2
|
-
import { AppBaseComponent } from '@posiwise/app-base-component';
|
|
3
|
-
import { ProductService, SubscriptionService } from '@posiwise/common-services';
|
|
4
|
-
import { ROUTERS } from '../../../shared/routers/routers';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@posiwise/common-services";
|
|
7
|
-
import * as i2 from "primeng/table";
|
|
8
|
-
import * as i3 from "primeng/api";
|
|
9
|
-
import * as i4 from "primeng/tooltip";
|
|
10
|
-
import * as i5 from "primeng/inputtext";
|
|
11
|
-
import * as i6 from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
-
import * as i7 from "@angular/common";
|
|
13
|
-
import * as i8 from "@angular/forms";
|
|
14
|
-
import * as i9 from "@angular/router";
|
|
15
|
-
import * as i10 from "primeng/progressspinner";
|
|
16
|
-
import * as i11 from "@posiwise/shared-components";
|
|
17
|
-
import * as i12 from "@posiwise/directives";
|
|
18
|
-
import * as i13 from "@jsverse/transloco";
|
|
19
|
-
export class SubscriptionProductsComponent extends AppBaseComponent {
|
|
20
|
-
constructor(subscriptionService, injector, productService) {
|
|
21
|
-
super(injector);
|
|
22
|
-
this.subscriptionService = subscriptionService;
|
|
23
|
-
this.productService = productService;
|
|
24
|
-
this.objectKeys = Object.keys;
|
|
25
|
-
this.isLoaded = false;
|
|
26
|
-
this.loading = true;
|
|
27
|
-
this.searchText = '';
|
|
28
|
-
this.routers = ROUTERS;
|
|
29
|
-
this.subscriptionProducts = [];
|
|
30
|
-
this.currency = [];
|
|
31
|
-
this.totalRecordsUnFiltered = 0;
|
|
32
|
-
}
|
|
33
|
-
ngOnInit() {
|
|
34
|
-
this.getSupportedCurrency();
|
|
35
|
-
this.route.params.subscribe(data => {
|
|
36
|
-
this.id = Number(data['id']);
|
|
37
|
-
this.getSubscriptionDetails();
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
getSupportedCurrency() {
|
|
41
|
-
this.productService.getSupportedCurrency().subscribe(res => {
|
|
42
|
-
this.currency = res?.regions;
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
getSubscriptionDetails() {
|
|
46
|
-
this.isLoaded = false;
|
|
47
|
-
this.subscriptionService
|
|
48
|
-
.getById(this.id)
|
|
49
|
-
.subscribe(response => {
|
|
50
|
-
this.subscriptionProducts = response?.products ?? [];
|
|
51
|
-
this.totalRecords = response?.products?.length;
|
|
52
|
-
this.totalRecordsUnFiltered = response.unfiltered_count;
|
|
53
|
-
})
|
|
54
|
-
.add(() => {
|
|
55
|
-
this.isLoaded = true;
|
|
56
|
-
this.loading = false;
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionProductsComponent, deps: [{ token: i1.SubscriptionService }, { token: i0.Injector }, { token: i1.ProductService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: SubscriptionProductsComponent, selector: "pw-subscription-products", usesInheritance: true, ngImport: i0, template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100) | number:'1.2-2' }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100) | number:'1.2-2' }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n", dependencies: [{ kind: "component", type: i2.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { 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: "directive", type: i5.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i6.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i9.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i10.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i11.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i12.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i12.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "pipe", type: i7.JsonPipe, name: "json" }, { kind: "pipe", type: i7.DecimalPipe, name: "number" }, { kind: "pipe", type: i13.TranslocoPipe, name: "transloco" }] }); }
|
|
61
|
-
}
|
|
62
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SubscriptionProductsComponent, decorators: [{
|
|
63
|
-
type: Component,
|
|
64
|
-
args: [{ selector: 'pw-subscription-products', template: "<div class=\"w-100 text-center mt-3\">\n <ng-template [ngIf]=\"!isLoaded\">\n <p-progressSpinner> </p-progressSpinner>\n </ng-template>\n</div>\n<div class=\"primeng-datatable-container table-responsive mt-0\"\n [class.hideTable]=\"totalRecordsUnFiltered === 0\">\n <p-table #dt\n [value]=\"subscriptionProducts\"\n [paginator]=\"totalRecords !== 0\"\n [rows]=\"PAGE_SIZE\"\n [lazy]=\"true\"\n [totalRecords]=\"totalRecords\"\n [loading]=\"loading\"\n [filterDelay]=\"1000\"\n [customSort]=\"true\">\n <ng-template pTemplate=\"caption\">\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search subscription products...\"\n (input)=\"dt.filterGlobal($event.target.value, 'contains')\"\n class=\"mw-90\" />\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Label.Name' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PricePerUnit' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.Currency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.BillingFrequency' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MinUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.MaxUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.PurchasedUnits' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.CalculatedPrice' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Subscriptions.IsDeleted' | transloco }}</th>\n <th class=\"actions-list-two\"\n scope=\"true\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-item>\n <tr>\n <td data-head=\"Name\">{{ item.name }}</td>\n <td data-head=\"Price Per Unit\">\n <span>{{ (item.price_per_unit / 100) | number:'1.2-2' }}\n <i\n class=\"fa fa-info-circle\"\n *ngIf=\"item?.discount && objectKeys(item?.discount)?.length\"\n aria-hidden=\"true\"\n tooltipPosition=\"top\"\n [pTooltip]=\"item?.discount | json\"\n ></i>\n </span>\n </td>\n <td data-head=\"Currency\">\n <span [appDynamicBadge]=\"{ itemsArray: currency, item: item.currency }\"\n color=\"blue-grey\"\n class=\"badge\">{{ item.currency }}</span>\n </td>\n <td data-head=\"Billing Frequency\">\n {{ item.billing_frequency }}\n <span *ngIf=\"item?.pause_collection && objectKeys(item?.pause_collection)?.length\"\n class=\"ms-2\"\n [pTooltip]=\"item?.pause_collection | json\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-exclamation-triangle text-warning\"></i>\n </span>\n </td>\n <td data-head=\"Min Units\">{{ item.min_units }}</td>\n <td data-head=\"Max Units\">{{ item.max_units }}</td>\n <td data-head=\"Purchased Units\">{{ item.purchased_units }}</td>\n <td data-head=\"Calculated Price\">{{ (item.calculated_price / 100) | number:'1.2-2' }}</td>\n <td data-head=\"Deleted\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: item?.is_deleted }\"\n color=\"success-danger\"\n class=\"badge\">{{ item?.is_deleted ? 'Yes' : 'No' }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline list-action\">\n <li ngbTooltip=\"Edit\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\"\n [routerLink]=\"[\n routers.subscriptionProductDetails + item.subscription_product_id\n ]\"\n [queryParams]=\"{ subscription_id: id }\">\n <i class=\"fa fa-edit edit-icon\" aria-hidden=\"true\"></i>\n </li>\n </ul>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <span class=\"total-records-count\" *ngIf=\"totalRecords !== 0\">{{ 'Label.Total' | transloco }}: {{ totalRecords }}</span>\n</div>\n<div *ngIf=\"totalRecordsUnFiltered === 0 && isLoaded\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Subscriptions.NoSubscriptionProductsMessage' | transloco\">\n </pw-no-data>\n</div>\n" }]
|
|
65
|
-
}], ctorParameters: () => [{ type: i1.SubscriptionService }, { type: i0.Injector }, { type: i1.ProductService }] });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Vic2NyaXB0aW9uLXByb2R1Y3RzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9zdWJzY3JpcHRpb25zL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3N1YnNjcmlwdGlvbnMvc3Vic2NyaXB0aW9uLXByb2R1Y3RzL3N1YnNjcmlwdGlvbi1wcm9kdWN0cy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUFNMUQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLGdCQUFnQjtJQW1CL0QsWUFDcUIsbUJBQXdDLEVBQ3pELFFBQWtCLEVBQ0QsY0FBOEI7UUFFL0MsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBSkMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUV4QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFyQm5ELGVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBS3pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFakIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUVmLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsWUFBTyxHQUFHLE9BQU8sQ0FBQztRQUVsQix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFDMUIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVkLDJCQUFzQixHQUFHLENBQUMsQ0FBQztJQVEzQixDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQixJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsRUFBRSxPQUFPLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sc0JBQXNCO1FBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUI7YUFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDaEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxRQUFRLEVBQUUsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDO1lBQy9DLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7UUFDNUQsQ0FBQyxDQUFDO2FBQ0QsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzsrR0F0RFEsNkJBQTZCO21HQUE3Qiw2QkFBNkIsdUZDWDFDLDJqSkFzR0E7OzRGRDNGYSw2QkFBNkI7a0JBSnpDLFNBQVM7K0JBQ0ksMEJBQTBCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3RvciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3RTZXJ2aWNlLCBTdWJzY3JpcHRpb25TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5cbmltcG9ydCB7IFJPVVRFUlMgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvcm91dGVycy9yb3V0ZXJzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1zdWJzY3JpcHRpb24tcHJvZHVjdHMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zdWJzY3JpcHRpb24tcHJvZHVjdHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFN1YnNjcmlwdGlvblByb2R1Y3RzQ29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgb2JqZWN0S2V5cyA9IE9iamVjdC5rZXlzO1xuXG4gICAgaWQ6IG51bWJlcjtcbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcblxuICAgIHNlYXJjaFRleHQgPSAnJztcblxuICAgIHJvdXRlcnMgPSBST1VURVJTO1xuXG4gICAgc3Vic2NyaXB0aW9uUHJvZHVjdHMgPSBbXTtcbiAgICBjdXJyZW5jeSA9IFtdO1xuXG4gICAgdG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9IDA7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBzdWJzY3JpcHRpb25TZXJ2aWNlOiBTdWJzY3JpcHRpb25TZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5nZXRTdXBwb3J0ZWRDdXJyZW5jeSgpO1xuICAgICAgICB0aGlzLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlkID0gTnVtYmVyKGRhdGFbJ2lkJ10pO1xuICAgICAgICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb25EZXRhaWxzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3VwcG9ydGVkQ3VycmVuY3koKSB7XG4gICAgICAgIHRoaXMucHJvZHVjdFNlcnZpY2UuZ2V0U3VwcG9ydGVkQ3VycmVuY3koKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVuY3kgPSByZXM/LnJlZ2lvbnM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uRGV0YWlscygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRCeUlkKHRoaXMuaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblByb2R1Y3RzID0gcmVzcG9uc2U/LnByb2R1Y3RzID8/IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2U/LnByb2R1Y3RzPy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNVbkZpbHRlcmVkID0gcmVzcG9uc2UudW5maWx0ZXJlZF9jb3VudDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhaXNMb2FkZWRcIj5cbiAgICA8cC1wcm9ncmVzc1NwaW5uZXI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgdGFibGUtcmVzcG9uc2l2ZSBtdC0wXCJcbiAgW2NsYXNzLmhpZGVUYWJsZV09XCJ0b3RhbFJlY29yZHNVbkZpbHRlcmVkID09PSAwXCI+XG4gIDxwLXRhYmxlICNkdFxuICAgIFt2YWx1ZV09XCJzdWJzY3JpcHRpb25Qcm9kdWN0c1wiXG4gICAgW3BhZ2luYXRvcl09XCJ0b3RhbFJlY29yZHMgIT09IDBcIlxuICAgIFtyb3dzXT1cIlBBR0VfU0laRVwiXG4gICAgW2xhenldPVwidHJ1ZVwiXG4gICAgW3RvdGFsUmVjb3Jkc109XCJ0b3RhbFJlY29yZHNcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIFtmaWx0ZXJEZWxheV09XCIxMDAwXCJcbiAgICBbY3VzdG9tU29ydF09XCJ0cnVlXCI+XG4gICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgc2l6ZT1cIjUwXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBzdWJzY3JpcHRpb24gcHJvZHVjdHMuLi5cIlxuICAgICAgICAgIChpbnB1dCk9XCJkdC5maWx0ZXJHbG9iYWwoJGV2ZW50LnRhcmdldC52YWx1ZSwgJ2NvbnRhaW5zJylcIlxuICAgICAgICAgIGNsYXNzPVwibXctOTBcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICA8dHI+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnTGFiZWwuTmFtZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuUHJpY2VQZXJVbml0JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5DdXJyZW5jeScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuQmlsbGluZ0ZyZXF1ZW5jeScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuTWluVW5pdHMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5TdWJzY3JpcHRpb25zLk1heFVuaXRzJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5QdXJjaGFzZWRVbml0cycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLlN1YnNjcmlwdGlvbnMuQ2FsY3VsYXRlZFByaWNlJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uU3Vic2NyaXB0aW9ucy5Jc0RlbGV0ZWQnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPHRoIGNsYXNzPVwiYWN0aW9ucy1saXN0LXR3b1wiXG4gICAgICAgICAgc2NvcGU9XCJ0cnVlXCI+e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICBsZXQtaXRlbT5cbiAgICAgIDx0cj5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIk5hbWVcIj57eyBpdGVtLm5hbWUgfX08L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHJpY2UgUGVyIFVuaXRcIj5cbiAgICAgICAgICA8c3Bhbj57eyAoaXRlbS5wcmljZV9wZXJfdW5pdCAvIDEwMCkgfCBudW1iZXI6JzEuMi0yJyB9fVxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIGZhLWluZm8tY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIml0ZW0/LmRpc2NvdW50ICYmIG9iamVjdEtleXMoaXRlbT8uZGlzY291bnQpPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiaXRlbT8uZGlzY291bnQgfCBqc29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ3VycmVuY3lcIj5cbiAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogY3VycmVuY3ksIGl0ZW06IGl0ZW0uY3VycmVuY3kgfVwiXG4gICAgICAgICAgICBjb2xvcj1cImJsdWUtZ3JleVwiXG4gICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgaXRlbS5jdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgICAgPC90ZD5cbiAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkJpbGxpbmcgRnJlcXVlbmN5XCI+XG4gICAgICAgICAge3sgaXRlbS5iaWxsaW5nX2ZyZXF1ZW5jeSB9fVxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbT8ucGF1c2VfY29sbGVjdGlvbiAmJiBvYmplY3RLZXlzKGl0ZW0/LnBhdXNlX2NvbGxlY3Rpb24pPy5sZW5ndGhcIlxuICAgICAgICAgICAgY2xhc3M9XCJtcy0yXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCJpdGVtPy5wYXVzZV9jb2xsZWN0aW9uIHwganNvblwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlIHRleHQtd2FybmluZ1wiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJNaW4gVW5pdHNcIj57eyBpdGVtLm1pbl91bml0cyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJNYXggVW5pdHNcIj57eyBpdGVtLm1heF91bml0cyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQdXJjaGFzZWQgVW5pdHNcIj57eyBpdGVtLnB1cmNoYXNlZF91bml0cyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJDYWxjdWxhdGVkIFByaWNlXCI+e3sgKGl0ZW0uY2FsY3VsYXRlZF9wcmljZSAvIDEwMCkgfCBudW1iZXI6JzEuMi0yJyB9fTwvdGQ+XG4gICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJEZWxldGVkXCI+XG4gICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGl0ZW0/LmlzX2RlbGV0ZWQgfVwiXG4gICAgICAgICAgICBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBpdGVtPy5pc19kZWxldGVkID8gJ1llcycgOiAnTm8nIH19PC9zcGFuPlxuICAgICAgICA8L3RkPlxuICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZSBsaXN0LWFjdGlvblwiPlxuICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCJcbiAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdWJzY3JpcHRpb25TdXBlckFkbWluJ1wiXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIltcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVycy5zdWJzY3JpcHRpb25Qcm9kdWN0RGV0YWlscyArIGl0ZW0uc3Vic2NyaXB0aW9uX3Byb2R1Y3RfaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXCJcbiAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgc3Vic2NyaXB0aW9uX2lkOiBpZCB9XCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L3RyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC10YWJsZT5cbiAgPHNwYW4gY2xhc3M9XCJ0b3RhbC1yZWNvcmRzLWNvdW50XCIgKm5nSWY9XCJ0b3RhbFJlY29yZHMgIT09IDBcIj57eyAnTGFiZWwuVG90YWwnIHwgdHJhbnNsb2NvIH19OiB7eyB0b3RhbFJlY29yZHMgfX08L3NwYW4+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJ0b3RhbFJlY29yZHNVbkZpbHRlcmVkID09PSAwICYmIGlzTG9hZGVkXCI+XG4gIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIFttZXNzYWdlXT1cIidBZG1pbi5TdWJzY3JpcHRpb25zLk5vU3Vic2NyaXB0aW9uUHJvZHVjdHNNZXNzYWdlJyB8IHRyYW5zbG9jb1wiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==
|