@pmcretail/mapper-library 0.0.28 → 0.0.30
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/bundles/pmcretail-mapper-library.umd.js +1053 -5
- package/bundles/pmcretail-mapper-library.umd.js.map +1 -1
- package/bundles/pmcretail-mapper-library.umd.min.js +1 -1
- package/bundles/pmcretail-mapper-library.umd.min.js.map +1 -1
- package/esm2015/lib/WebReturnSalesforceMapper.class.js +480 -0
- package/esm2015/lib/mapper-library.model.js +435 -6
- package/esm2015/pmcretail-mapper-library.js +2 -2
- package/esm2015/public-api.js +2 -1
- package/esm5/lib/WebReturnSalesforceMapper.class.js +622 -0
- package/esm5/lib/mapper-library.model.js +435 -6
- package/esm5/pmcretail-mapper-library.js +2 -2
- package/esm5/public-api.js +2 -1
- package/fesm2015/pmcretail-mapper-library.js +912 -6
- package/fesm2015/pmcretail-mapper-library.js.map +1 -1
- package/fesm5/pmcretail-mapper-library.js +1053 -6
- package/fesm5/pmcretail-mapper-library.js.map +1 -1
- package/lib/WebReturnSalesforceMapper.class.d.ts +25 -0
- package/lib/mapper-library.model.d.ts +209 -10
- package/package.json +1 -1
- package/pmcretail-mapper-library.d.ts +1 -1
- package/pmcretail-mapper-library.metadata.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* Generated from: lib/WebReturnSalesforceMapper.class.ts
|
|
4
|
+
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
5
|
+
*/
|
|
6
|
+
import { DELIVERY_METHODS, INITIATING_MODULE, PROVIDERS, TRANSACTION_TYPE } from "./mapper-library.model";
|
|
7
|
+
export class WebReturnSalesforceMapperBuilderClass {
|
|
8
|
+
/**
|
|
9
|
+
* @param {?} orderDetails
|
|
10
|
+
*/
|
|
11
|
+
constructor(orderDetails) {
|
|
12
|
+
this.webReturnObject = {
|
|
13
|
+
id: '',
|
|
14
|
+
orgCode: "",
|
|
15
|
+
storeId: "",
|
|
16
|
+
storeNodeId: "",
|
|
17
|
+
storeNodeStructure: "",
|
|
18
|
+
deviceId: "",
|
|
19
|
+
terminalId: "",
|
|
20
|
+
initiatingModule: "",
|
|
21
|
+
export: false,
|
|
22
|
+
basket: {},
|
|
23
|
+
basketSummary: {},
|
|
24
|
+
baseCurrency: "",
|
|
25
|
+
customer: {
|
|
26
|
+
id: '',
|
|
27
|
+
email: '',
|
|
28
|
+
firstName: '',
|
|
29
|
+
lastName: '',
|
|
30
|
+
billingAddress: [],
|
|
31
|
+
shippingAddress: [],
|
|
32
|
+
shipmentDetails: [],
|
|
33
|
+
telephone: '',
|
|
34
|
+
postCode: '',
|
|
35
|
+
noCustomerSelected: false
|
|
36
|
+
},
|
|
37
|
+
currentTransactionDetails: (/** @type {?} */ ({}))
|
|
38
|
+
};
|
|
39
|
+
if (orderDetails) {
|
|
40
|
+
this.orderDetails = orderDetails;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* @template THIS
|
|
45
|
+
* @this {THIS}
|
|
46
|
+
* @return {THIS}
|
|
47
|
+
*/
|
|
48
|
+
webReturnCommonMapper() {
|
|
49
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper started...");
|
|
50
|
+
(/** @type {?} */ (this)).webReturnObject['type'] = TRANSACTION_TYPE.WEB_RETURNS;
|
|
51
|
+
(/** @type {?} */ (this)).webReturnObject['datetime'] = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
|
|
52
|
+
(/** @type {?} */ (this)).webReturnObject.baseCurrency = (/** @type {?} */ (this)).orderDetails.currency;
|
|
53
|
+
(/** @type {?} */ (this)).webReturnObject.subsidiaryId = '1';
|
|
54
|
+
(/** @type {?} */ (this)).webReturnObject.export = true;
|
|
55
|
+
(/** @type {?} */ (this)).webReturnObject.initiatingModule = INITIATING_MODULE.EBASKET;
|
|
56
|
+
(/** @type {?} */ (this)).webReturnObject.createdAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.creation_date);
|
|
57
|
+
(/** @type {?} */ (this)).webReturnObject.updatedAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
|
|
58
|
+
(/** @type {?} */ (this)).webReturnObject.transCompletedAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
|
|
59
|
+
(/** @type {?} */ (this)).webReturnObject['externalTransactionId'] = (/** @type {?} */ (this)).orderDetails.order_no;
|
|
60
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper ended...");
|
|
61
|
+
return (/** @type {?} */ (this));
|
|
62
|
+
}
|
|
63
|
+
// export(status, details) {
|
|
64
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
|
|
65
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
|
|
66
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
|
|
67
|
+
// if (status && details && details.providers && details.providers.length > 0) {
|
|
68
|
+
// details.providers.forEach(
|
|
69
|
+
// providerObj => {
|
|
70
|
+
// if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
|
|
71
|
+
// this.webReturnObject.export = true;
|
|
72
|
+
// } else {
|
|
73
|
+
// this.webReturnObject.export = false;
|
|
74
|
+
// }
|
|
75
|
+
// }
|
|
76
|
+
// );
|
|
77
|
+
// } else {
|
|
78
|
+
// this.webReturnObject.export = false;
|
|
79
|
+
// }
|
|
80
|
+
// console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
|
|
81
|
+
// return this;
|
|
82
|
+
// }
|
|
83
|
+
/**
|
|
84
|
+
* @return {?}
|
|
85
|
+
*/
|
|
86
|
+
getDeliveryMethod() {
|
|
87
|
+
if (this.orderDetails.shipments && this.orderDetails.shipments.length > 0) {
|
|
88
|
+
/** @type {?} */
|
|
89
|
+
const shipToStoreShipment = this.orderDetails.shipments.find((/**
|
|
90
|
+
* @param {?} shipment
|
|
91
|
+
* @return {?}
|
|
92
|
+
*/
|
|
93
|
+
shipment => shipment.c_fromStoreId));
|
|
94
|
+
if (shipToStoreShipment)
|
|
95
|
+
return DELIVERY_METHODS.SHIP_TO_STORE;
|
|
96
|
+
else
|
|
97
|
+
return DELIVERY_METHODS.DELIVERY;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
return '';
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* @template THIS
|
|
105
|
+
* @this {THIS}
|
|
106
|
+
* @return {THIS}
|
|
107
|
+
*/
|
|
108
|
+
product() {
|
|
109
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping started...");
|
|
110
|
+
(/** @type {?} */ (this)).webReturnObject.basket['products'] = [];
|
|
111
|
+
if ((/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0) {
|
|
112
|
+
(/** @type {?} */ (this)).orderDetails.product_items.forEach((/**
|
|
113
|
+
* @param {?} product
|
|
114
|
+
* @param {?} index
|
|
115
|
+
* @return {?}
|
|
116
|
+
*/
|
|
117
|
+
(product, index) => {
|
|
118
|
+
/** @type {?} */
|
|
119
|
+
const productObj = {
|
|
120
|
+
description: product.item_text ? product.item_text : '',
|
|
121
|
+
SKU: product.product_id ? product.product_id : '',
|
|
122
|
+
quantity: product.quantity ? product.quantity : 0,
|
|
123
|
+
refundedQuantity: 0,
|
|
124
|
+
price: product.base_price ? product.base_price : 0,
|
|
125
|
+
itemLineId: index + 1,
|
|
126
|
+
deliveryMethod: (/** @type {?} */ (this)).getDeliveryMethod().toString(),
|
|
127
|
+
totalLinePrice: product.price ? product.price : 0
|
|
128
|
+
};
|
|
129
|
+
if (product && product.price != 0) {
|
|
130
|
+
(/** @type {?} */ (this)).webReturnObject.basket['products'].push(productObj);
|
|
131
|
+
}
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping ended...");
|
|
135
|
+
return (/** @type {?} */ (this));
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* @template THIS
|
|
139
|
+
* @this {THIS}
|
|
140
|
+
* @return {THIS}
|
|
141
|
+
*/
|
|
142
|
+
linePromotion() {
|
|
143
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping started...");
|
|
144
|
+
(/** @type {?} */ (this)).webReturnObject.basket.linePromotion = (/** @type {?} */ ([]));
|
|
145
|
+
/** @type {?} */
|
|
146
|
+
let linePromotionArray = (/** @type {?} */ ([]));
|
|
147
|
+
if ((/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0) {
|
|
148
|
+
(/** @type {?} */ (this)).orderDetails.product_items.forEach((/**
|
|
149
|
+
* @param {?} product
|
|
150
|
+
* @param {?} index
|
|
151
|
+
* @return {?}
|
|
152
|
+
*/
|
|
153
|
+
(product, index) => {
|
|
154
|
+
product.item_id = (index + 1).toString();
|
|
155
|
+
if (product.price_adjustments && product.price_adjustments.length > 0) {
|
|
156
|
+
product.price_adjustments.forEach((/**
|
|
157
|
+
* @param {?} promotion
|
|
158
|
+
* @return {?}
|
|
159
|
+
*/
|
|
160
|
+
(promotion) => {
|
|
161
|
+
/** @type {?} */
|
|
162
|
+
let linePromotionObj = (/** @type {?} */ ({}));
|
|
163
|
+
/** @type {?} */
|
|
164
|
+
let trigger = (/** @type {?} */ ({}));
|
|
165
|
+
trigger.itemLineId = product.item_id;
|
|
166
|
+
trigger.quantity = product.quantity ? product.quantity : 0;
|
|
167
|
+
linePromotionObj.trigger = (/** @type {?} */ ([]));
|
|
168
|
+
linePromotionObj.trigger.push(trigger);
|
|
169
|
+
linePromotionObj.itemLineId = index + 1;
|
|
170
|
+
linePromotionObj.promotionId = promotion.promotion_id ? promotion.promotion_id : '';
|
|
171
|
+
linePromotionObj.displayText = promotion.item_text ? promotion.item_text : '';
|
|
172
|
+
linePromotionObj.promotionType = promotion.applied_discount && promotion.applied_discount.type ? promotion.applied_discount.type : '';
|
|
173
|
+
linePromotionObj.promotionAmount = promotion.price ? Math.abs(promotion.price) : 0;
|
|
174
|
+
linePromotionObj.name = promotion.item_text ? promotion.item_text : '';
|
|
175
|
+
linePromotionObj.promotionInfo = promotion.item_text ? promotion.item_text : '';
|
|
176
|
+
linePromotionObj.promotionLinePrice = product.price_after_item_discount ? product.price_after_item_discount : 0;
|
|
177
|
+
linePromotionArray.push(linePromotionObj);
|
|
178
|
+
}));
|
|
179
|
+
}
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
(/** @type {?} */ (this)).webReturnObject.basket.linePromotion = linePromotionArray;
|
|
183
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping ended...");
|
|
184
|
+
return (/** @type {?} */ (this));
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* @template THIS
|
|
188
|
+
* @this {THIS}
|
|
189
|
+
* @return {THIS}
|
|
190
|
+
*/
|
|
191
|
+
transactionPromotion() {
|
|
192
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping started...");
|
|
193
|
+
/** @type {?} */
|
|
194
|
+
let transactionPromotionArray = (/** @type {?} */ ([]));
|
|
195
|
+
(/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion = (/** @type {?} */ ([]));
|
|
196
|
+
if ((/** @type {?} */ (this)).orderDetails.order_price_adjustments && (/** @type {?} */ (this)).orderDetails.order_price_adjustments.length > 0) {
|
|
197
|
+
(/** @type {?} */ (this)).orderDetails.order_price_adjustments.forEach((/**
|
|
198
|
+
* @param {?} transactionPromotion
|
|
199
|
+
* @return {?}
|
|
200
|
+
*/
|
|
201
|
+
(transactionPromotion) => {
|
|
202
|
+
/** @type {?} */
|
|
203
|
+
let transactionPromotionObj = (/** @type {?} */ ({}));
|
|
204
|
+
transactionPromotionObj.displayText = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
205
|
+
transactionPromotionObj.name = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
206
|
+
transactionPromotionObj.promotionAmount = transactionPromotion.price ? Math.abs(transactionPromotion.price) : 0;
|
|
207
|
+
transactionPromotionObj.promotionId = transactionPromotion.promotion_id ? transactionPromotion.promotion_id : '';
|
|
208
|
+
transactionPromotionObj.promotionInfo = transactionPromotion.item_text ? transactionPromotion.item_text : '';
|
|
209
|
+
transactionPromotionObj.promotionType = transactionPromotion.applied_discount && transactionPromotion.applied_discount.type ? transactionPromotion.applied_discount.type : '';
|
|
210
|
+
transactionPromotionObj.itemLineIds = (/** @type {?} */ (this)).orderDetails.product_items.map((/**
|
|
211
|
+
* @param {?} product
|
|
212
|
+
* @param {?} index
|
|
213
|
+
* @return {?}
|
|
214
|
+
*/
|
|
215
|
+
(product, index) => index + 1));
|
|
216
|
+
transactionPromotionArray.push(transactionPromotionObj);
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
(/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion = transactionPromotionArray;
|
|
220
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping ended...");
|
|
221
|
+
return (/** @type {?} */ (this));
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* @template THIS
|
|
225
|
+
* @this {THIS}
|
|
226
|
+
* @return {THIS}
|
|
227
|
+
*/
|
|
228
|
+
customer() {
|
|
229
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping started...");
|
|
230
|
+
/** @type {?} */
|
|
231
|
+
let customerObj = (/** @type {?} */ ({}));
|
|
232
|
+
customerObj.email = (/** @type {?} */ (this)).orderDetails.customer_info && (/** @type {?} */ (this)).orderDetails.customer_info.email ? (/** @type {?} */ (this)).orderDetails.customer_info.email : '';
|
|
233
|
+
customerObj.firstName = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.first_name ? (/** @type {?} */ (this)).orderDetails.billing_address.first_name : '';
|
|
234
|
+
customerObj.lastName = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.last_name ? (/** @type {?} */ (this)).orderDetails.billing_address.last_name : '';
|
|
235
|
+
/** @type {?} */
|
|
236
|
+
let shippingAddress = (/** @type {?} */ ([]));
|
|
237
|
+
(/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
|
|
238
|
+
* @param {?} shipment
|
|
239
|
+
* @return {?}
|
|
240
|
+
*/
|
|
241
|
+
shipment => {
|
|
242
|
+
/** @type {?} */
|
|
243
|
+
let shippingAddressObj = (/** @type {?} */ ({}));
|
|
244
|
+
shippingAddressObj.id = shipment.shipping_address && shipment.shipping_address.id ? shipment.shipping_address.id : '';
|
|
245
|
+
shippingAddressObj.countryCode = shipment.shipping_address && shipment.shipping_address.country_code ? shipment.shipping_address.country_code : '';
|
|
246
|
+
shippingAddressObj.address1 = shipment.shipping_address && shipment.shipping_address.address1 ? shipment.shipping_address.address1 : '';
|
|
247
|
+
shippingAddressObj.city = shipment.shipping_address && shipment.shipping_address.city ? shipment.shipping_address.city : '';
|
|
248
|
+
shippingAddressObj.country = '';
|
|
249
|
+
shippingAddressObj.postCode = shipment.shipping_address && shipment.shipping_address.postal_code ? shipment.shipping_address.postal_code : '';
|
|
250
|
+
shippingAddress.push(shippingAddressObj);
|
|
251
|
+
}));
|
|
252
|
+
customerObj.shippingAddress = shippingAddress;
|
|
253
|
+
/** @type {?} */
|
|
254
|
+
let billingAddress = (/** @type {?} */ ([]));
|
|
255
|
+
/** @type {?} */
|
|
256
|
+
let billingAddressObj = (/** @type {?} */ ({}));
|
|
257
|
+
billingAddressObj.id = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.id ? (/** @type {?} */ (this)).orderDetails.billing_address.id : '';
|
|
258
|
+
billingAddressObj.countryCode = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.country_code ? (/** @type {?} */ (this)).orderDetails.billing_address.country_code : '';
|
|
259
|
+
billingAddressObj.address1 = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.address1 ? (/** @type {?} */ (this)).orderDetails.billing_address.address1 : '';
|
|
260
|
+
billingAddressObj.city = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.city ? (/** @type {?} */ (this)).orderDetails.billing_address.city : '';
|
|
261
|
+
billingAddressObj.country = '';
|
|
262
|
+
billingAddressObj.postCode = '';
|
|
263
|
+
billingAddress.push(billingAddressObj);
|
|
264
|
+
customerObj.billingAddress = billingAddress;
|
|
265
|
+
/** @type {?} */
|
|
266
|
+
let shipmentDetails = (/** @type {?} */ ([]));
|
|
267
|
+
(/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
|
|
268
|
+
* @param {?} shipment
|
|
269
|
+
* @return {?}
|
|
270
|
+
*/
|
|
271
|
+
shipment => {
|
|
272
|
+
/** @type {?} */
|
|
273
|
+
let shipmentDetailsObj = (/** @type {?} */ ({}));
|
|
274
|
+
shipmentDetailsObj.id = shipment.shipment_id ? shipment.shipment_id : '';
|
|
275
|
+
shipmentDetailsObj.deliveryGroup = shipment.shipment_id ? shipment.shipment_id : '';
|
|
276
|
+
shipmentDetails.push(shipmentDetailsObj);
|
|
277
|
+
}));
|
|
278
|
+
customerObj.shipmentDetails = shipmentDetails;
|
|
279
|
+
(/** @type {?} */ (this)).webReturnObject.customer = customerObj;
|
|
280
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping ended...");
|
|
281
|
+
return (/** @type {?} */ (this));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* @template THIS
|
|
285
|
+
* @this {THIS}
|
|
286
|
+
* @return {THIS}
|
|
287
|
+
*/
|
|
288
|
+
externalTransactionDetails() {
|
|
289
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping started...");
|
|
290
|
+
/** @type {?} */
|
|
291
|
+
let externalTransactionDetails = (/** @type {?} */ ([]));
|
|
292
|
+
if ((/** @type {?} */ (this)).orderDetails.shipments && (/** @type {?} */ (this)).orderDetails.shipments.length > 0) {
|
|
293
|
+
(/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
|
|
294
|
+
* @param {?} shipment
|
|
295
|
+
* @return {?}
|
|
296
|
+
*/
|
|
297
|
+
shipment => {
|
|
298
|
+
/** @type {?} */
|
|
299
|
+
let externalTransactionDetailsObj = (/** @type {?} */ ({}));
|
|
300
|
+
/** @type {?} */
|
|
301
|
+
let transactionInfo = (/** @type {?} */ ({}));
|
|
302
|
+
externalTransactionDetailsObj.uniqueId = (/** @type {?} */ (this)).orderDetails.order_no ? (/** @type {?} */ (this)).orderDetails.order_no : '';
|
|
303
|
+
externalTransactionDetailsObj.providerType = PROVIDERS.SALESFORCE;
|
|
304
|
+
transactionInfo.shippingId = shipment.shipping_method && shipment.shipping_method.id ? shipment.shipping_method.id : '';
|
|
305
|
+
transactionInfo.externalShippingId = shipment.shipment_id ? shipment.shipment_id : '';
|
|
306
|
+
externalTransactionDetailsObj.details = transactionInfo;
|
|
307
|
+
externalTransactionDetails.push(externalTransactionDetailsObj);
|
|
308
|
+
}));
|
|
309
|
+
}
|
|
310
|
+
(/** @type {?} */ (this)).webReturnObject.externalTransactionDetails = externalTransactionDetails;
|
|
311
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping ended...");
|
|
312
|
+
return (/** @type {?} */ (this));
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* @template THIS
|
|
316
|
+
* @this {THIS}
|
|
317
|
+
* @return {THIS}
|
|
318
|
+
*/
|
|
319
|
+
basketSummary() {
|
|
320
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping started...");
|
|
321
|
+
/** @type {?} */
|
|
322
|
+
let basketSummary = (/** @type {?} */ ({}));
|
|
323
|
+
/** @type {?} */
|
|
324
|
+
let basketSummaryWebOrder = (/** @type {?} */ ({}));
|
|
325
|
+
/** @type {?} */
|
|
326
|
+
const linePromotionTotal = (/** @type {?} */ (this)).webReturnObject.basket.linePromotion.map((/**
|
|
327
|
+
* @param {?} linePromotion
|
|
328
|
+
* @return {?}
|
|
329
|
+
*/
|
|
330
|
+
linePromotion => linePromotion.promotionAmount)).reduce((/**
|
|
331
|
+
* @param {?} accumulator
|
|
332
|
+
* @param {?} currentValue
|
|
333
|
+
* @return {?}
|
|
334
|
+
*/
|
|
335
|
+
(accumulator, currentValue) => accumulator + currentValue), 0);
|
|
336
|
+
/** @type {?} */
|
|
337
|
+
const transactionPromotionTotal = (/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion.map((/**
|
|
338
|
+
* @param {?} transactionPromotion
|
|
339
|
+
* @return {?}
|
|
340
|
+
*/
|
|
341
|
+
transactionPromotion => transactionPromotion.promotionAmount)).reduce((/**
|
|
342
|
+
* @param {?} accumulator
|
|
343
|
+
* @param {?} currentValue
|
|
344
|
+
* @return {?}
|
|
345
|
+
*/
|
|
346
|
+
(accumulator, currentValue) => accumulator + currentValue), 0);
|
|
347
|
+
basketSummary.discountTotal = linePromotionTotal + transactionPromotionTotal;
|
|
348
|
+
basketSummary.VATTotal = (/** @type {?} */ (this)).orderDetails.tax_total ? (/** @type {?} */ (this)).orderDetails.tax_total : 0;
|
|
349
|
+
basketSummary.saleTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
350
|
+
basketSummary.basketTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
351
|
+
basketSummary.totalItems = (/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0 ? (/** @type {?} */ (this)).orderDetails.product_items.length : 0;
|
|
352
|
+
basketSummary.shippingTotal = (/** @type {?} */ (this)).orderDetails.shipping_total ? (/** @type {?} */ (this)).orderDetails.shipping_total : 0;
|
|
353
|
+
basketSummary.basketTotalWithShippingTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
354
|
+
basketSummaryWebOrder.shippingTotal = (/** @type {?} */ (this)).orderDetails.shipping_total ? (/** @type {?} */ (this)).orderDetails.shipping_total : 0;
|
|
355
|
+
basketSummaryWebOrder.basketTotalWithShippingTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
|
|
356
|
+
basketSummary.webOrder = basketSummaryWebOrder;
|
|
357
|
+
(/** @type {?} */ (this)).webReturnObject.basketSummary = basketSummary;
|
|
358
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping ended...");
|
|
359
|
+
return (/** @type {?} */ (this));
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* @template THIS
|
|
363
|
+
* @this {THIS}
|
|
364
|
+
* @param {?} deviceId
|
|
365
|
+
* @return {THIS}
|
|
366
|
+
*/
|
|
367
|
+
deviceId(deviceId) {
|
|
368
|
+
(/** @type {?} */ (this)).webReturnObject.deviceId = deviceId;
|
|
369
|
+
return (/** @type {?} */ (this));
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* @template THIS
|
|
373
|
+
* @this {THIS}
|
|
374
|
+
* @param {?} terminalId
|
|
375
|
+
* @return {THIS}
|
|
376
|
+
*/
|
|
377
|
+
terminalId(terminalId) {
|
|
378
|
+
(/** @type {?} */ (this)).webReturnObject.terminalId = terminalId;
|
|
379
|
+
return (/** @type {?} */ (this));
|
|
380
|
+
}
|
|
381
|
+
/**
|
|
382
|
+
* @template THIS
|
|
383
|
+
* @this {THIS}
|
|
384
|
+
* @param {?} orgCode
|
|
385
|
+
* @return {THIS}
|
|
386
|
+
*/
|
|
387
|
+
orgCode(orgCode) {
|
|
388
|
+
(/** @type {?} */ (this)).webReturnObject.orgCode = orgCode;
|
|
389
|
+
return (/** @type {?} */ (this));
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* @template THIS
|
|
393
|
+
* @this {THIS}
|
|
394
|
+
* @param {?} storeId
|
|
395
|
+
* @return {THIS}
|
|
396
|
+
*/
|
|
397
|
+
storeId(storeId) {
|
|
398
|
+
(/** @type {?} */ (this)).webReturnObject.storeId = storeId;
|
|
399
|
+
return (/** @type {?} */ (this));
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* @template THIS
|
|
403
|
+
* @this {THIS}
|
|
404
|
+
* @param {?} storeNodeId
|
|
405
|
+
* @return {THIS}
|
|
406
|
+
*/
|
|
407
|
+
storeNodeId(storeNodeId) {
|
|
408
|
+
(/** @type {?} */ (this)).webReturnObject.storeNodeId = storeNodeId;
|
|
409
|
+
return (/** @type {?} */ (this));
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* @template THIS
|
|
413
|
+
* @this {THIS}
|
|
414
|
+
* @param {?} storeNodeStructure
|
|
415
|
+
* @return {THIS}
|
|
416
|
+
*/
|
|
417
|
+
storeNodeStructure(storeNodeStructure) {
|
|
418
|
+
(/** @type {?} */ (this)).webReturnObject.storeNodeStructure = storeNodeStructure;
|
|
419
|
+
return (/** @type {?} */ (this));
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* @template THIS
|
|
423
|
+
* @this {THIS}
|
|
424
|
+
* @param {?} docId
|
|
425
|
+
* @return {THIS}
|
|
426
|
+
*/
|
|
427
|
+
docId(docId) {
|
|
428
|
+
(/** @type {?} */ (this)).webReturnObject.id = docId;
|
|
429
|
+
return (/** @type {?} */ (this));
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* @template THIS
|
|
433
|
+
* @this {THIS}
|
|
434
|
+
* @param {?} userID
|
|
435
|
+
* @return {THIS}
|
|
436
|
+
*/
|
|
437
|
+
updateUserID(userID) {
|
|
438
|
+
(/** @type {?} */ (this)).webReturnObject.userId = userID;
|
|
439
|
+
return (/** @type {?} */ (this));
|
|
440
|
+
}
|
|
441
|
+
/**
|
|
442
|
+
* @template THIS
|
|
443
|
+
* @this {THIS}
|
|
444
|
+
* @param {?} name
|
|
445
|
+
* @return {THIS}
|
|
446
|
+
*/
|
|
447
|
+
updateUserName(name) {
|
|
448
|
+
(/** @type {?} */ (this)).webReturnObject.userName = name;
|
|
449
|
+
return (/** @type {?} */ (this));
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* @return {?}
|
|
453
|
+
*/
|
|
454
|
+
build() {
|
|
455
|
+
console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: mapping done...");
|
|
456
|
+
return this.webReturnObject;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* @param {?} date
|
|
460
|
+
* @return {?}
|
|
461
|
+
*/
|
|
462
|
+
getUTCDateTime(date) {
|
|
463
|
+
if (date) {
|
|
464
|
+
return new Date(date).toISOString();
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
if (false) {
|
|
469
|
+
/**
|
|
470
|
+
* @type {?}
|
|
471
|
+
* @private
|
|
472
|
+
*/
|
|
473
|
+
WebReturnSalesforceMapperBuilderClass.prototype.orderDetails;
|
|
474
|
+
/**
|
|
475
|
+
* @type {?}
|
|
476
|
+
* @private
|
|
477
|
+
*/
|
|
478
|
+
WebReturnSalesforceMapperBuilderClass.prototype.webReturnObject;
|
|
479
|
+
}
|
|
480
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BwbWNyZXRhaWwvbWFwcGVyLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBcUYsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQWdDLFNBQVMsRUFBbUIsZ0JBQWdCLEVBQW1HLE1BQU0sd0JBQXdCLENBQUM7QUFFN1UsTUFBTSxPQUFPLHFDQUFxQzs7OztJQStCOUMsWUFBWSxZQUEwQjtRQTVCOUIsb0JBQWUsR0FBd0I7WUFDM0MsRUFBRSxFQUFFLEVBQUU7WUFDTixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsV0FBVyxFQUFFLEVBQUU7WUFDZixrQkFBa0IsRUFBRSxFQUFFO1lBQ3RCLFFBQVEsRUFBRSxFQUFFO1lBQ1osVUFBVSxFQUFFLEVBQUU7WUFDZCxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsTUFBTSxFQUFFLEVBQUU7WUFDVixhQUFhLEVBQUUsRUFBRTtZQUNqQixZQUFZLEVBQUUsRUFBRTtZQUNoQixRQUFRLEVBQUU7Z0JBQ04sRUFBRSxFQUFFLEVBQUU7Z0JBQ04sS0FBSyxFQUFFLEVBQUU7Z0JBQ1QsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osY0FBYyxFQUFFLEVBQUU7Z0JBQ2xCLGVBQWUsRUFBRSxFQUFFO2dCQUNuQixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsU0FBUyxFQUFFLEVBQUU7Z0JBQ2IsUUFBUSxFQUFFLEVBQUU7Z0JBQ1osa0JBQWtCLEVBQUUsS0FBSzthQUM1QjtZQUNELHlCQUF5QixFQUFFLG1CQUFBLEVBQUUsRUFBNkI7U0FDN0QsQ0FBQTtRQUdHLElBQUksWUFBWSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFlBQVks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LEVBQUEsQ0FBQztJQUNoQixDQUFDOzs7O0lBRUQsS0FBSztRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsd0VBQXdFLENBQUMsQ0FBQztRQUN0RixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDaEMsQ0FBQzs7Ozs7SUFFRCxjQUFjLENBQUMsSUFBSTtRQUNmLElBQUksSUFBSSxFQUFFO1lBQ04sT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN2QztJQUNMLENBQUM7Q0FDSjs7Ozs7O0lBN1RHLDZEQUFtQzs7Ozs7SUFDbkMsZ0VBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzcywgQmFza2V0U3VtbWFyeSwgQmFza2V0U3VtbWFyeURldGFpbHMsIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMsIEN1c3RvbWVyLCBERUxJVkVSWV9NRVRIT0RTLCBJTklUSUFUSU5HX01PRFVMRSwgTGluZVByb21vdGlvbnMsIE9yZGVyRGV0YWlscywgUFJPVklERVJTLCBTaGlwbWVudERldGFpbHMsIFRSQU5TQUNUSU9OX1RZUEUsIFRyYW5zYWN0aW9uRG9jdW1lbnQsIFRyYW5zYWN0aW9uSW5mbywgVHJhbnNhY3Rpb25Qcm9tb3Rpb24sIFRyaWdnZXIsIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzIH0gZnJvbSBcIi4vbWFwcGVyLWxpYnJhcnkubW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzIHtcclxuXHJcbiAgICBwcml2YXRlIG9yZGVyRGV0YWlsczogT3JkZXJEZXRhaWxzO1xyXG4gICAgcHJpdmF0ZSB3ZWJSZXR1cm5PYmplY3Q6IFRyYW5zYWN0aW9uRG9jdW1lbnQgPSB7XHJcbiAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgIG9yZ0NvZGU6IFwiXCIsXHJcbiAgICAgICAgc3RvcmVJZDogXCJcIixcclxuICAgICAgICBzdG9yZU5vZGVJZDogXCJcIixcclxuICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXHJcbiAgICAgICAgZGV2aWNlSWQ6IFwiXCIsXHJcbiAgICAgICAgdGVybWluYWxJZDogXCJcIixcclxuICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcIlwiLFxyXG4gICAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgYmFza2V0OiB7fSxcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5OiB7fSxcclxuICAgICAgICBiYXNlQ3VycmVuY3k6IFwiXCIsXHJcbiAgICAgICAgY3VzdG9tZXI6IHtcclxuICAgICAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgICAgICBlbWFpbDogJycsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJycsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnJyxcclxuICAgICAgICAgICAgYmlsbGluZ0FkZHJlc3M6IFtdLFxyXG4gICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3M6IFtdLFxyXG4gICAgICAgICAgICBzaGlwbWVudERldGFpbHM6IFtdLFxyXG4gICAgICAgICAgICB0ZWxlcGhvbmU6ICcnLFxyXG4gICAgICAgICAgICBwb3N0Q29kZTogJycsXHJcbiAgICAgICAgICAgIG5vQ3VzdG9tZXJTZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcmRlckRldGFpbHM6IE9yZGVyRGV0YWlscykge1xyXG4gICAgICAgIGlmIChvcmRlckRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMgPSBvcmRlckRldGFpbHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdlYlJldHVybkNvbW1vbk1hcHBlcigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiB3ZWJSZXR1cm5Db21tb25NYXBwZXIgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsndHlwZSddID0gVFJBTlNBQ1RJT05fVFlQRS5XRUJfUkVUVVJOUztcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnZGF0ZXRpbWUnXSA9IHRoaXMuZ2V0VVRDRGF0ZVRpbWUodGhpcy5vcmRlckRldGFpbHMubGFzdF9tb2RpZmllZCk7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFzZUN1cnJlbmN5ID0gdGhpcy5vcmRlckRldGFpbHMuY3VycmVuY3k7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3Quc3Vic2lkaWFyeUlkID0gJzEnO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4cG9ydCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuaW5pdGlhdGluZ01vZHVsZSA9IElOSVRJQVRJTkdfTU9EVUxFLkVCQVNLRVQ7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuY3JlYXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLm9yZGVyRGV0YWlscy5jcmVhdGlvbl9kYXRlKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51cGRhdGVkQXQgPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmxhc3RfbW9kaWZpZWQpO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnRyYW5zQ29tcGxldGVkQXQgPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmxhc3RfbW9kaWZpZWQpO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydleHRlcm5hbFRyYW5zYWN0aW9uSWQnXSA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX25vO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHdlYlJldHVybkNvbW1vbk1hcHBlciBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHBvcnQoc3RhdHVzLCBkZXRhaWxzKSB7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXhwb3J0IG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBzdGF0dXM6XCIsIHN0YXR1cyk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZGV0YWlsczpcIiwgSlNPTi5zdHJpbmdpZnkoZGV0YWlscykpO1xyXG4gICAgLy8gICAgIGlmIChzdGF0dXMgJiYgZGV0YWlscyAmJiBkZXRhaWxzLnByb3ZpZGVycyAmJiBkZXRhaWxzLnByb3ZpZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgIGRldGFpbHMucHJvdmlkZXJzLmZvckVhY2goXHJcbiAgICAvLyAgICAgICAgICAgICBwcm92aWRlck9iaiA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyT2JqLnByb3ZpZGVyICYmIHByb3ZpZGVyT2JqLnByb3ZpZGVyID09PSBQUk9WSURFUlMuU0FMRVNGT1JDRSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4cG9ydCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXhwb3J0IG1hcHBpbmcgZW5kLi4uXCIpXHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgZ2V0RGVsaXZlcnlNZXRob2QoKSB7XHJcbiAgICAgICAgaWYodGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzICYmIHRoaXMub3JkZXJEZXRhaWxzLnNoaXBtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoaXBUb1N0b3JlU2hpcG1lbnQgPSB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMuZmluZChzaGlwbWVudCA9PiBzaGlwbWVudC5jX2Zyb21TdG9yZUlkKTtcclxuICAgICAgICAgICAgaWYoc2hpcFRvU3RvcmVTaGlwbWVudCkgcmV0dXJuIERFTElWRVJZX01FVEhPRFMuU0hJUF9UT19TVE9SRTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gREVMSVZFUllfTUVUSE9EUy5ERUxJVkVSWTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb2R1Y3QoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogcHJvZHVjdCBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wydwcm9kdWN0cyddID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChwcm9kdWN0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0Lml0ZW1fdGV4dCA/IHByb2R1Y3QuaXRlbV90ZXh0IDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNLVTogcHJvZHVjdC5wcm9kdWN0X2lkID8gcHJvZHVjdC5wcm9kdWN0X2lkIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5ID8gcHJvZHVjdC5xdWFudGl0eSA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnVuZGVkUXVhbnRpdHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0LmJhc2VfcHJpY2UgPyBwcm9kdWN0LmJhc2VfcHJpY2UgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGluZUlkOiBpbmRleCArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5TWV0aG9kOiB0aGlzLmdldERlbGl2ZXJ5TWV0aG9kKCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMaW5lUHJpY2U6IHByb2R1Y3QucHJpY2UgPyBwcm9kdWN0LnByaWNlIDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdCAmJiBwcm9kdWN0LnByaWNlICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wydwcm9kdWN0cyddLnB1c2gocHJvZHVjdE9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBwcm9kdWN0IG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZVByb21vdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBsaW5lUHJvbW90aW9uIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQubGluZVByb21vdGlvbiA9IFtdIGFzIExpbmVQcm9tb3Rpb25zW107XHJcbiAgICAgICAgbGV0IGxpbmVQcm9tb3Rpb25BcnJheSA9IFtdIGFzIExpbmVQcm9tb3Rpb25zW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChwcm9kdWN0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbV9pZCA9IChpbmRleCArIDEpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMgJiYgcHJvZHVjdC5wcmljZV9hZGp1c3RtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9tb3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZVByb21vdGlvbk9iaiA9IHt9IGFzIExpbmVQcm9tb3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmlnZ2VyID0ge30gYXMgVHJpZ2dlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1faWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHkgPyBwcm9kdWN0LnF1YW50aXR5IDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnRyaWdnZXIgPSBbXSBhcyBUcmlnZ2VyW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai50cmlnZ2VyLnB1c2godHJpZ2dlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmouaXRlbUxpbmVJZCA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbklkID0gcHJvbW90aW9uLnByb21vdGlvbl9pZCA/IHByb21vdGlvbi5wcm9tb3Rpb25faWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLmRpc3BsYXlUZXh0ID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvblR5cGUgPSBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudC50eXBlID8gcHJvbW90aW9uLmFwcGxpZWRfZGlzY291bnQudHlwZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uQW1vdW50ID0gcHJvbW90aW9uLnByaWNlID8gTWF0aC5hYnMocHJvbW90aW9uLnByaWNlKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai5uYW1lID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSBwcm9tb3Rpb24uaXRlbV90ZXh0ID8gcHJvbW90aW9uLml0ZW1fdGV4dCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uTGluZVByaWNlID0gcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50ID8gcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50IDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uQXJyYXkucHVzaChsaW5lUHJvbW90aW9uT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC5saW5lUHJvbW90aW9uID0gbGluZVByb21vdGlvbkFycmF5O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGxpbmVQcm9tb3Rpb24gbWFwcGluZyBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2FjdGlvblByb21vdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiB0cmFuc2FjdGlvblByb21vdGlvbiBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAgICAgbGV0IHRyYW5zYWN0aW9uUHJvbW90aW9uQXJyYXkgPSBbXSBhcyBUcmFuc2FjdGlvblByb21vdGlvbltdO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IFtdIGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzICYmIHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMub3JkZXJfcHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICh0cmFuc2FjdGlvblByb21vdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbk9iaiA9IHt9IGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLmRpc3BsYXlUZXh0ID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0ID8gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0IDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmoubmFtZSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1fdGV4dCA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1fdGV4dCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkFtb3VudCA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByaWNlID8gTWF0aC5hYnModHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJpY2UpIDogMDtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5wcm9tb3Rpb25JZCA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbl9pZCA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbl9pZCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgPyB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5wcm9tb3Rpb25UeXBlID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50LnR5cGUgPyB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50LnR5cGUgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5pdGVtTGluZUlkcyA9IHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubWFwKChwcm9kdWN0LCBpbmRleCkgPT4gaW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5LnB1c2godHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHRyYW5zYWN0aW9uUHJvbW90aW9uIG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tZXIoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogY3VzdG9tZXIgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIGxldCBjdXN0b21lck9iaiA9IHt9IGFzIEN1c3RvbWVyO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLmVtYWlsID0gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mbyAmJiB0aGlzLm9yZGVyRGV0YWlscy5jdXN0b21lcl9pbmZvLmVtYWlsID8gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mby5lbWFpbCA6ICcnO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLmZpcnN0TmFtZSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuZmlyc3RfbmFtZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5maXJzdF9uYW1lIDogJyc7XHJcbiAgICAgICAgY3VzdG9tZXJPYmoubGFzdE5hbWUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmxhc3RfbmFtZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5sYXN0X25hbWUgOiAnJztcclxuXHJcbiAgICAgICAgbGV0IHNoaXBwaW5nQWRkcmVzcyA9IFtdIGFzIEFkZHJlc3NbXTtcclxuICAgICAgICB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgc2hpcG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNoaXBwaW5nQWRkcmVzc09iaiA9IHt9IGFzIEFkZHJlc3M7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouaWQgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmlkIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlID8gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5hZGRyZXNzMSA9IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MgJiYgc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5hZGRyZXNzMSA/IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuYWRkcmVzczEgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jaXR5ID0gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcyAmJiBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmoucG9zdENvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MucG9zdGFsX2NvZGUgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLnBvc3RhbF9jb2RlIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3MucHVzaChzaGlwcGluZ0FkZHJlc3NPYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBwaW5nQWRkcmVzcyA9IHNoaXBwaW5nQWRkcmVzcztcclxuXHJcbiAgICAgICAgbGV0IGJpbGxpbmdBZGRyZXNzID0gW10gYXMgQWRkcmVzc1tdO1xyXG4gICAgICAgIGxldCBiaWxsaW5nQWRkcmVzc09iaiA9IHt9IGFzIEFkZHJlc3M7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouaWQgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkIDogJyc7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNvdW50cnlfY29kZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5hZGRyZXNzMSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuYWRkcmVzczEgPyB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuYWRkcmVzczEgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jaXR5ID0gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jaXR5ID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNpdHkgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmoucG9zdENvZGUgPSAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzcy5wdXNoKGJpbGxpbmdBZGRyZXNzT2JqKTtcclxuICAgICAgICBjdXN0b21lck9iai5iaWxsaW5nQWRkcmVzcyA9IGJpbGxpbmdBZGRyZXNzO1xyXG5cclxuICAgICAgICBsZXQgc2hpcG1lbnREZXRhaWxzID0gW10gYXMgU2hpcG1lbnREZXRhaWxzW107XHJcbiAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXHJcbiAgICAgICAgICAgIHNoaXBtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzaGlwbWVudERldGFpbHNPYmogPSB7fSBhcyBTaGlwbWVudERldGFpbHM7XHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudERldGFpbHNPYmouaWQgPSBzaGlwbWVudC5zaGlwbWVudF9pZCA/IHNoaXBtZW50LnNoaXBtZW50X2lkIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudERldGFpbHNPYmouZGVsaXZlcnlHcm91cCA9IHNoaXBtZW50LnNoaXBtZW50X2lkID8gc2hpcG1lbnQuc2hpcG1lbnRfaWQgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBtZW50RGV0YWlscy5wdXNoKHNoaXBtZW50RGV0YWlsc09iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBtZW50RGV0YWlscyA9IHNoaXBtZW50RGV0YWlscztcclxuXHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuY3VzdG9tZXIgPSBjdXN0b21lck9iajtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBjdXN0b21lciBtYXBwaW5nIGVuZGVkLi4uXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICBsZXQgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMgPSBbXSBhcyBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc1tdO1xyXG4gICAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMgJiYgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqID0ge30gYXMgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uSW5mbyA9IHt9IGFzIFRyYW5zYWN0aW9uSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iai51bmlxdWVJZCA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX25vID8gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfbm8gOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iai5wcm92aWRlclR5cGUgPSBQUk9WSURFUlMuU0FMRVNGT1JDRTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uc2hpcHBpbmdJZCA9IHNoaXBtZW50LnNoaXBwaW5nX21ldGhvZCAmJiBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uZXh0ZXJuYWxTaGlwcGluZ0lkID0gc2hpcG1lbnQuc2hpcG1lbnRfaWQgPyBzaGlwbWVudC5zaGlwbWVudF9pZCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqLmRldGFpbHMgPSB0cmFuc2FjdGlvbkluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMucHVzaChleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzID0gZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMgbWFwcGluZyBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBiYXNrZXRTdW1tYXJ5KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGJhc2tldFN1bW1hcnkgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIGxldCBiYXNrZXRTdW1tYXJ5ID0ge30gYXMgQmFza2V0U3VtbWFyeTtcclxuICAgICAgICBsZXQgYmFza2V0U3VtbWFyeVdlYk9yZGVyID0ge30gYXMgQmFza2V0U3VtbWFyeURldGFpbHM7XHJcbiAgICAgICAgY29uc3QgbGluZVByb21vdGlvblRvdGFsID0gdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LmxpbmVQcm9tb3Rpb24ubWFwKGxpbmVQcm9tb3Rpb24gPT4gbGluZVByb21vdGlvbi5wcm9tb3Rpb25BbW91bnQpLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50VmFsdWUsIDApO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uUHJvbW90aW9uVG90YWwgPSB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubWFwKHRyYW5zYWN0aW9uUHJvbW90aW9uID0+IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbkFtb3VudCkucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZSwgMCk7XHJcbiAgICAgICAgYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gbGluZVByb21vdGlvblRvdGFsICsgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Ub3RhbDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gdGhpcy5vcmRlckRldGFpbHMudGF4X3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMudGF4X3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgOiAwO1xyXG4gICAgICAgIGJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMgPSB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zICYmIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoID4gMCA/IHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5zaGlwcGluZ190b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsV2l0aFNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5V2ViT3JkZXIuc2hpcHBpbmdUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMuc2hpcHBpbmdfdG90YWwgOiAwO1xyXG4gICAgICAgIGJhc2tldFN1bW1hcnlXZWJPcmRlci5iYXNrZXRUb3RhbFdpdGhTaGlwcGluZ1RvdGFsID0gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgPyB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA6IDA7XHJcbiAgICAgICAgYmFza2V0U3VtbWFyeS53ZWJPcmRlciA9IGJhc2tldFN1bW1hcnlXZWJPcmRlcjtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXRTdW1tYXJ5ID0gYmFza2V0U3VtbWFyeTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBiYXNrZXRTdW1tYXJ5IG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGV2aWNlSWQoZGV2aWNlSWQpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRlcm1pbmFsSWQodGVybWluYWxJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnRlcm1pbmFsSWQgPSB0ZXJtaW5hbElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG9yZ0NvZGUob3JnQ29kZSkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0Lm9yZ0NvZGUgPSBvcmdDb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlSWQoc3RvcmVJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlSWQgPSBzdG9yZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlTm9kZUlkKHN0b3JlTm9kZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdG9yZU5vZGVJZCA9IHN0b3JlTm9kZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlTm9kZVN0cnVjdHVyZShzdG9yZU5vZGVTdHJ1Y3R1cmU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlTm9kZVN0cnVjdHVyZSA9IHN0b3JlTm9kZVN0cnVjdHVyZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBkb2NJZChkb2NJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmlkID0gZG9jSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVXNlcklEKHVzZXJJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudXNlcklkID0gdXNlcklEO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVVzZXJOYW1lKG5hbWUpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51c2VyTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogbWFwcGluZyBkb25lLi4uXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYlJldHVybk9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVVENEYXRlVGltZShkYXRlKSB7XHJcbiAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|