@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.
@@ -0,0 +1,622 @@
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
+ var WebReturnSalesforceMapperBuilderClass = /** @class */ (function () {
8
+ function WebReturnSalesforceMapperBuilderClass(orderDetails) {
9
+ this.webReturnObject = {
10
+ id: '',
11
+ orgCode: "",
12
+ storeId: "",
13
+ storeNodeId: "",
14
+ storeNodeStructure: "",
15
+ deviceId: "",
16
+ terminalId: "",
17
+ initiatingModule: "",
18
+ export: false,
19
+ basket: {},
20
+ basketSummary: {},
21
+ baseCurrency: "",
22
+ customer: {
23
+ id: '',
24
+ email: '',
25
+ firstName: '',
26
+ lastName: '',
27
+ billingAddress: [],
28
+ shippingAddress: [],
29
+ shipmentDetails: [],
30
+ telephone: '',
31
+ postCode: '',
32
+ noCustomerSelected: false
33
+ },
34
+ currentTransactionDetails: (/** @type {?} */ ({}))
35
+ };
36
+ if (orderDetails) {
37
+ this.orderDetails = orderDetails;
38
+ }
39
+ }
40
+ /**
41
+ * @template THIS
42
+ * @this {THIS}
43
+ * @return {THIS}
44
+ */
45
+ WebReturnSalesforceMapperBuilderClass.prototype.webReturnCommonMapper = /**
46
+ * @template THIS
47
+ * @this {THIS}
48
+ * @return {THIS}
49
+ */
50
+ function () {
51
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper started...");
52
+ (/** @type {?} */ (this)).webReturnObject['type'] = TRANSACTION_TYPE.WEB_RETURNS;
53
+ (/** @type {?} */ (this)).webReturnObject['datetime'] = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
54
+ (/** @type {?} */ (this)).webReturnObject.baseCurrency = (/** @type {?} */ (this)).orderDetails.currency;
55
+ (/** @type {?} */ (this)).webReturnObject.subsidiaryId = '1';
56
+ (/** @type {?} */ (this)).webReturnObject.export = true;
57
+ (/** @type {?} */ (this)).webReturnObject.initiatingModule = INITIATING_MODULE.EBASKET;
58
+ (/** @type {?} */ (this)).webReturnObject.createdAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.creation_date);
59
+ (/** @type {?} */ (this)).webReturnObject.updatedAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
60
+ (/** @type {?} */ (this)).webReturnObject.transCompletedAt = (/** @type {?} */ (this)).getUTCDateTime((/** @type {?} */ (this)).orderDetails.last_modified);
61
+ (/** @type {?} */ (this)).webReturnObject['externalTransactionId'] = (/** @type {?} */ (this)).orderDetails.order_no;
62
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: webReturnCommonMapper ended...");
63
+ return (/** @type {?} */ (this));
64
+ };
65
+ // export(status, details) {
66
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
67
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
68
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
69
+ // if (status && details && details.providers && details.providers.length > 0) {
70
+ // details.providers.forEach(
71
+ // providerObj => {
72
+ // if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
73
+ // this.webReturnObject.export = true;
74
+ // } else {
75
+ // this.webReturnObject.export = false;
76
+ // }
77
+ // }
78
+ // );
79
+ // } else {
80
+ // this.webReturnObject.export = false;
81
+ // }
82
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
83
+ // return this;
84
+ // }
85
+ // export(status, details) {
86
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
87
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
88
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
89
+ // if (status && details && details.providers && details.providers.length > 0) {
90
+ // details.providers.forEach(
91
+ // providerObj => {
92
+ // if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
93
+ // this.webReturnObject.export = true;
94
+ // } else {
95
+ // this.webReturnObject.export = false;
96
+ // }
97
+ // }
98
+ // );
99
+ // } else {
100
+ // this.webReturnObject.export = false;
101
+ // }
102
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
103
+ // return this;
104
+ // }
105
+ /**
106
+ * @return {?}
107
+ */
108
+ WebReturnSalesforceMapperBuilderClass.prototype.getDeliveryMethod =
109
+ // export(status, details) {
110
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping started...");
111
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: status:", status);
112
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: details:", JSON.stringify(details));
113
+ // if (status && details && details.providers && details.providers.length > 0) {
114
+ // details.providers.forEach(
115
+ // providerObj => {
116
+ // if (providerObj.provider && providerObj.provider === PROVIDERS.SALESFORCE) {
117
+ // this.webReturnObject.export = true;
118
+ // } else {
119
+ // this.webReturnObject.export = false;
120
+ // }
121
+ // }
122
+ // );
123
+ // } else {
124
+ // this.webReturnObject.export = false;
125
+ // }
126
+ // console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: export mapping end...")
127
+ // return this;
128
+ // }
129
+ /**
130
+ * @return {?}
131
+ */
132
+ function () {
133
+ if (this.orderDetails.shipments && this.orderDetails.shipments.length > 0) {
134
+ /** @type {?} */
135
+ var shipToStoreShipment = this.orderDetails.shipments.find((/**
136
+ * @param {?} shipment
137
+ * @return {?}
138
+ */
139
+ function (shipment) { return shipment.c_fromStoreId; }));
140
+ if (shipToStoreShipment)
141
+ return DELIVERY_METHODS.SHIP_TO_STORE;
142
+ else
143
+ return DELIVERY_METHODS.DELIVERY;
144
+ }
145
+ else {
146
+ return '';
147
+ }
148
+ };
149
+ /**
150
+ * @template THIS
151
+ * @this {THIS}
152
+ * @return {THIS}
153
+ */
154
+ WebReturnSalesforceMapperBuilderClass.prototype.product = /**
155
+ * @template THIS
156
+ * @this {THIS}
157
+ * @return {THIS}
158
+ */
159
+ function () {
160
+ var _this = this;
161
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping started...");
162
+ (/** @type {?} */ (this)).webReturnObject.basket['products'] = [];
163
+ if ((/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0) {
164
+ (/** @type {?} */ (this)).orderDetails.product_items.forEach((/**
165
+ * @param {?} product
166
+ * @param {?} index
167
+ * @return {?}
168
+ */
169
+ function (product, index) {
170
+ /** @type {?} */
171
+ var productObj = {
172
+ description: product.item_text ? product.item_text : '',
173
+ SKU: product.product_id ? product.product_id : '',
174
+ quantity: product.quantity ? product.quantity : 0,
175
+ refundedQuantity: 0,
176
+ price: product.base_price ? product.base_price : 0,
177
+ itemLineId: index + 1,
178
+ deliveryMethod: (/** @type {?} */ (_this)).getDeliveryMethod().toString(),
179
+ totalLinePrice: product.price ? product.price : 0
180
+ };
181
+ if (product && product.price != 0) {
182
+ (/** @type {?} */ (_this)).webReturnObject.basket['products'].push(productObj);
183
+ }
184
+ }));
185
+ }
186
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: product mapping ended...");
187
+ return (/** @type {?} */ (this));
188
+ };
189
+ /**
190
+ * @template THIS
191
+ * @this {THIS}
192
+ * @return {THIS}
193
+ */
194
+ WebReturnSalesforceMapperBuilderClass.prototype.linePromotion = /**
195
+ * @template THIS
196
+ * @this {THIS}
197
+ * @return {THIS}
198
+ */
199
+ function () {
200
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping started...");
201
+ (/** @type {?} */ (this)).webReturnObject.basket.linePromotion = (/** @type {?} */ ([]));
202
+ /** @type {?} */
203
+ var linePromotionArray = (/** @type {?} */ ([]));
204
+ if ((/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0) {
205
+ (/** @type {?} */ (this)).orderDetails.product_items.forEach((/**
206
+ * @param {?} product
207
+ * @param {?} index
208
+ * @return {?}
209
+ */
210
+ function (product, index) {
211
+ product.item_id = (index + 1).toString();
212
+ if (product.price_adjustments && product.price_adjustments.length > 0) {
213
+ product.price_adjustments.forEach((/**
214
+ * @param {?} promotion
215
+ * @return {?}
216
+ */
217
+ function (promotion) {
218
+ /** @type {?} */
219
+ var linePromotionObj = (/** @type {?} */ ({}));
220
+ /** @type {?} */
221
+ var trigger = (/** @type {?} */ ({}));
222
+ trigger.itemLineId = product.item_id;
223
+ trigger.quantity = product.quantity ? product.quantity : 0;
224
+ linePromotionObj.trigger = (/** @type {?} */ ([]));
225
+ linePromotionObj.trigger.push(trigger);
226
+ linePromotionObj.itemLineId = index + 1;
227
+ linePromotionObj.promotionId = promotion.promotion_id ? promotion.promotion_id : '';
228
+ linePromotionObj.displayText = promotion.item_text ? promotion.item_text : '';
229
+ linePromotionObj.promotionType = promotion.applied_discount && promotion.applied_discount.type ? promotion.applied_discount.type : '';
230
+ linePromotionObj.promotionAmount = promotion.price ? Math.abs(promotion.price) : 0;
231
+ linePromotionObj.name = promotion.item_text ? promotion.item_text : '';
232
+ linePromotionObj.promotionInfo = promotion.item_text ? promotion.item_text : '';
233
+ linePromotionObj.promotionLinePrice = product.price_after_item_discount ? product.price_after_item_discount : 0;
234
+ linePromotionArray.push(linePromotionObj);
235
+ }));
236
+ }
237
+ }));
238
+ }
239
+ (/** @type {?} */ (this)).webReturnObject.basket.linePromotion = linePromotionArray;
240
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: linePromotion mapping ended...");
241
+ return (/** @type {?} */ (this));
242
+ };
243
+ /**
244
+ * @template THIS
245
+ * @this {THIS}
246
+ * @return {THIS}
247
+ */
248
+ WebReturnSalesforceMapperBuilderClass.prototype.transactionPromotion = /**
249
+ * @template THIS
250
+ * @this {THIS}
251
+ * @return {THIS}
252
+ */
253
+ function () {
254
+ var _this = this;
255
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping started...");
256
+ /** @type {?} */
257
+ var transactionPromotionArray = (/** @type {?} */ ([]));
258
+ (/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion = (/** @type {?} */ ([]));
259
+ if ((/** @type {?} */ (this)).orderDetails.order_price_adjustments && (/** @type {?} */ (this)).orderDetails.order_price_adjustments.length > 0) {
260
+ (/** @type {?} */ (this)).orderDetails.order_price_adjustments.forEach((/**
261
+ * @param {?} transactionPromotion
262
+ * @return {?}
263
+ */
264
+ function (transactionPromotion) {
265
+ /** @type {?} */
266
+ var transactionPromotionObj = (/** @type {?} */ ({}));
267
+ transactionPromotionObj.displayText = transactionPromotion.item_text ? transactionPromotion.item_text : '';
268
+ transactionPromotionObj.name = transactionPromotion.item_text ? transactionPromotion.item_text : '';
269
+ transactionPromotionObj.promotionAmount = transactionPromotion.price ? Math.abs(transactionPromotion.price) : 0;
270
+ transactionPromotionObj.promotionId = transactionPromotion.promotion_id ? transactionPromotion.promotion_id : '';
271
+ transactionPromotionObj.promotionInfo = transactionPromotion.item_text ? transactionPromotion.item_text : '';
272
+ transactionPromotionObj.promotionType = transactionPromotion.applied_discount && transactionPromotion.applied_discount.type ? transactionPromotion.applied_discount.type : '';
273
+ transactionPromotionObj.itemLineIds = (/** @type {?} */ (_this)).orderDetails.product_items.map((/**
274
+ * @param {?} product
275
+ * @param {?} index
276
+ * @return {?}
277
+ */
278
+ function (product, index) { return index + 1; }));
279
+ transactionPromotionArray.push(transactionPromotionObj);
280
+ }));
281
+ }
282
+ (/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion = transactionPromotionArray;
283
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: transactionPromotion mapping ended...");
284
+ return (/** @type {?} */ (this));
285
+ };
286
+ /**
287
+ * @template THIS
288
+ * @this {THIS}
289
+ * @return {THIS}
290
+ */
291
+ WebReturnSalesforceMapperBuilderClass.prototype.customer = /**
292
+ * @template THIS
293
+ * @this {THIS}
294
+ * @return {THIS}
295
+ */
296
+ function () {
297
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping started...");
298
+ /** @type {?} */
299
+ var customerObj = (/** @type {?} */ ({}));
300
+ customerObj.email = (/** @type {?} */ (this)).orderDetails.customer_info && (/** @type {?} */ (this)).orderDetails.customer_info.email ? (/** @type {?} */ (this)).orderDetails.customer_info.email : '';
301
+ customerObj.firstName = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.first_name ? (/** @type {?} */ (this)).orderDetails.billing_address.first_name : '';
302
+ customerObj.lastName = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.last_name ? (/** @type {?} */ (this)).orderDetails.billing_address.last_name : '';
303
+ /** @type {?} */
304
+ var shippingAddress = (/** @type {?} */ ([]));
305
+ (/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
306
+ * @param {?} shipment
307
+ * @return {?}
308
+ */
309
+ function (shipment) {
310
+ /** @type {?} */
311
+ var shippingAddressObj = (/** @type {?} */ ({}));
312
+ shippingAddressObj.id = shipment.shipping_address && shipment.shipping_address.id ? shipment.shipping_address.id : '';
313
+ shippingAddressObj.countryCode = shipment.shipping_address && shipment.shipping_address.country_code ? shipment.shipping_address.country_code : '';
314
+ shippingAddressObj.address1 = shipment.shipping_address && shipment.shipping_address.address1 ? shipment.shipping_address.address1 : '';
315
+ shippingAddressObj.city = shipment.shipping_address && shipment.shipping_address.city ? shipment.shipping_address.city : '';
316
+ shippingAddressObj.country = '';
317
+ shippingAddressObj.postCode = shipment.shipping_address && shipment.shipping_address.postal_code ? shipment.shipping_address.postal_code : '';
318
+ shippingAddress.push(shippingAddressObj);
319
+ }));
320
+ customerObj.shippingAddress = shippingAddress;
321
+ /** @type {?} */
322
+ var billingAddress = (/** @type {?} */ ([]));
323
+ /** @type {?} */
324
+ var billingAddressObj = (/** @type {?} */ ({}));
325
+ billingAddressObj.id = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.id ? (/** @type {?} */ (this)).orderDetails.billing_address.id : '';
326
+ billingAddressObj.countryCode = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.country_code ? (/** @type {?} */ (this)).orderDetails.billing_address.country_code : '';
327
+ billingAddressObj.address1 = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.address1 ? (/** @type {?} */ (this)).orderDetails.billing_address.address1 : '';
328
+ billingAddressObj.city = (/** @type {?} */ (this)).orderDetails.billing_address && (/** @type {?} */ (this)).orderDetails.billing_address.city ? (/** @type {?} */ (this)).orderDetails.billing_address.city : '';
329
+ billingAddressObj.country = '';
330
+ billingAddressObj.postCode = '';
331
+ billingAddress.push(billingAddressObj);
332
+ customerObj.billingAddress = billingAddress;
333
+ /** @type {?} */
334
+ var shipmentDetails = (/** @type {?} */ ([]));
335
+ (/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
336
+ * @param {?} shipment
337
+ * @return {?}
338
+ */
339
+ function (shipment) {
340
+ /** @type {?} */
341
+ var shipmentDetailsObj = (/** @type {?} */ ({}));
342
+ shipmentDetailsObj.id = shipment.shipment_id ? shipment.shipment_id : '';
343
+ shipmentDetailsObj.deliveryGroup = shipment.shipment_id ? shipment.shipment_id : '';
344
+ shipmentDetails.push(shipmentDetailsObj);
345
+ }));
346
+ customerObj.shipmentDetails = shipmentDetails;
347
+ (/** @type {?} */ (this)).webReturnObject.customer = customerObj;
348
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: customer mapping ended...");
349
+ return (/** @type {?} */ (this));
350
+ };
351
+ /**
352
+ * @template THIS
353
+ * @this {THIS}
354
+ * @return {THIS}
355
+ */
356
+ WebReturnSalesforceMapperBuilderClass.prototype.externalTransactionDetails = /**
357
+ * @template THIS
358
+ * @this {THIS}
359
+ * @return {THIS}
360
+ */
361
+ function () {
362
+ var _this = this;
363
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping started...");
364
+ /** @type {?} */
365
+ var externalTransactionDetails = (/** @type {?} */ ([]));
366
+ if ((/** @type {?} */ (this)).orderDetails.shipments && (/** @type {?} */ (this)).orderDetails.shipments.length > 0) {
367
+ (/** @type {?} */ (this)).orderDetails.shipments.forEach((/**
368
+ * @param {?} shipment
369
+ * @return {?}
370
+ */
371
+ function (shipment) {
372
+ /** @type {?} */
373
+ var externalTransactionDetailsObj = (/** @type {?} */ ({}));
374
+ /** @type {?} */
375
+ var transactionInfo = (/** @type {?} */ ({}));
376
+ externalTransactionDetailsObj.uniqueId = (/** @type {?} */ (_this)).orderDetails.order_no ? (/** @type {?} */ (_this)).orderDetails.order_no : '';
377
+ externalTransactionDetailsObj.providerType = PROVIDERS.SALESFORCE;
378
+ transactionInfo.shippingId = shipment.shipping_method && shipment.shipping_method.id ? shipment.shipping_method.id : '';
379
+ transactionInfo.externalShippingId = shipment.shipment_id ? shipment.shipment_id : '';
380
+ externalTransactionDetailsObj.details = transactionInfo;
381
+ externalTransactionDetails.push(externalTransactionDetailsObj);
382
+ }));
383
+ }
384
+ (/** @type {?} */ (this)).webReturnObject.externalTransactionDetails = externalTransactionDetails;
385
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: externalTransactionDetails mapping ended...");
386
+ return (/** @type {?} */ (this));
387
+ };
388
+ /**
389
+ * @template THIS
390
+ * @this {THIS}
391
+ * @return {THIS}
392
+ */
393
+ WebReturnSalesforceMapperBuilderClass.prototype.basketSummary = /**
394
+ * @template THIS
395
+ * @this {THIS}
396
+ * @return {THIS}
397
+ */
398
+ function () {
399
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping started...");
400
+ /** @type {?} */
401
+ var basketSummary = (/** @type {?} */ ({}));
402
+ /** @type {?} */
403
+ var basketSummaryWebOrder = (/** @type {?} */ ({}));
404
+ /** @type {?} */
405
+ var linePromotionTotal = (/** @type {?} */ (this)).webReturnObject.basket.linePromotion.map((/**
406
+ * @param {?} linePromotion
407
+ * @return {?}
408
+ */
409
+ function (linePromotion) { return linePromotion.promotionAmount; })).reduce((/**
410
+ * @param {?} accumulator
411
+ * @param {?} currentValue
412
+ * @return {?}
413
+ */
414
+ function (accumulator, currentValue) { return accumulator + currentValue; }), 0);
415
+ /** @type {?} */
416
+ var transactionPromotionTotal = (/** @type {?} */ (this)).webReturnObject.basket.transactionPromotion.map((/**
417
+ * @param {?} transactionPromotion
418
+ * @return {?}
419
+ */
420
+ function (transactionPromotion) { return transactionPromotion.promotionAmount; })).reduce((/**
421
+ * @param {?} accumulator
422
+ * @param {?} currentValue
423
+ * @return {?}
424
+ */
425
+ function (accumulator, currentValue) { return accumulator + currentValue; }), 0);
426
+ basketSummary.discountTotal = linePromotionTotal + transactionPromotionTotal;
427
+ basketSummary.VATTotal = (/** @type {?} */ (this)).orderDetails.tax_total ? (/** @type {?} */ (this)).orderDetails.tax_total : 0;
428
+ basketSummary.saleTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
429
+ basketSummary.basketTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
430
+ basketSummary.totalItems = (/** @type {?} */ (this)).orderDetails.product_items && (/** @type {?} */ (this)).orderDetails.product_items.length > 0 ? (/** @type {?} */ (this)).orderDetails.product_items.length : 0;
431
+ basketSummary.shippingTotal = (/** @type {?} */ (this)).orderDetails.shipping_total ? (/** @type {?} */ (this)).orderDetails.shipping_total : 0;
432
+ basketSummary.basketTotalWithShippingTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
433
+ basketSummaryWebOrder.shippingTotal = (/** @type {?} */ (this)).orderDetails.shipping_total ? (/** @type {?} */ (this)).orderDetails.shipping_total : 0;
434
+ basketSummaryWebOrder.basketTotalWithShippingTotal = (/** @type {?} */ (this)).orderDetails.order_total ? (/** @type {?} */ (this)).orderDetails.order_total : 0;
435
+ basketSummary.webOrder = basketSummaryWebOrder;
436
+ (/** @type {?} */ (this)).webReturnObject.basketSummary = basketSummary;
437
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: basketSummary mapping ended...");
438
+ return (/** @type {?} */ (this));
439
+ };
440
+ /**
441
+ * @template THIS
442
+ * @this {THIS}
443
+ * @param {?} deviceId
444
+ * @return {THIS}
445
+ */
446
+ WebReturnSalesforceMapperBuilderClass.prototype.deviceId = /**
447
+ * @template THIS
448
+ * @this {THIS}
449
+ * @param {?} deviceId
450
+ * @return {THIS}
451
+ */
452
+ function (deviceId) {
453
+ (/** @type {?} */ (this)).webReturnObject.deviceId = deviceId;
454
+ return (/** @type {?} */ (this));
455
+ };
456
+ /**
457
+ * @template THIS
458
+ * @this {THIS}
459
+ * @param {?} terminalId
460
+ * @return {THIS}
461
+ */
462
+ WebReturnSalesforceMapperBuilderClass.prototype.terminalId = /**
463
+ * @template THIS
464
+ * @this {THIS}
465
+ * @param {?} terminalId
466
+ * @return {THIS}
467
+ */
468
+ function (terminalId) {
469
+ (/** @type {?} */ (this)).webReturnObject.terminalId = terminalId;
470
+ return (/** @type {?} */ (this));
471
+ };
472
+ /**
473
+ * @template THIS
474
+ * @this {THIS}
475
+ * @param {?} orgCode
476
+ * @return {THIS}
477
+ */
478
+ WebReturnSalesforceMapperBuilderClass.prototype.orgCode = /**
479
+ * @template THIS
480
+ * @this {THIS}
481
+ * @param {?} orgCode
482
+ * @return {THIS}
483
+ */
484
+ function (orgCode) {
485
+ (/** @type {?} */ (this)).webReturnObject.orgCode = orgCode;
486
+ return (/** @type {?} */ (this));
487
+ };
488
+ /**
489
+ * @template THIS
490
+ * @this {THIS}
491
+ * @param {?} storeId
492
+ * @return {THIS}
493
+ */
494
+ WebReturnSalesforceMapperBuilderClass.prototype.storeId = /**
495
+ * @template THIS
496
+ * @this {THIS}
497
+ * @param {?} storeId
498
+ * @return {THIS}
499
+ */
500
+ function (storeId) {
501
+ (/** @type {?} */ (this)).webReturnObject.storeId = storeId;
502
+ return (/** @type {?} */ (this));
503
+ };
504
+ /**
505
+ * @template THIS
506
+ * @this {THIS}
507
+ * @param {?} storeNodeId
508
+ * @return {THIS}
509
+ */
510
+ WebReturnSalesforceMapperBuilderClass.prototype.storeNodeId = /**
511
+ * @template THIS
512
+ * @this {THIS}
513
+ * @param {?} storeNodeId
514
+ * @return {THIS}
515
+ */
516
+ function (storeNodeId) {
517
+ (/** @type {?} */ (this)).webReturnObject.storeNodeId = storeNodeId;
518
+ return (/** @type {?} */ (this));
519
+ };
520
+ /**
521
+ * @template THIS
522
+ * @this {THIS}
523
+ * @param {?} storeNodeStructure
524
+ * @return {THIS}
525
+ */
526
+ WebReturnSalesforceMapperBuilderClass.prototype.storeNodeStructure = /**
527
+ * @template THIS
528
+ * @this {THIS}
529
+ * @param {?} storeNodeStructure
530
+ * @return {THIS}
531
+ */
532
+ function (storeNodeStructure) {
533
+ (/** @type {?} */ (this)).webReturnObject.storeNodeStructure = storeNodeStructure;
534
+ return (/** @type {?} */ (this));
535
+ };
536
+ /**
537
+ * @template THIS
538
+ * @this {THIS}
539
+ * @param {?} docId
540
+ * @return {THIS}
541
+ */
542
+ WebReturnSalesforceMapperBuilderClass.prototype.docId = /**
543
+ * @template THIS
544
+ * @this {THIS}
545
+ * @param {?} docId
546
+ * @return {THIS}
547
+ */
548
+ function (docId) {
549
+ (/** @type {?} */ (this)).webReturnObject.id = docId;
550
+ return (/** @type {?} */ (this));
551
+ };
552
+ /**
553
+ * @template THIS
554
+ * @this {THIS}
555
+ * @param {?} userID
556
+ * @return {THIS}
557
+ */
558
+ WebReturnSalesforceMapperBuilderClass.prototype.updateUserID = /**
559
+ * @template THIS
560
+ * @this {THIS}
561
+ * @param {?} userID
562
+ * @return {THIS}
563
+ */
564
+ function (userID) {
565
+ (/** @type {?} */ (this)).webReturnObject.userId = userID;
566
+ return (/** @type {?} */ (this));
567
+ };
568
+ /**
569
+ * @template THIS
570
+ * @this {THIS}
571
+ * @param {?} name
572
+ * @return {THIS}
573
+ */
574
+ WebReturnSalesforceMapperBuilderClass.prototype.updateUserName = /**
575
+ * @template THIS
576
+ * @this {THIS}
577
+ * @param {?} name
578
+ * @return {THIS}
579
+ */
580
+ function (name) {
581
+ (/** @type {?} */ (this)).webReturnObject.userName = name;
582
+ return (/** @type {?} */ (this));
583
+ };
584
+ /**
585
+ * @return {?}
586
+ */
587
+ WebReturnSalesforceMapperBuilderClass.prototype.build = /**
588
+ * @return {?}
589
+ */
590
+ function () {
591
+ console.log("Mapper library: WebReturnSalesforceMapperBuilderClass: mapping done...");
592
+ return this.webReturnObject;
593
+ };
594
+ /**
595
+ * @param {?} date
596
+ * @return {?}
597
+ */
598
+ WebReturnSalesforceMapperBuilderClass.prototype.getUTCDateTime = /**
599
+ * @param {?} date
600
+ * @return {?}
601
+ */
602
+ function (date) {
603
+ if (date) {
604
+ return new Date(date).toISOString();
605
+ }
606
+ };
607
+ return WebReturnSalesforceMapperBuilderClass;
608
+ }());
609
+ export { WebReturnSalesforceMapperBuilderClass };
610
+ if (false) {
611
+ /**
612
+ * @type {?}
613
+ * @private
614
+ */
615
+ WebReturnSalesforceMapperBuilderClass.prototype.orderDetails;
616
+ /**
617
+ * @type {?}
618
+ * @private
619
+ */
620
+ WebReturnSalesforceMapperBuilderClass.prototype.webReturnObject;
621
+ }
622
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BwbWNyZXRhaWwvbWFwcGVyLWxpYnJhcnkvIiwic291cmNlcyI6WyJsaWIvV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlci5jbGFzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBcUYsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQWdDLFNBQVMsRUFBbUIsZ0JBQWdCLEVBQW1HLE1BQU0sd0JBQXdCLENBQUM7QUFFN1U7SUErQkksK0NBQVksWUFBMEI7UUE1QjlCLG9CQUFlLEdBQXdCO1lBQzNDLEVBQUUsRUFBRSxFQUFFO1lBQ04sT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxFQUFFO1lBQ2Ysa0JBQWtCLEVBQUUsRUFBRTtZQUN0QixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxFQUFFO1lBQ2QsZ0JBQWdCLEVBQUUsRUFBRTtZQUNwQixNQUFNLEVBQUUsS0FBSztZQUNiLE1BQU0sRUFBRSxFQUFFO1lBQ1YsYUFBYSxFQUFFLEVBQUU7WUFDakIsWUFBWSxFQUFFLEVBQUU7WUFDaEIsUUFBUSxFQUFFO2dCQUNOLEVBQUUsRUFBRSxFQUFFO2dCQUNOLEtBQUssRUFBRSxFQUFFO2dCQUNULFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxFQUFFO2dCQUNaLGNBQWMsRUFBRSxFQUFFO2dCQUNsQixlQUFlLEVBQUUsRUFBRTtnQkFDbkIsZUFBZSxFQUFFLEVBQUU7Z0JBQ25CLFNBQVMsRUFBRSxFQUFFO2dCQUNiLFFBQVEsRUFBRSxFQUFFO2dCQUNaLGtCQUFrQixFQUFFLEtBQUs7YUFDNUI7WUFDRCx5QkFBeUIsRUFBRSxtQkFBQSxFQUFFLEVBQTZCO1NBQzdELENBQUE7UUFHRyxJQUFJLFlBQVksRUFBRTtZQUNkLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1NBQ3BD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RSxFQUFhOztZQUNoQyxpQkFBaUIsR0FBRyxtQkFBQSxFQUFFLEVBQVc7UUFDckMsaUJBQWlCLENBQUMsRUFBRSxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksbUJBQUEsSUFBSSxFQUFBLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDN0ksaUJBQWlCLENBQUMsV0FBVyxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksbUJBQUEsSUFBSSxFQUFBLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUssaUJBQWlCLENBQUMsUUFBUSxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksbUJBQUEsSUFBSSxFQUFBLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0osaUJBQWlCLENBQUMsSUFBSSxHQUFHLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLElBQUksbUJBQUEsSUFBSSxFQUFBLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFBLElBQUksRUFBQSxDQUFDLFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbkosaUJBQWlCLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUMvQixpQkFBaUIsQ0FB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ZSxDQUFDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDO1FBQzdELE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUM7SUFDaEIsQ0FBQzs7Ozs7OztJQUVELHFEQUFLOzs7Ozs7SUFBTCxVQUFNLEtBQUs7UUFDUCxtQkFBQSxJQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUNoQyxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7Ozs7SUFFRCw0REFBWTs7Ozs7O0lBQVosVUFBYSxNQUFjO1FBQ3ZCLG1CQUFBLElBQUksRUFBQSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JDLE9BQU8sbUJBQUEsSUFBSSxFQUFBLENBQUM7SUFDaEIsQ0FBQzs7Ozs7OztJQUVELDhEQUFjOzs7Ozs7SUFBZCxVQUFlLElBQUk7UUFDZixtQkFBQSxJQUFJLEVBQUEsQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQyxPQUFPLG1CQUFBLElBQUksRUFBQSxDQUFDO0lBQ2hCLENBQUM7Ozs7SUFFRCxxREFBSzs7O0lBQUw7UUFDSSxPQUFPLENBQUMsR0FBRyxDQUFDLHdFQUF3RSxDQUFDLENBQUM7UUFDdEYsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQ2hDLENBQUM7Ozs7O0lBRUQsOERBQWM7Ozs7SUFBZCxVQUFlLElBQUk7UUFDZixJQUFJLElBQUksRUFBRTtZQUNOLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdkM7SUFDTCxDQUFDO0lBQ0wsNENBQUM7QUFBRCxDQUFDLEFBL1RELElBK1RDOzs7Ozs7O0lBN1RHLDZEQUFtQzs7Ozs7SUFDbkMsZ0VBMEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWRkcmVzcywgQmFza2V0U3VtbWFyeSwgQmFza2V0U3VtbWFyeURldGFpbHMsIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHMsIEN1c3RvbWVyLCBERUxJVkVSWV9NRVRIT0RTLCBJTklUSUFUSU5HX01PRFVMRSwgTGluZVByb21vdGlvbnMsIE9yZGVyRGV0YWlscywgUFJPVklERVJTLCBTaGlwbWVudERldGFpbHMsIFRSQU5TQUNUSU9OX1RZUEUsIFRyYW5zYWN0aW9uRG9jdW1lbnQsIFRyYW5zYWN0aW9uSW5mbywgVHJhbnNhY3Rpb25Qcm9tb3Rpb24sIFRyaWdnZXIsIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzIH0gZnJvbSBcIi4vbWFwcGVyLWxpYnJhcnkubW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzIHtcclxuXHJcbiAgICBwcml2YXRlIG9yZGVyRGV0YWlsczogT3JkZXJEZXRhaWxzO1xyXG4gICAgcHJpdmF0ZSB3ZWJSZXR1cm5PYmplY3Q6IFRyYW5zYWN0aW9uRG9jdW1lbnQgPSB7XHJcbiAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgIG9yZ0NvZGU6IFwiXCIsXHJcbiAgICAgICAgc3RvcmVJZDogXCJcIixcclxuICAgICAgICBzdG9yZU5vZGVJZDogXCJcIixcclxuICAgICAgICBzdG9yZU5vZGVTdHJ1Y3R1cmU6IFwiXCIsXHJcbiAgICAgICAgZGV2aWNlSWQ6IFwiXCIsXHJcbiAgICAgICAgdGVybWluYWxJZDogXCJcIixcclxuICAgICAgICBpbml0aWF0aW5nTW9kdWxlOiBcIlwiLFxyXG4gICAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgICAgYmFza2V0OiB7fSxcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5OiB7fSxcclxuICAgICAgICBiYXNlQ3VycmVuY3k6IFwiXCIsXHJcbiAgICAgICAgY3VzdG9tZXI6IHtcclxuICAgICAgICAgICAgaWQ6ICcnLFxyXG4gICAgICAgICAgICBlbWFpbDogJycsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJycsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnJyxcclxuICAgICAgICAgICAgYmlsbGluZ0FkZHJlc3M6IFtdLFxyXG4gICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3M6IFtdLFxyXG4gICAgICAgICAgICBzaGlwbWVudERldGFpbHM6IFtdLFxyXG4gICAgICAgICAgICB0ZWxlcGhvbmU6ICcnLFxyXG4gICAgICAgICAgICBwb3N0Q29kZTogJycsXHJcbiAgICAgICAgICAgIG5vQ3VzdG9tZXJTZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHM6IHt9IGFzIEN1cnJlbnRUcmFuc2FjdGlvbkRldGFpbHNcclxuICAgIH1cclxuXHJcbiAgICBjb25zdHJ1Y3RvcihvcmRlckRldGFpbHM6IE9yZGVyRGV0YWlscykge1xyXG4gICAgICAgIGlmIChvcmRlckRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMgPSBvcmRlckRldGFpbHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHdlYlJldHVybkNvbW1vbk1hcHBlcigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiB3ZWJSZXR1cm5Db21tb25NYXBwZXIgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsndHlwZSddID0gVFJBTlNBQ1RJT05fVFlQRS5XRUJfUkVUVVJOUztcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdFsnZGF0ZXRpbWUnXSA9IHRoaXMuZ2V0VVRDRGF0ZVRpbWUodGhpcy5vcmRlckRldGFpbHMubGFzdF9tb2RpZmllZCk7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFzZUN1cnJlbmN5ID0gdGhpcy5vcmRlckRldGFpbHMuY3VycmVuY3k7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3Quc3Vic2lkaWFyeUlkID0gJzEnO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4cG9ydCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuaW5pdGlhdGluZ01vZHVsZSA9IElOSVRJQVRJTkdfTU9EVUxFLkVCQVNLRVQ7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuY3JlYXRlZEF0ID0gdGhpcy5nZXRVVENEYXRlVGltZSh0aGlzLm9yZGVyRGV0YWlscy5jcmVhdGlvbl9kYXRlKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51cGRhdGVkQXQgPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmxhc3RfbW9kaWZpZWQpO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnRyYW5zQ29tcGxldGVkQXQgPSB0aGlzLmdldFVUQ0RhdGVUaW1lKHRoaXMub3JkZXJEZXRhaWxzLmxhc3RfbW9kaWZpZWQpO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0WydleHRlcm5hbFRyYW5zYWN0aW9uSWQnXSA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX25vO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHdlYlJldHVybkNvbW1vbk1hcHBlciBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvLyBleHBvcnQoc3RhdHVzLCBkZXRhaWxzKSB7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXhwb3J0IG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgIC8vICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBzdGF0dXM6XCIsIHN0YXR1cyk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZGV0YWlsczpcIiwgSlNPTi5zdHJpbmdpZnkoZGV0YWlscykpO1xyXG4gICAgLy8gICAgIGlmIChzdGF0dXMgJiYgZGV0YWlscyAmJiBkZXRhaWxzLnByb3ZpZGVycyAmJiBkZXRhaWxzLnByb3ZpZGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAvLyAgICAgICAgIGRldGFpbHMucHJvdmlkZXJzLmZvckVhY2goXHJcbiAgICAvLyAgICAgICAgICAgICBwcm92aWRlck9iaiA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyT2JqLnByb3ZpZGVyICYmIHByb3ZpZGVyT2JqLnByb3ZpZGVyID09PSBQUk9WSURFUlMuU0FMRVNGT1JDRSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4cG9ydCA9IGZhbHNlO1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5leHBvcnQgPSBmYWxzZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXhwb3J0IG1hcHBpbmcgZW5kLi4uXCIpXHJcbiAgICAvLyAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgZ2V0RGVsaXZlcnlNZXRob2QoKSB7XHJcbiAgICAgICAgaWYodGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzICYmIHRoaXMub3JkZXJEZXRhaWxzLnNoaXBtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNoaXBUb1N0b3JlU2hpcG1lbnQgPSB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMuZmluZChzaGlwbWVudCA9PiBzaGlwbWVudC5jX2Zyb21TdG9yZUlkKTtcclxuICAgICAgICAgICAgaWYoc2hpcFRvU3RvcmVTaGlwbWVudCkgcmV0dXJuIERFTElWRVJZX01FVEhPRFMuU0hJUF9UT19TVE9SRTtcclxuICAgICAgICAgICAgZWxzZSByZXR1cm4gREVMSVZFUllfTUVUSE9EUy5ERUxJVkVSWTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb2R1Y3QoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogcHJvZHVjdCBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wydwcm9kdWN0cyddID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChwcm9kdWN0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb2R1Y3RPYmogPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0Lml0ZW1fdGV4dCA/IHByb2R1Y3QuaXRlbV90ZXh0IDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNLVTogcHJvZHVjdC5wcm9kdWN0X2lkID8gcHJvZHVjdC5wcm9kdWN0X2lkIDogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1YW50aXR5OiBwcm9kdWN0LnF1YW50aXR5ID8gcHJvZHVjdC5xdWFudGl0eSA6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnVuZGVkUXVhbnRpdHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0LmJhc2VfcHJpY2UgPyBwcm9kdWN0LmJhc2VfcHJpY2UgOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtTGluZUlkOiBpbmRleCArIDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5TWV0aG9kOiB0aGlzLmdldERlbGl2ZXJ5TWV0aG9kKCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxMaW5lUHJpY2U6IHByb2R1Y3QucHJpY2UgPyBwcm9kdWN0LnByaWNlIDogMFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvZHVjdCAmJiBwcm9kdWN0LnByaWNlICE9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0Wydwcm9kdWN0cyddLnB1c2gocHJvZHVjdE9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBwcm9kdWN0IG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbGluZVByb21vdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBsaW5lUHJvbW90aW9uIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQubGluZVByb21vdGlvbiA9IFtdIGFzIExpbmVQcm9tb3Rpb25zW107XHJcbiAgICAgICAgbGV0IGxpbmVQcm9tb3Rpb25BcnJheSA9IFtdIGFzIExpbmVQcm9tb3Rpb25zW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMgJiYgdGhpcy5vcmRlckRldGFpbHMucHJvZHVjdF9pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgIChwcm9kdWN0LCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3QuaXRlbV9pZCA9IChpbmRleCArIDEpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMgJiYgcHJvZHVjdC5wcmljZV9hZGp1c3RtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QucHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcm9tb3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZVByb21vdGlvbk9iaiA9IHt9IGFzIExpbmVQcm9tb3Rpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0cmlnZ2VyID0ge30gYXMgVHJpZ2dlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyLml0ZW1MaW5lSWQgPSBwcm9kdWN0Lml0ZW1faWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlci5xdWFudGl0eSA9IHByb2R1Y3QucXVhbnRpdHkgPyBwcm9kdWN0LnF1YW50aXR5IDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnRyaWdnZXIgPSBbXSBhcyBUcmlnZ2VyW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai50cmlnZ2VyLnB1c2godHJpZ2dlcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmouaXRlbUxpbmVJZCA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbklkID0gcHJvbW90aW9uLnByb21vdGlvbl9pZCA/IHByb21vdGlvbi5wcm9tb3Rpb25faWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLmRpc3BsYXlUZXh0ID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvblR5cGUgPSBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiBwcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudC50eXBlID8gcHJvbW90aW9uLmFwcGxpZWRfZGlzY291bnQudHlwZSA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uQW1vdW50ID0gcHJvbW90aW9uLnByaWNlID8gTWF0aC5hYnMocHJvbW90aW9uLnByaWNlKSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVByb21vdGlvbk9iai5uYW1lID0gcHJvbW90aW9uLml0ZW1fdGV4dCA/IHByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSBwcm9tb3Rpb24uaXRlbV90ZXh0ID8gcHJvbW90aW9uLml0ZW1fdGV4dCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVQcm9tb3Rpb25PYmoucHJvbW90aW9uTGluZVByaWNlID0gcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50ID8gcHJvZHVjdC5wcmljZV9hZnRlcl9pdGVtX2Rpc2NvdW50IDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lUHJvbW90aW9uQXJyYXkucHVzaChsaW5lUHJvbW90aW9uT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC5saW5lUHJvbW90aW9uID0gbGluZVByb21vdGlvbkFycmF5O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGxpbmVQcm9tb3Rpb24gbWFwcGluZyBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2FjdGlvblByb21vdGlvbigpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiB0cmFuc2FjdGlvblByb21vdGlvbiBtYXBwaW5nIHN0YXJ0ZWQuLi5cIik7XHJcbiAgICAgICAgbGV0IHRyYW5zYWN0aW9uUHJvbW90aW9uQXJyYXkgPSBbXSBhcyBUcmFuc2FjdGlvblByb21vdGlvbltdO1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmJhc2tldC50cmFuc2FjdGlvblByb21vdGlvbiA9IFtdIGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uW107XHJcbiAgICAgICAgaWYgKHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzICYmIHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3ByaWNlX2FkanVzdG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMub3JkZXJfcHJpY2VfYWRqdXN0bWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgICAgICh0cmFuc2FjdGlvblByb21vdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0cmFuc2FjdGlvblByb21vdGlvbk9iaiA9IHt9IGFzIFRyYW5zYWN0aW9uUHJvbW90aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLmRpc3BsYXlUZXh0ID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0ID8gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uaXRlbV90ZXh0IDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmoubmFtZSA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1fdGV4dCA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLml0ZW1fdGV4dCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkFtb3VudCA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByaWNlID8gTWF0aC5hYnModHJhbnNhY3Rpb25Qcm9tb3Rpb24ucHJpY2UpIDogMDtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5wcm9tb3Rpb25JZCA9IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbl9pZCA/IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbl9pZCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uUHJvbW90aW9uT2JqLnByb21vdGlvbkluZm8gPSB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgPyB0cmFuc2FjdGlvblByb21vdGlvbi5pdGVtX3RleHQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5wcm9tb3Rpb25UeXBlID0gdHJhbnNhY3Rpb25Qcm9tb3Rpb24uYXBwbGllZF9kaXNjb3VudCAmJiB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50LnR5cGUgPyB0cmFuc2FjdGlvblByb21vdGlvbi5hcHBsaWVkX2Rpc2NvdW50LnR5cGUgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbk9iai5pdGVtTGluZUlkcyA9IHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubWFwKChwcm9kdWN0LCBpbmRleCkgPT4gaW5kZXggKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5LnB1c2godHJhbnNhY3Rpb25Qcm9tb3Rpb25PYmopO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24gPSB0cmFuc2FjdGlvblByb21vdGlvbkFycmF5O1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IHRyYW5zYWN0aW9uUHJvbW90aW9uIG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgY3VzdG9tZXIoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogY3VzdG9tZXIgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIGxldCBjdXN0b21lck9iaiA9IHt9IGFzIEN1c3RvbWVyO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLmVtYWlsID0gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mbyAmJiB0aGlzLm9yZGVyRGV0YWlscy5jdXN0b21lcl9pbmZvLmVtYWlsID8gdGhpcy5vcmRlckRldGFpbHMuY3VzdG9tZXJfaW5mby5lbWFpbCA6ICcnO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLmZpcnN0TmFtZSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuZmlyc3RfbmFtZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5maXJzdF9uYW1lIDogJyc7XHJcbiAgICAgICAgY3VzdG9tZXJPYmoubGFzdE5hbWUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmxhc3RfbmFtZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5sYXN0X25hbWUgOiAnJztcclxuXHJcbiAgICAgICAgbGV0IHNoaXBwaW5nQWRkcmVzcyA9IFtdIGFzIEFkZHJlc3NbXTtcclxuICAgICAgICB0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMuZm9yRWFjaChcclxuICAgICAgICAgICAgc2hpcG1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNoaXBwaW5nQWRkcmVzc09iaiA9IHt9IGFzIEFkZHJlc3M7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouaWQgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmlkIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuY291bnRyeV9jb2RlID8gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5hZGRyZXNzMSA9IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MgJiYgc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcy5hZGRyZXNzMSA/IHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MuYWRkcmVzczEgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jaXR5ID0gc2hpcG1lbnQuc2hpcHBpbmdfYWRkcmVzcyAmJiBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLmNpdHkgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBwaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3NPYmoucG9zdENvZGUgPSBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzICYmIHNoaXBtZW50LnNoaXBwaW5nX2FkZHJlc3MucG9zdGFsX2NvZGUgPyBzaGlwbWVudC5zaGlwcGluZ19hZGRyZXNzLnBvc3RhbF9jb2RlIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwcGluZ0FkZHJlc3MucHVzaChzaGlwcGluZ0FkZHJlc3NPYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBwaW5nQWRkcmVzcyA9IHNoaXBwaW5nQWRkcmVzcztcclxuXHJcbiAgICAgICAgbGV0IGJpbGxpbmdBZGRyZXNzID0gW10gYXMgQWRkcmVzc1tdO1xyXG4gICAgICAgIGxldCBiaWxsaW5nQWRkcmVzc09iaiA9IHt9IGFzIEFkZHJlc3M7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouaWQgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmlkIDogJyc7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmouY291bnRyeUNvZGUgPSB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MgJiYgdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNvdW50cnlfY29kZSA/IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jb3VudHJ5X2NvZGUgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5hZGRyZXNzMSA9IHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcyAmJiB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuYWRkcmVzczEgPyB0aGlzLm9yZGVyRGV0YWlscy5iaWxsaW5nX2FkZHJlc3MuYWRkcmVzczEgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jaXR5ID0gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzICYmIHRoaXMub3JkZXJEZXRhaWxzLmJpbGxpbmdfYWRkcmVzcy5jaXR5ID8gdGhpcy5vcmRlckRldGFpbHMuYmlsbGluZ19hZGRyZXNzLmNpdHkgOiAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzc09iai5jb3VudHJ5ID0gJyc7XHJcbiAgICAgICAgYmlsbGluZ0FkZHJlc3NPYmoucG9zdENvZGUgPSAnJztcclxuICAgICAgICBiaWxsaW5nQWRkcmVzcy5wdXNoKGJpbGxpbmdBZGRyZXNzT2JqKTtcclxuICAgICAgICBjdXN0b21lck9iai5iaWxsaW5nQWRkcmVzcyA9IGJpbGxpbmdBZGRyZXNzO1xyXG5cclxuICAgICAgICBsZXQgc2hpcG1lbnREZXRhaWxzID0gW10gYXMgU2hpcG1lbnREZXRhaWxzW107XHJcbiAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXHJcbiAgICAgICAgICAgIHNoaXBtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBzaGlwbWVudERldGFpbHNPYmogPSB7fSBhcyBTaGlwbWVudERldGFpbHM7XHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudERldGFpbHNPYmouaWQgPSBzaGlwbWVudC5zaGlwbWVudF9pZCA/IHNoaXBtZW50LnNoaXBtZW50X2lkIDogJyc7XHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudERldGFpbHNPYmouZGVsaXZlcnlHcm91cCA9IHNoaXBtZW50LnNoaXBtZW50X2lkID8gc2hpcG1lbnQuc2hpcG1lbnRfaWQgOiAnJztcclxuICAgICAgICAgICAgICAgIHNoaXBtZW50RGV0YWlscy5wdXNoKHNoaXBtZW50RGV0YWlsc09iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGN1c3RvbWVyT2JqLnNoaXBtZW50RGV0YWlscyA9IHNoaXBtZW50RGV0YWlscztcclxuXHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QuY3VzdG9tZXIgPSBjdXN0b21lck9iajtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBjdXN0b21lciBtYXBwaW5nIGVuZGVkLi4uXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzIG1hcHBpbmcgc3RhcnRlZC4uLlwiKTtcclxuICAgICAgICBsZXQgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMgPSBbXSBhcyBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc1tdO1xyXG4gICAgICAgIGlmICh0aGlzLm9yZGVyRGV0YWlscy5zaGlwbWVudHMgJiYgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcmRlckRldGFpbHMuc2hpcG1lbnRzLmZvckVhY2goXHJcbiAgICAgICAgICAgICAgICBzaGlwbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqID0ge30gYXMgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRyYW5zYWN0aW9uSW5mbyA9IHt9IGFzIFRyYW5zYWN0aW9uSW5mbztcclxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iai51bmlxdWVJZCA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX25vID8gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfbm8gOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iai5wcm92aWRlclR5cGUgPSBQUk9WSURFUlMuU0FMRVNGT1JDRTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uc2hpcHBpbmdJZCA9IHNoaXBtZW50LnNoaXBwaW5nX21ldGhvZCAmJiBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgPyBzaGlwbWVudC5zaGlwcGluZ19tZXRob2QuaWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbkluZm8uZXh0ZXJuYWxTaGlwcGluZ0lkID0gc2hpcG1lbnQuc2hpcG1lbnRfaWQgPyBzaGlwbWVudC5zaGlwbWVudF9pZCA6ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzT2JqLmRldGFpbHMgPSB0cmFuc2FjdGlvbkluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMucHVzaChleHRlcm5hbFRyYW5zYWN0aW9uRGV0YWlsc09iaik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmV4dGVybmFsVHJhbnNhY3Rpb25EZXRhaWxzID0gZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHM7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogZXh0ZXJuYWxUcmFuc2FjdGlvbkRldGFpbHMgbWFwcGluZyBlbmRlZC4uLlwiKTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBiYXNrZXRTdW1tYXJ5KCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiTWFwcGVyIGxpYnJhcnk6IFdlYlJldHVyblNhbGVzZm9yY2VNYXBwZXJCdWlsZGVyQ2xhc3M6IGJhc2tldFN1bW1hcnkgbWFwcGluZyBzdGFydGVkLi4uXCIpO1xyXG4gICAgICAgIGxldCBiYXNrZXRTdW1tYXJ5ID0ge30gYXMgQmFza2V0U3VtbWFyeTtcclxuICAgICAgICBsZXQgYmFza2V0U3VtbWFyeVdlYk9yZGVyID0ge30gYXMgQmFza2V0U3VtbWFyeURldGFpbHM7XHJcbiAgICAgICAgY29uc3QgbGluZVByb21vdGlvblRvdGFsID0gdGhpcy53ZWJSZXR1cm5PYmplY3QuYmFza2V0LmxpbmVQcm9tb3Rpb24ubWFwKGxpbmVQcm9tb3Rpb24gPT4gbGluZVByb21vdGlvbi5wcm9tb3Rpb25BbW91bnQpLnJlZHVjZSgoYWNjdW11bGF0b3IsIGN1cnJlbnRWYWx1ZSkgPT4gYWNjdW11bGF0b3IgKyBjdXJyZW50VmFsdWUsIDApO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zYWN0aW9uUHJvbW90aW9uVG90YWwgPSB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXQudHJhbnNhY3Rpb25Qcm9tb3Rpb24ubWFwKHRyYW5zYWN0aW9uUHJvbW90aW9uID0+IHRyYW5zYWN0aW9uUHJvbW90aW9uLnByb21vdGlvbkFtb3VudCkucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZSwgMCk7XHJcbiAgICAgICAgYmFza2V0U3VtbWFyeS5kaXNjb3VudFRvdGFsID0gbGluZVByb21vdGlvblRvdGFsICsgdHJhbnNhY3Rpb25Qcm9tb3Rpb25Ub3RhbDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LlZBVFRvdGFsID0gdGhpcy5vcmRlckRldGFpbHMudGF4X3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMudGF4X3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnNhbGVUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgOiAwO1xyXG4gICAgICAgIGJhc2tldFN1bW1hcnkuYmFza2V0VG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnRvdGFsSXRlbXMgPSB0aGlzLm9yZGVyRGV0YWlscy5wcm9kdWN0X2l0ZW1zICYmIHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoID4gMCA/IHRoaXMub3JkZXJEZXRhaWxzLnByb2R1Y3RfaXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LnNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5zaGlwcGluZ190b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5LmJhc2tldFRvdGFsV2l0aFNoaXBwaW5nVG90YWwgPSB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA/IHRoaXMub3JkZXJEZXRhaWxzLm9yZGVyX3RvdGFsIDogMDtcclxuICAgICAgICBiYXNrZXRTdW1tYXJ5V2ViT3JkZXIuc2hpcHBpbmdUb3RhbCA9IHRoaXMub3JkZXJEZXRhaWxzLnNoaXBwaW5nX3RvdGFsID8gdGhpcy5vcmRlckRldGFpbHMuc2hpcHBpbmdfdG90YWwgOiAwO1xyXG4gICAgICAgIGJhc2tldFN1bW1hcnlXZWJPcmRlci5iYXNrZXRUb3RhbFdpdGhTaGlwcGluZ1RvdGFsID0gdGhpcy5vcmRlckRldGFpbHMub3JkZXJfdG90YWwgPyB0aGlzLm9yZGVyRGV0YWlscy5vcmRlcl90b3RhbCA6IDA7XHJcbiAgICAgICAgYmFza2V0U3VtbWFyeS53ZWJPcmRlciA9IGJhc2tldFN1bW1hcnlXZWJPcmRlcjtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5iYXNrZXRTdW1tYXJ5ID0gYmFza2V0U3VtbWFyeTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIk1hcHBlciBsaWJyYXJ5OiBXZWJSZXR1cm5TYWxlc2ZvcmNlTWFwcGVyQnVpbGRlckNsYXNzOiBiYXNrZXRTdW1tYXJ5IG1hcHBpbmcgZW5kZWQuLi5cIik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgZGV2aWNlSWQoZGV2aWNlSWQpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5kZXZpY2VJZCA9IGRldmljZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHRlcm1pbmFsSWQodGVybWluYWxJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnRlcm1pbmFsSWQgPSB0ZXJtaW5hbElkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG9yZ0NvZGUob3JnQ29kZSkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0Lm9yZ0NvZGUgPSBvcmdDb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlSWQoc3RvcmVJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlSWQgPSBzdG9yZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlTm9kZUlkKHN0b3JlTm9kZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC5zdG9yZU5vZGVJZCA9IHN0b3JlTm9kZUlkO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlTm9kZVN0cnVjdHVyZShzdG9yZU5vZGVTdHJ1Y3R1cmU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LnN0b3JlTm9kZVN0cnVjdHVyZSA9IHN0b3JlTm9kZVN0cnVjdHVyZTtcclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBkb2NJZChkb2NJZCkge1xyXG4gICAgICAgIHRoaXMud2ViUmV0dXJuT2JqZWN0LmlkID0gZG9jSWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVXNlcklEKHVzZXJJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy53ZWJSZXR1cm5PYmplY3QudXNlcklkID0gdXNlcklEO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVVzZXJOYW1lKG5hbWUpIHtcclxuICAgICAgICB0aGlzLndlYlJldHVybk9iamVjdC51c2VyTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGQoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJNYXBwZXIgbGlicmFyeTogV2ViUmV0dXJuU2FsZXNmb3JjZU1hcHBlckJ1aWxkZXJDbGFzczogbWFwcGluZyBkb25lLi4uXCIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLndlYlJldHVybk9iamVjdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVVENEYXRlVGltZShkYXRlKSB7XHJcbiAgICAgICAgaWYgKGRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGUpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==