ng-easycommerce 0.0.654 → 0.0.656-beta.1
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/README.md +6 -0
- package/bundles/ng-easycommerce.umd.js +90 -27
- package/bundles/ng-easycommerce.umd.js.map +1 -1
- package/bundles/ng-easycommerce.umd.min.js +1 -1
- package/bundles/ng-easycommerce.umd.min.js.map +1 -1
- package/esm2015/lib/core.consts.js +2 -1
- package/esm2015/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +8 -1
- package/esm2015/lib/ec-component/cart-ec/cart-ec.component.js +5 -4
- package/esm2015/lib/ec-component/header-ec/header-ec.component.js +1 -1
- package/esm2015/lib/ec-component/product-detail-ec/product-detail-ec.component.js +27 -2
- package/esm2015/lib/ec-component/product-ec/product-ec.component.js +1 -2
- package/esm2015/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -4
- package/esm2015/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
- package/esm2015/lib/services/cart.service.js +27 -12
- package/esm5/lib/core.consts.js +2 -1
- package/esm5/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.js +8 -1
- package/esm5/lib/ec-component/cart-ec/cart-ec.component.js +5 -4
- package/esm5/lib/ec-component/header-ec/header-ec.component.js +1 -1
- package/esm5/lib/ec-component/product-detail-ec/product-detail-ec.component.js +45 -2
- package/esm5/lib/ec-component/product-ec/product-ec.component.js +1 -2
- package/esm5/lib/ec-component/sidebar-ec/sidebar-ec.component.js +5 -4
- package/esm5/lib/ec-component/widgets-ec/paypal-express-ec/paypal-express-ec.component.js +1 -3
- package/esm5/lib/services/cart.service.js +27 -12
- package/fesm2015/ng-easycommerce.js +67 -22
- package/fesm2015/ng-easycommerce.js.map +1 -1
- package/fesm5/ng-easycommerce.js +91 -28
- package/fesm5/ng-easycommerce.js.map +1 -1
- package/lib/core.consts.d.ts +1 -0
- package/lib/ec-component/auth-ec/select-channel-ec/select-channel-ec.component.d.ts +1 -0
- package/lib/ec-component/header-ec/header-ec.component.d.ts +1 -1
- package/lib/ec-component/product-detail-ec/product-detail-ec.component.d.ts +2 -0
- package/lib/services/cart.service.d.ts +2 -2
- package/ng-easycommerce.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -120,12 +120,22 @@ let CartService = class CartService {
|
|
|
120
120
|
this.updateLocalCart();
|
|
121
121
|
this.requestInProcess.next(false);
|
|
122
122
|
};
|
|
123
|
-
this.updateCartItemQuantity = (variant_id, quantity) => {
|
|
124
|
-
|
|
123
|
+
this.updateCartItemQuantity = (variant_id, quantity, comments) => {
|
|
124
|
+
const normalizedComments = comments !== undefined ? ((comments !== null && comments !== void 0 ? comments : '')).trim() : undefined;
|
|
125
|
+
const newItems = this.items.map(it => {
|
|
126
|
+
if (it.variant_id !== variant_id)
|
|
127
|
+
return it;
|
|
128
|
+
const updated = Object.assign(Object.assign({}, it), { quantity: Number(quantity) });
|
|
129
|
+
if (normalizedComments !== undefined) {
|
|
130
|
+
updated.comments = normalizedComments;
|
|
131
|
+
}
|
|
132
|
+
return updated;
|
|
133
|
+
});
|
|
134
|
+
this.items = newItems;
|
|
125
135
|
this.cartItemsSubject.next(this.items);
|
|
126
136
|
this.requestInProcess.next(false);
|
|
127
137
|
this.updateLocalCart();
|
|
128
|
-
this.toastrService.show('product-updated', { quantity
|
|
138
|
+
this.toastrService.show('product-updated', { quantity });
|
|
129
139
|
};
|
|
130
140
|
this.appendToCart = (cart) => {
|
|
131
141
|
this.updateCartObj(cart);
|
|
@@ -146,9 +156,9 @@ let CartService = class CartService {
|
|
|
146
156
|
// this.googleAnalytics.removeFromCart(product);
|
|
147
157
|
this.analyticsService.callEvent('remove_from_cart', Object.assign(Object.assign({}, product), { currency: this.consts.currency.code }));
|
|
148
158
|
};
|
|
149
|
-
this.addIfAllreadyExists = (product, variant_id, quantityAdd = 1) => this.items.find((item, index) => {
|
|
159
|
+
this.addIfAllreadyExists = (product, variant_id, quantityAdd = 1, comments) => this.items.find((item, index) => {
|
|
150
160
|
if (item.product.id == product.id && item.variant_id == variant_id) {
|
|
151
|
-
this.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd);
|
|
161
|
+
this.updateItemQuantity(item, this.findItem(product.id).quantity + quantityAdd, comments);
|
|
152
162
|
return true;
|
|
153
163
|
}
|
|
154
164
|
return false;
|
|
@@ -200,7 +210,7 @@ let CartService = class CartService {
|
|
|
200
210
|
return;
|
|
201
211
|
}
|
|
202
212
|
this.requestInProcess.next(true);
|
|
203
|
-
let added = this.addIfAllreadyExists(product, variant_id, quantity);
|
|
213
|
+
let added = this.addIfAllreadyExists(product, variant_id, quantity, comments);
|
|
204
214
|
if (!added) {
|
|
205
215
|
const payload = {
|
|
206
216
|
productCode: product.id,
|
|
@@ -240,13 +250,13 @@ let CartService = class CartService {
|
|
|
240
250
|
!added && this.connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id, id: id || '', order_item_id: order_item_id || '', lot_quantity: lot_quantity || '', unit_price: unit_price || '', unit_total: unit_total || '', ajustement_total: ajustement_total || '', total_lot: total_lot || '', lot_status: lot_status || '', date_request: date_request || '', notes: notes || '', shipping_address_id: shipping_address_id || '', shipping_address_name: shipping_address_name || '', action: action || 'newlot' })
|
|
241
251
|
.subscribe(res => this.appendToCart(res), err => this.handleError(err));
|
|
242
252
|
};
|
|
243
|
-
this.addToCartPromise = (product, quantity, variant_id) => __awaiter(this, void 0, void 0, function* () {
|
|
253
|
+
this.addToCartPromise = (product, quantity, variant_id, comments) => __awaiter(this, void 0, void 0, function* () {
|
|
244
254
|
if (!this.authService.isAbleToBuy()) {
|
|
245
255
|
this.toastrService.show('must-select-customer');
|
|
246
256
|
return;
|
|
247
257
|
}
|
|
248
258
|
this.requestInProcess.next(true);
|
|
249
|
-
let added = this.addIfAllreadyExists(product, variant_id, quantity);
|
|
259
|
+
let added = this.addIfAllreadyExists(product, variant_id, quantity, comments);
|
|
250
260
|
if (!added) {
|
|
251
261
|
let result = yield (this.connection.post(this.addItemApi(), { productCode: product.id, quantity: quantity, variantCode: variant_id }).toPromise());
|
|
252
262
|
if (!result || result.error)
|
|
@@ -288,13 +298,18 @@ let CartService = class CartService {
|
|
|
288
298
|
items = items.filter(itemParam => !this.items.find(item => itemParam.variantCode == item.variant_id));
|
|
289
299
|
return [...items, ...paramsMerge];
|
|
290
300
|
};
|
|
291
|
-
this.updateItemQuantity = (item, quantity) => {
|
|
301
|
+
this.updateItemQuantity = (item, quantity, comments) => {
|
|
292
302
|
if (this.validateQuantity(item, quantity) && (this.validatePriceAndCredits(item, quantity))) {
|
|
293
303
|
this.requestInProcess.next(true);
|
|
304
|
+
const payload = { quantity: Number(quantity) };
|
|
305
|
+
if (comments !== undefined) {
|
|
306
|
+
const cleaned = ((comments !== null && comments !== void 0 ? comments : '')).trim();
|
|
307
|
+
payload.comments = cleaned;
|
|
308
|
+
}
|
|
294
309
|
this.connection
|
|
295
|
-
.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)),
|
|
310
|
+
.put(this.updateItemQuantityApi(this.findItemByIdVariant(item.variant_id)), payload)
|
|
296
311
|
.pipe(finalize(() => this.requestInProcess.next(false)))
|
|
297
|
-
.subscribe(res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity)), err => this.handleError(err));
|
|
312
|
+
.subscribe(res => this.updateCartObj(res) && this.updateCartItemQuantity(item.variant_id, Number(quantity), comments), err => this.handleError(err));
|
|
298
313
|
}
|
|
299
314
|
};
|
|
300
315
|
this.validateQuantity = (item, quantity) => {
|
|
@@ -604,4 +619,4 @@ CartService = __decorate([
|
|
|
604
619
|
})
|
|
605
620
|
], CartService);
|
|
606
621
|
export { CartService };
|
|
607
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3pDLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFrRHBCLFlBQW9CLFVBQTZCLEVBQVUsYUFBMkIsRUFBVSxNQUFpQixFQUNyRyxXQUF3QixFQUFVLFVBQStCLEVBQVUsZ0JBQWtDLEVBQzdHLG9CQUEwQyxFQUMxQyxNQUFjO1FBSE4sZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDckcsZ0JBQVcs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LEVBQUUsTUFBTTtLQUNyQixDQUFDO0dBQ1csV0FBVyxDQXF0QnZCO1NBcnRCWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XHJcbmltcG9ydCB7IENhcnRJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0LWl0ZW0nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ291cG9uSSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY291cG9uJztcclxuaW1wb3J0IHsgT3JkZXJVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XHJcbmltcG9ydCB7IENhcnRBZmZvcmRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0L2NhcnQtYWZmb3JkYWJsZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGNhcnRJdGVtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gICAgcHJpdmF0ZSBjb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIGNhcnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIHJlcXVlc3RJblByb2Nlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICAgIHByaXZhdGUgcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHJcbiAgICBwcml2YXRlIGJhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kPzogYm9vbGVhbjtcclxuICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U/OiBib29sZWFuO1xyXG4gICAgICAgIGNyZWRpdEFtb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgc2hvd01heD86IGJvb2xlYW47XHJcbiAgICAgICAgc2hvd1ByaWNlPzogYm9vbGVhbjtcclxuICAgICAgICByZW1haW5pbmdDcmVkaXRzPzogbnVtYmVyO1xyXG4gICAgICAgIGFwcGx5TWF4T3JkZXJzPzogYm9vbGVhbjtcclxuICAgICAgICBtYXhPcmRlcnM/OiBudW1iZXI7XHJcbiAgICB9IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgaXRlbXMgPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGUgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBsb2dnZWRfaW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGF2ZV90b191cGRhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjYXJ0X2Jhc2VVcmwgPSAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0SXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRJdGVtQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBkZWxldGVJdGVtQXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBjb3Vwb25BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvY291cG9uJztcclxuICAgIHB1YmxpYyBhZGRyZXNzQm9va0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9hZGRyZXNzLWJvb2snO1xyXG4gICAgcHVibGljIHRheGVzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzL3RheCc7XHJcblxyXG4gICAgcHVibGljIGNhcnRfdG9rZW47XHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcbiAgICBwdWJsaWMgY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGxvYWRpbmcgPSB0aGlzLnJlcXVlc3RJblByb2Nlc3MuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgY2FydCA9IHRoaXMuY2FydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IHRoaXMucHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBiYWxhbmNlQ3VzdG9tZXIkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSwgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnQnKSkgfHwgW107XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnRfdG9rZW4nKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkSW4uc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmdldENhcnQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENhcnQyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkcmVzc0Jvb2sgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5hZGRyZXNzQm9va0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzPy5sZW5ndGggJiYgcmVzLm1hcChhZGRyZXMgPT4geyByZXR1cm4gYWRkcmVzICYmIHsgLi4uYWRkcmVzLCBzZWxlY3RlZDogYWRkcmVzLmRlZmF1bHQgfSB9KSB8fCBudWxsKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcHVibGljIGdldFRheGVzID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRheGVzQXBpKCksIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KS5zdWJzY3JpYmUocmVzID0+IHJlcylcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnQgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuICYmIHRoaXMuaXRlbXMubGVuZ3RoID49IDEpICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5VG9rZW4gPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeUN1c3RvbWVyID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHByaXZhdGVcclxuICAgICAqICBDQVJUIENSVUQgU0VSVkVSJ1MgU1lOQ1JPTklaRURcclxuICAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUNhcnQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0X3Rva2VuJywgdGhpcy5jYXJ0X3Rva2VuKTtcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuICAgICAgICAvKiBsZXQgbG9jYWxlRnJvbVN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTE9DQUxFJylcclxuICAgICAgICBjb25zb2xlLmxvZyhsb2NhbGVGcm9tU3RvcmFnZSlcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZUZyb21TdG9yYWdlID8gbG9jYWxlRnJvbVN0b3JhZ2UgOiByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgcmVzcG9uc2UubG9jYWxlID0gdGhpcy5sb2NhbGUgKi9cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBDYXJ0SXRlbVtdKSA9PiB7XHJcbiAgICAgICAgLy9yZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcclxuICAgICAgICAgICAgaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RlcENhcnQgPSAocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzLml0ZW1zLmxlbmd0aCA+IDAgJiYgcmVzLml0ZW1zLmZvckVhY2goXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gIXRoaXMuaXNJdGVtSW5Mb2NhbChpdGVtLmlkKSAmJiB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hZGRBbGxUb0NhcnQoXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgaXRlbSA9PiAhcmVzLml0ZW1zLnNvbWUoZXh0ZXJuYWxfaXRlbSA9PiBleHRlcm5hbF9pdGVtLmlkID09IGl0ZW0uaXRlbV9pZClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1zID0gKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbVF1YW50aXR5ID0gKHZhcmlhbnRfaWQsIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgbGV0IG5ld1F1YW50aXR5ID0gdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbS52YXJpYW50X2lkID09IHZhcmlhbnRfaWQpLnF1YW50aXR5ID0gcXVhbnRpdHk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtdXBkYXRlZCcsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwZW5kVG9DYXJ0ID0gKGNhcnQpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMudHJhbnNmb3JtSXRlbXMoY2FydC5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy5jb3VudCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxvY2FsQ2FydCgpO1xyXG4gICAgICAgIC8vICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0LWFkZGVkJyk7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVDYXJ0SXRlbSA9IChjYXJ0LCBwcm9kdWN0LCB0b2FzdCA9IHRydWUpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmooY2FydCwgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKHRoaXMuaXRlbXMuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IHByb2R1Y3QuaXRlbV9pZCksIDEpO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgICAgIHRvYXN0ICYmIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0b2FzdCAmJiB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1yZW1vdmVkJyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICAvLyB0aGlzLmdvb2dsZUFuYWx5dGljcy5yZW1vdmVGcm9tQ2FydChwcm9kdWN0KTtcclxuICAgICAgICB0aGlzLmFuYWx5dGljc1NlcnZpY2UuY2FsbEV2ZW50KCdyZW1vdmVfZnJvbV9jYXJ0JywgeyAuLi5wcm9kdWN0LCBjdXJyZW5jeTogdGhpcy5jb25zdHMuY3VycmVuY3kuY29kZSB9KVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZElmQWxscmVhZHlFeGlzdHMgPSAocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHlBZGQgPSAxKSA9PlxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlTG9jYWxDYXJ0ID0gKCkgPT4ge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgSlNPTi5zdHJpbmdpZnkodGhpcy5pdGVtcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzZXRDYXJ0ID0gKG5leHQ/KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKG51bGwpO1xyXG4gICAgICAgIHRoaXMuY2FydF90b2tlbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0JywgXCJbXVwiKTtcclxuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnY2FydF90b2tlbicpO1xyXG4gICAgICAgIG5leHQgJiYgbmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydE9iaiA9IChjYXJ0LCBlbWl0RXZlbnQgPSB0cnVlKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0U3ViamVjdC5uZXh0KGNhcnQpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlQmFsYW5jZUF0dHJpYnV0ZXMoY2FydD8uYmFsYW5jZUN1c3RvbWVyLCBjYXJ0Py50b3RhbHM/LnRvdGFsKTtcclxuICAgICAgICBlbWl0RXZlbnQgJiYgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgnYWRkX3RvX2NhcnQnLCBjYXJ0KTtcclxuICAgICAgICB0aGlzLnByb21vdGlvbnNTdWJqZWN0Lm5leHQodGhpcy5vcmRlclV0aWxzLmdldFByb21vdGlvbnMoY2FydCwgdHJ1ZSkpO1xyXG5cclxuICAgICAgICBjYXJ0LmNvdXBvbkNvZGVcclxuICAgICAgICAgICAgPyB0aGlzLmZvcm1hdENvdXBvbihjYXJ0KVxyXG4gICAgICAgICAgICA6IHRoaXMuY291cG9uU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNJdGVtSW5Mb2NhbCA9IChpdGVtX2lkKSA9PiB0aGlzLml0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLml0ZW1faWQgPT0gaXRlbV9pZCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHB1YmxpY1xyXG4gICAgICogIENBUlQgQ1JVRFxyXG4gICAgICovXHJcblxyXG4gICAgYWRkVG9DYXJ0ID0gKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQsIGNvbW1lbnRzPzogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucmVxdWVzdEluUHJvY2Vzcy5nZXRWYWx1ZSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuICAgICAgICBjb25zdCBhcHBseU1heE9yZGVycyA9IGJhbGFuY2U/LmFwcGx5TWF4T3JkZXJzID8/IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IG1heE9yZGVycyA9IGJhbGFuY2U/Lm1heE9yZGVycyA/PyBJbmZpbml0eTtcclxuXHJcbiAgICAgICAgaWYgKGFwcGx5TWF4T3JkZXJzICYmIChtYXhPcmRlcnMgPD0gMCB8fCBtYXhPcmRlcnMgPT09IG51bGwpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXgtb3JkZXJzLXJlYWNoZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghYWRkZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdENvZGU6IHByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICBxdWFudGl0eTogcXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICB2YXJpYW50Q29kZTogdmFyaWFudF9pZCxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmIChjb21tZW50cykge1xyXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5jb21tZW50cyA9IGNvbW1lbnRzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgcGF5bG9hZClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBsYSByZXNwdWVzdGEgSFRUUCBleGl0b3NhIChjw7NkaWdvIDIwMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1hbmVqYXIgZWwgZXJyb3IgZGUgbGEgbGxhbWFkYSBIVFRQIChjw7NkaWdvIDUwMCB1IG90cm8gZXJyb3IpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3RhdHVzID09PSA1MDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEPDs2RpZ28gZGUgZXJyb3IgNTAwICh0aW1lb3V0KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0hhIG9jdXJyaWRvIHVuIGVycm9yIGFsIGFncmVnYXIgYWwgY2Fycml0by4gVnVlbHZhIGEgaW50ZW50YXJsby4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE90cm8gY8OzZGlnbyBkZSBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ0Vycm9yIGluZXNwZXJhZG8uIFZ1ZWx2YSBhIGludGVudGFybG8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9Mb3QgPSAocHJvZHVjdDogUHJvZHVjdCwgcXVhbnRpdHk6IG51bWJlciwgdmFyaWFudF9pZCwgaWQ/LCBvcmRlcl9pdGVtX2lkPywgbG90X3F1YW50aXR5PywgdW5pdF9wcmljZT8sIHVuaXRfdG90YWw/LCBhanVzdGVtZW50X3RvdGFsPywgdG90YWxfbG90PywgbG90X3N0YXR1cz8sIGRhdGVfcmVxdWVzdD8sIG5vdGVzPywgc2hpcHBpbmdfYWRkcmVzc19pZD8sIHNoaXBwaW5nX2FkZHJlc3NfbmFtZT8sIGFjdGlvbj8pID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBhZGRlZCA9ICcnO1xyXG4gICAgICAgICFhZGRlZCAmJiB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCwgaWQ6IGlkIHx8ICcnLCBvcmRlcl9pdGVtX2lkOiBvcmRlcl9pdGVtX2lkIHx8ICcnLCBsb3RfcXVhbnRpdHk6IGxvdF9xdWFudGl0eSB8fCAnJywgdW5pdF9wcmljZTogdW5pdF9wcmljZSB8fCAnJywgdW5pdF90b3RhbDogdW5pdF90b3RhbCB8fCAnJywgYWp1c3RlbWVudF90b3RhbDogYWp1c3RlbWVudF90b3RhbCB8fCAnJywgdG90YWxfbG90OiB0b3RhbF9sb3QgfHwgJycsIGxvdF9zdGF0dXM6IGxvdF9zdGF0dXMgfHwgJycsIGRhdGVfcmVxdWVzdDogZGF0ZV9yZXF1ZXN0IHx8ICcnLCBub3Rlczogbm90ZXMgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfaWQ6IHNoaXBwaW5nX2FkZHJlc3NfaWQgfHwgJycsIHNoaXBwaW5nX2FkZHJlc3NfbmFtZTogc2hpcHBpbmdfYWRkcmVzc19uYW1lIHx8ICcnLCBhY3Rpb246IGFjdGlvbiB8fCAnbmV3bG90JyB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHRoaXMuYXBwZW5kVG9DYXJ0KHJlcyksXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkVG9DYXJ0UHJvbWlzZSA9IGFzeW5jIChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICBsZXQgYWRkZWQgPSB0aGlzLmFkZElmQWxscmVhZHlFeGlzdHMocHJvZHVjdCwgdmFyaWFudF9pZCwgcXVhbnRpdHkpO1xyXG4gICAgICAgIGlmICghYWRkZWQpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGF3YWl0ICh0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCwgcXVhbnRpdHk6IHF1YW50aXR5LCB2YXJpYW50Q29kZTogdmFyaWFudF9pZCB9KS50b1Byb21pc2UoKSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5lcnJvcikgdGhpcy5oYW5kbGVFcnJvcihyZXN1bHQuZXJyb3IpO1xyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kVG9DYXJ0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogZmFsc2UgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGVycm9yOiB0cnVlIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgYWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgaXRlbXM6IHRoaXMubWVyZ2VJdGVtc0FkZEFsbFRvQ2FydChpdGVtcykgfTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLnBvc3QodGhpcy5hZGRBbGxJdGVtc0FwaSgpLCBwYXJhbXMpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgICAgICAgcmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzLmNhcnQpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1zKHRoaXMudHJhbnNmb3JtSXRlbXMocmVzLmNhcnQuaXRlbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXMuY2FydF9yZXNwb25zZS5zdGF0dXMgPT0gJ3N1Y2Nlc3MnICYmIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFJlcGVhdE9yZGVyVG9DYXJ0KGl0ZW1zOiBhbnlbXSk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnY2FydC1ub3QtZW1wdHknKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpdGVtc1RvQWRkID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgcHJvZHVjdENvZGU6IGl0ZW0ucHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uY29kZVxyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgaWYgKGl0ZW1zVG9BZGQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCduby1wcm9kdWN0cy10by1hZGQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgICAgICBpdGVtczogaXRlbXNUb0FkZFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnZmFpbHVyZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSByZXMuZXJyb3I/LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxzKy9nLCAnXycpIHx8ICd1bmtub3duX2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdyhlcnJvck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtc1Jlc3BvbnNlID0gcmVzPy5pdGVtc19yZXNwb25zZSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhcnRJdGVtcyA9IHJlcz8uY2FydD8uaXRlbXMgfHwgW107XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0T2ZTdG9ja0l0ZW1zID0gaXRlbXNSZXNwb25zZS5maWx0ZXIoaXRlbSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uc3RhdHVzID09PSAnZmFpbHVyZScgJiZcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVycm9ycy5zb21lKGVycm9yID0+IGVycm9yLmNvZGUgPT09ICdvdXRfb2Zfc3RvY2snKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY2FydEl0ZW1zLmxlbmd0aCA9PT0gMCAmJiBvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdhbGwtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChvdXRPZlN0b2NrSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdzb21lLXByb2R1Y3RzLW91dC1vZi1zdG9jaycpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhjYXJ0SXRlbXMpKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdHMtYWRkZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jYXJ0J10pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbWVyZ2VJdGVtc0FkZEFsbFRvQ2FydCA9IChpdGVtczogYW55W10pID0+IHtcclxuICAgICAgICBsZXQgcGFyYW1zTWVyZ2UgPSBbXVxyXG4gICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgbGV0IGl0ZW1JbnRlcm5vID0gaXRlbXMuZmluZChpdGVtUGFyYW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZClcclxuICAgICAgICAgICAgcGFyYW1zTWVyZ2UucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiBpdGVtLnZhcmlhbnRfaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW1JbnRlcm5vICYmIGl0ZW1JbnRlcm5vLnF1YW50aXR5IHx8IGl0ZW0ucXVhbnRpdHlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIGl0ZW1zID0gaXRlbXMuZmlsdGVyKGl0ZW1QYXJhbSA9PiAhdGhpcy5pdGVtcy5maW5kKGl0ZW0gPT4gaXRlbVBhcmFtLnZhcmlhbnRDb2RlID09IGl0ZW0udmFyaWFudF9pZCkpXHJcblxyXG4gICAgICAgIHJldHVybiBbLi4uaXRlbXMsIC4uLnBhcmFtc01lcmdlXVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUl0ZW1RdWFudGl0eSA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy52YWxpZGF0ZVF1YW50aXR5KGl0ZW0sIHF1YW50aXR5KSAmJiAodGhpcy52YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyhpdGVtLCBxdWFudGl0eSkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIC5wdXQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHsgJ3F1YW50aXR5JzogTnVtYmVyKHF1YW50aXR5KSB9XHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSkpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgIHJlcyA9PiB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzKSAmJiB0aGlzLnVwZGF0ZUNhcnRJdGVtUXVhbnRpdHkoaXRlbS52YXJpYW50X2lkLCBOdW1iZXIocXVhbnRpdHkpKSxcclxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB2YWxpZGF0ZVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICYmIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSAlIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5O1xyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxRdWFudGl0eSA9IHF1YW50aXR5IC0gaXRlbS5xdWFudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxRdWFudGl0eSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbENvc3QgPSB1bml0UHJpY2UgKiBhZGRpdGlvbmFsUXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlPy50b3RhbHM/LnRvdGFsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIFNpIE5PIHB1ZWRlIGV4Y2VkZXIgc2FsZG8geSBlbCB0b3RhbCBzdXBlcmEgZWwgY3JlZGl0bywgYmxvcXVlYXJcclxuICAgICAgICBpZiAoIWJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlICYmIHRvdGFsID4gYmFsYW5jZS5jcmVkaXRBbW91bnQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgY2FsY3VsYXRlU3RvY2tDb3VudHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5zdG9jayA8IGl0ZW0ucXVhbnRpdHkgKyBxdWFudGl0eSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNhcnRJdGVtID0gKGl0ZW0sIHRvYXN0ID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBpZF9idXNjYWRvID0gdGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZClcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICAvLyAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLCBxdWFudGl0eTogMCwgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCwgaWQ6ICcnLCBvcmRlcl9pdGVtX2lkOiBpdGVtLml0ZW1faWQsIGxvdF9xdWFudGl0eTogJycsIHVuaXRfcHJpY2U6ICcnLCB1bml0X3RvdGFsOiAnJywgYWp1c3RlbWVudF90b3RhbDogJycsIHRvdGFsX2xvdDogJycsIGxvdF9zdGF0dXM6ICcnLCBkYXRlX3JlcXVlc3Q6ICcnLCBub3RlczogICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiAnJywgYWN0aW9uOiAgJ2RlbGV0ZW9yZGVyaXRlbSd9KVxyXG4gICAgICAgIC8vICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVzID0+IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCksXHJcbiAgICAgICAgLy8gICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgLy8gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmRlbGV0ZUl0ZW1BcGkoaWRfYnVzY2FkbykpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHsgdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTsgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpOyB9LFxyXG4gICAgICAgICAgICBlcnIgPT4geyB0aGlzLmhhbmRsZUVycm9yKGVycik7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJDYXJ0KCkge1xyXG4gICAgICAgIC8vc29sdWNpb24gcHJvdmlzYW9yaWFcclxuICAgICAgICBsZXQgaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICB3aGlsZSAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW1zLnBvcCgpLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDYXJ0KCkge1xyXG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIGFuZCByZXNldGluZy4uLlwiKVxyXG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIpXHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IHsgZXJyb3I6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb3VudEZyb21JdGVtSW5DYXJ0ID0gKGNvZGVWYXJpYW50KTogbnVtYmVyID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSBjb2RlVmFyaWFudCk/LnF1YW50aXR5IHx8IDA7XHJcblxyXG4gICAgZmluZEl0ZW1CeUlkVmFyaWFudCA9ICh2YXJpYW50X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkuaXRlbV9pZFxyXG5cclxuICAgIGZpbmRJdGVtID0gKHByb2R1Y3RfaWQpID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKTtcclxuXHJcbiAgICAvKiogREFUQSBGT1IgT1RIRVIgU0VSVklDRVMgKi9cclxuICAgIGdldENhcnRUb2tlbiA9ICgpID0+IHRoaXMuY2FydF90b2tlbjtcclxuXHJcbiAgICBnZXRMb2NhbGUgPSAoKSA9PiB0aGlzLmxvY2FsZTtcclxuXHJcbiAgICBnZXRUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udG90YWwpKTtcclxuXHJcbiAgICBnZXRDb3VudENhcnRJdGVtcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnRJdGVtcy5waXBlKG1hcCgoY2FydEl0ZW1zKSA9PiBjYXJ0SXRlbXM/Lmxlbmd0aCkpO1xyXG5cclxuICAgIGdldFRheGVzQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xyXG5cclxuICAgIGdldFN1YlRvdGFsQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5zdWJ0b3RhbCkpO1xyXG5cclxuICAgIHRvRGVjaW1hbCA9ICh0b3RhbCkgPT4gKHRvdGFsIC0gTWF0aC5mbG9vcih0b3RhbCkgPT0gMCkgPyB0b3RhbCAvIDEwMCA6IHRvdGFsXHJcblxyXG4gICAgZ2V0RGlzY291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKHByb2R1Y3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnNhbGVwcmljZSAqIGN1cnIucXVhbnRpdHk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICBsZXQgc3VidG90YWwgPSB0aGlzLml0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLnByb2R1Y3QucHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN1YnRvdGFsIC0gdG90YWw7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENvdXBvbiA9IGFzeW5jIChjb2RlKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogY29kZSB9KS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvciB8fCByZXN1bHQuZXJyb3JzKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2ludmFsaWQtY291cG9uJyB9O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzdWx0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgbWVzc2FnZTogJ29rJyB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ291cG9uID0gYXN5bmMgKCkgPT4gdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKS5waXBlKG1hcChyZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcywgZmFsc2UpKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgZm9ybWF0Q291cG9uID0gKGNhcnQpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVudF9jb3Vwb24gPSB0aGlzLmNvdXBvblN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IGNvdXBvbjogQ291cG9uSSA9IHsgY29kZTogY2FydC5jb3Vwb25Db2RlIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcclxuICAgICAgICAgICAgY291cG9uID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY291cG9uLFxyXG4gICAgICAgICAgICAgICAgYW1vdW50OiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLmFtb3VudC5jdXJyZW50KSB8fCAwLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAoY291cG9uICE9IGN1cnJlbnRfY291cG9uKSAmJiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUhhdmVUb1VwZGF0ZSA9ICh2YWx1ZSkgPT4gdGhpcy5oYXZlX3RvX3VwZGF0ZSA9IHZhbHVlO1xyXG5cclxuICAgIHJlYWR5Rm9yQ2hlY2tvdXQgPSAoc3VjY2Vzc0NhbGxiYWNrPzogRnVuY3Rpb24sIGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbik6IENhcnRBZmZvcmRhYmxlID0+IHtcclxuICAgICAgICBsZXQgY2FydCA9IHRoaXMuY2FydFN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IENhcnRBZmZvcmRhYmxlID0geyBvazogdHJ1ZSB9O1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCB0aGlzLmNoYW5uZWxDb25maWcubWluaW11bVF1YW50aXR5UHVyY2hhc2VJdGVtcykge1xyXG4gICAgICAgICAgICByZXN1bHQub2sgPSBmYWxzZTsgcmVzdWx0LnJlYXNvbnMucHVzaCh7IG1lc3NhZ2U6ICdub3QtZW5vdWdodC1pdGVtcycgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcnQudG90YWxzLnRvdGFsIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1QdXJjaGFzZUFtb3VudCkge1xyXG4gICAgICAgICAgICByZXN1bHQub2sgPSBmYWxzZTsgcmVzdWx0LnJlYXNvbnMucHVzaCh7IG1lc3NhZ2U6ICdub3QtZW5vdWdodC1hbW91bnQnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgfHwgZXJyb3JDYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXN1bHQub2tcclxuICAgICAgICAgICAgICAgID8gc3VjY2Vzc0NhbGxiYWNrICYmIHN1Y2Nlc3NDYWxsYmFjaygpXHJcbiAgICAgICAgICAgICAgICA6IGVycm9yQ2FsbGJhY2sgJiYgZXJyb3JDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUl0ZW1zT25FcnJvciA9IChpdGVtc1dpdGhFcnJvcjogYW55W10sIGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zV2l0aEVycm9yKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLml0ZW1zKTtcclxuICAgICAgICBsZXQgaXRlbXNVcGRhdGVkID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtV2l0aEVycm9yID0gaXRlbXNXaXRoRXJyb3IuZmluZChmYWlsZWRJdGVtID0+IGl0ZW0uaXRlbV9pZCA9PSBmYWlsZWRJdGVtLmlkKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1XaXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBjb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbXNVcGRhdGVkKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyhpdGVtc1VwZGF0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRDYXJ0QnlUb2tlbiA9IGFzeW5jICh0b2tlbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gdG9rZW5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRDYXJ0QnlUb2tlbigpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFVUSUxTXHJcbiAgICAgKi9cclxuXHJcbiAgICB0cmFuc2Zvcm1JdGVtcyA9IChzZXJ2ZXJfaXRlbSkgPT4gc2VydmVyX2l0ZW0ubWFwKFxyXG4gICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdDogaXRlbS5wcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudF9pZDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxyXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICBjb21tZW50czogaXRlbS5jb21tZW50cyB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogaXRlbS50b3RhbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5Ly8gPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2VsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAvLyB9LCAxMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICApXHJcblxyXG5cclxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgZ2V0Q2xpZW50VGF4ZXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8uY2xpZW50VGF4ZXMgOiAwKSk7XHJcblxyXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFiYWxhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJhbGFuY2VEYXRhID0ge1xyXG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kLFxyXG4gICAgICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxyXG4gICAgICAgICAgICBjcmVkaXRBbW91bnQ6IGJhbGFuY2UuY3JlZGl0QW1vdW50LFxyXG4gICAgICAgICAgICBzaG93TWF4OiBiYWxhbmNlLnNob3dNYXgsXHJcbiAgICAgICAgICAgIHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXHJcbiAgICAgICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6XHJcbiAgICAgICAgICAgICAgICBiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICAgICAgICAgIGFwcGx5TWF4T3JkZXJzOiBiYWxhbmNlLmFwcGx5TWF4T3JkZXJzLFxyXG4gICAgICAgICAgICBtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|
|
622
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctZWFzeWNvbW1lcmNlLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2NhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7O0FBS3pDLElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVc7SUFrRHBCLFlBQW9CLFVBQTZCLEVBQVUsYUFBMkIsRUFBVSxNQUFpQixFQUNyRyxXQUF3QixFQUFVLFVBQStCLEVBQVUsZ0JBQWtDLEVBQzdHLG9CQUEwQyxFQUMxQyxNQUFjO1FBSE4sZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBYztRQUFVLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDckcsZ0JBQVcs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QUFBLENBQUM7UUFFL0IsTUFBTSxXQUFXLEdBQUc7WUFDaEIscUJBQXFCLEVBQUUsT0FBTyxDQUFDLHFCQUFxQjtZQUNwRCxrQkFBa0IsRUFBRSxPQUFPLENBQUMsa0JBQWtCO1lBQzlDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtZQUNsQyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87WUFDeEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLGdCQUFnQixFQUNaLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxJQUFJLFdBQVcsSUFBSSxJQUFJLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxXQUFXO2dCQUN0RixDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxXQUFXO2dCQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNYLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztZQUN0QyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7U0FDL0IsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUVKLENBQUE7O1lBcnJCbUMsaUJBQWlCO1lBQXlCLFlBQVk7WUFBa0IsU0FBUztZQUN4RixXQUFXO1lBQXNCLG1CQUFtQjtZQUE0QixnQkFBZ0I7WUFDdkYsb0JBQW9CO1lBQ2xDLE1BQU07OztBQXJEakIsV0FBVztJQUh2QixVQUFVLENBQUM7UUFDUixVQUFVLEVBQUUsTUFBTTtLQUNyQixDQUFDO0dBQ1csV0FBVyxDQXV1QnZCO1NBdnVCWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaW5hbGl6ZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcHJvZHVjdCc7XHJcbmltcG9ydCB7IENhcnRJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0LWl0ZW0nO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDb25uZWN0aW9uU2VydmljZSB9IGZyb20gJy4uL2FwaS9jb25uZWN0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25zdGFudHMgfSBmcm9tICcuLi9jb3JlLmNvbnN0cyc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi91dGlscy90b2FzdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ291cG9uSSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY291cG9uJztcclxuaW1wb3J0IHsgT3JkZXJVdGlsaXR5U2VydmljZSB9IGZyb20gJy4uL3V0aWxzL29yZGVyLXV0aWwuc2VydmljZSc7XHJcbmltcG9ydCB7IENoZWNrb3V0RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2hlY2tvdXQtZGF0YSc7XHJcbmltcG9ydCB7IENhcnRBZmZvcmRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jYXJ0L2NhcnQtYWZmb3JkYWJsZSc7XHJcbmltcG9ydCB7IENoYW5uZWxDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9jaGFubmVsLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQW5hbHl0aWNzU2VydmljZSB9IGZyb20gJy4uLy4uL3B1YmxpYy1hcGknO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYXJ0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGNhcnRJdGVtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDYXJ0SXRlbVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xyXG4gICAgcHJpdmF0ZSBjb3Vwb25TdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIGNhcnRTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3QobnVsbCk7XHJcbiAgICBwcml2YXRlIHJlcXVlc3RJblByb2Nlc3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcclxuICAgIHByaXZhdGUgcHJvbW90aW9uc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxDaGVja291dERhdGFbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcclxuXHJcbiAgICBwcml2YXRlIGJhbGFuY2VDdXN0b21lclN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDx7XHJcbiAgICAgICAgYWxsb3dBbnlQYXltZW50TWV0aG9kPzogYm9vbGVhbjtcclxuICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U/OiBib29sZWFuO1xyXG4gICAgICAgIGNyZWRpdEFtb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgICAgICAgc2hvd01heD86IGJvb2xlYW47XHJcbiAgICAgICAgc2hvd1ByaWNlPzogYm9vbGVhbjtcclxuICAgICAgICByZW1haW5pbmdDcmVkaXRzPzogbnVtYmVyO1xyXG4gICAgICAgIGFwcGx5TWF4T3JkZXJzPzogYm9vbGVhbjtcclxuICAgICAgICBtYXhPcmRlcnM/OiBudW1iZXI7XHJcbiAgICB9IHwgbnVsbD4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgaXRlbXMgPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIGNvdW50OiBudW1iZXIgPSAwO1xyXG4gICAgcHJpdmF0ZSBsb2NhbGUgPSBcIlwiO1xyXG4gICAgcHJpdmF0ZSBsb2dnZWRfaW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgaGF2ZV90b191cGRhdGUgPSB0cnVlO1xyXG4gICAgcHVibGljIGNoYW5uZWxDb25maWc6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBjYXJ0X2Jhc2VVcmwgPSAnc2hvcC1hcGkvJyArIHRoaXMuY29uc3RzLmdldENoYW5uZWwoKSArICcvY2FydHMnO1xyXG5cclxuICAgIHB1YmxpYyBjYXJ0SXRlbXNBcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRJdGVtQXBpID0gKCkgPT4gdGhpcy5jYXJ0X2Jhc2VVcmwgKyAnLycgKyB0aGlzLmNhcnRfdG9rZW4gKyAnL2l0ZW1zJyArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBhZGRBbGxJdGVtc0FwaSA9ICgpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9tdWx0aXBsZS1pdGVtcycgKyAnP2xvY2FsZT0nICsgdGhpcy5jb25zdHMuZ2V0TG9jYWxlKCk7XHJcbiAgICBwdWJsaWMgdXBkYXRlSXRlbVF1YW50aXR5QXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBkZWxldGVJdGVtQXBpID0gKGl0ZW1faWQpID0+IHRoaXMuY2FydF9iYXNlVXJsICsgJy8nICsgdGhpcy5jYXJ0X3Rva2VuICsgJy9pdGVtcy8nICsgaXRlbV9pZCArICc/bG9jYWxlPScgKyB0aGlzLmNvbnN0cy5nZXRMb2NhbGUoKTtcclxuICAgIHB1YmxpYyBjb3Vwb25BcGkgPSAoKSA9PiB0aGlzLmNhcnRfYmFzZVVybCArICcvJyArIHRoaXMuY2FydF90b2tlbiArICcvY291cG9uJztcclxuICAgIHB1YmxpYyBhZGRyZXNzQm9va0FwaSA9ICgpID0+ICdzaG9wLWFwaS8nICsgdGhpcy5jb25zdHMuZ2V0Q2hhbm5lbCgpICsgJy9hZGRyZXNzLWJvb2snO1xyXG4gICAgcHVibGljIHRheGVzQXBpID0gKCkgPT4gJ3Nob3AtYXBpLycgKyB0aGlzLmNvbnN0cy5nZXRDaGFubmVsKCkgKyAnL2NhcnRzL3RheCc7XHJcblxyXG4gICAgcHVibGljIGNhcnRfdG9rZW47XHJcbiAgICBwdWJsaWMgY2FydEl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUobWFwKGl0ZW1zID0+IHRoaXMuc3dpdGNoUHJpY2VJbkNhcnRJdGVtKGl0ZW1zKSkpXHJcbiAgICBwdWJsaWMgY291cG9uID0gdGhpcy5jb3Vwb25TdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGxvYWRpbmcgPSB0aGlzLnJlcXVlc3RJblByb2Nlc3MuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgY2FydCA9IHRoaXMuY2FydFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgcHJvbW90aW9ucyA9IHRoaXMucHJvbW90aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBwdWJsaWMgZGVsZXRpbmc6IEJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBiYWxhbmNlQ3VzdG9tZXIkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgcHVibGljIGFsbG93QW55UGF5bWVudE1ldGhvZCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0FueVBheW1lbnRNZXRob2QgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGFsbG93RXhjZWVkQmFsYW5jZSQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5hbGxvd0V4Y2VlZEJhbGFuY2UgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIGNyZWRpdEFtb3VudCQgPSB0aGlzLmJhbGFuY2VDdXN0b21lciQucGlwZShtYXAoZGF0YSA9PiBkYXRhPy5jcmVkaXRBbW91bnQgPz8gbnVsbCkpO1xyXG4gICAgcHVibGljIHNob3dNYXgkID0gdGhpcy5iYWxhbmNlQ3VzdG9tZXIkLnBpcGUobWFwKGRhdGEgPT4gZGF0YT8uc2hvd01heCA/PyBudWxsKSk7XHJcbiAgICBwdWJsaWMgc2hvd1ByaWNlJCA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyJC5waXBlKG1hcChkYXRhID0+IGRhdGE/LnNob3dQcmljZSA/PyBudWxsKSk7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uU2VydmljZSwgcHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdFNlcnZpY2UsIHByaXZhdGUgY29uc3RzOiBDb25zdGFudHMsXHJcbiAgICAgICAgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgb3JkZXJVdGlsczogT3JkZXJVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSBhbmFseXRpY3NTZXJ2aWNlOiBBbmFseXRpY3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbm5lbENvbmZpZ1NlcnZpY2U6IENoYW5uZWxDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIpIHtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnQnKSkgfHwgW107XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhcnRfdG9rZW4nKSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZpY2UubG9nZ2VkSW4uc3Vic2NyaWJlKHJlcyA9PiB0aGlzLmdldENhcnQoKSk7XHJcbiAgICAgICAgdGhpcy5jaGFubmVsQ29uZmlnU2VydmljZS5jaGFubmVsQ29uZmlnJC5zdWJzY3JpYmUocmVzID0+IHRoaXMuY2hhbm5lbENvbmZpZyA9IHJlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENhcnQyKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNhcnRJdGVtc1N1YmplY3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWRkcmVzc0Jvb2sgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5nZXQodGhpcy5hZGRyZXNzQm9va0FwaSgpKS5waXBlKG1hcChyZXMgPT4gcmVzPy5sZW5ndGggJiYgcmVzLm1hcChhZGRyZXMgPT4geyByZXR1cm4gYWRkcmVzICYmIHsgLi4uYWRkcmVzLCBzZWxlY3RlZDogYWRkcmVzLmRlZmF1bHQgfSB9KSB8fCBudWxsKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgcHVibGljIGdldFRheGVzID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLnRheGVzQXBpKCksIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KS5zdWJzY3JpYmUocmVzID0+IHJlcylcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnQgPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuICYmIHRoaXMuaXRlbXMubGVuZ3RoID49IDEpICYmIHsgdG9rZW46IHRoaXMuY2FydF90b2tlbiB9KSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICByZXMgPT4gdGhpcy5pbml0aWFsaXplQ2FydChyZXMpXHJcbiAgICAgICAgKVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FydEJ5VG9rZW4gPSBhc3luYyAoKSA9PlxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuY2FydEl0ZW1zQXBpKCksICgodGhpcy5jYXJ0X3Rva2VuKSAmJiB7IHRva2VuOiB0aGlzLmNhcnRfdG9rZW4gfSkpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHRoaXMuaW5pdGlhbGl6ZUNhcnQocmVzKVxyXG4gICAgICAgIClcclxuXHJcbiAgICBwcml2YXRlIGdldENhcnRCeUN1c3RvbWVyID0gYXN5bmMgKCkgPT5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmNhcnRJdGVtc0FwaSgpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHJlcyA9PiB0aGlzLmluaXRpYWxpemVDYXJ0KHJlcylcclxuICAgICAgICApXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAgQHByaXZhdGVcclxuICAgICAqICBDQVJUIENSVUQgU0VSVkVSJ1MgU1lOQ1JPTklaRURcclxuICAgICAqL1xyXG5cclxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUNhcnQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSByZXNwb25zZS50b2tlblZhbHVlO1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdjYXJ0X3Rva2VuJywgdGhpcy5jYXJ0X3Rva2VuKTtcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IHJlc3BvbnNlLmxvY2FsZTtcclxuICAgICAgICAvKiBsZXQgbG9jYWxlRnJvbVN0b3JhZ2UgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnTE9DQUxFJylcclxuICAgICAgICBjb25zb2xlLmxvZyhsb2NhbGVGcm9tU3RvcmFnZSlcclxuICAgICAgICB0aGlzLmxvY2FsZSA9IGxvY2FsZUZyb21TdG9yYWdlID8gbG9jYWxlRnJvbVN0b3JhZ2UgOiByZXNwb25zZS5sb2NhbGU7XHJcbiAgICAgICAgcmVzcG9uc2UubG9jYWxlID0gdGhpcy5sb2NhbGUgKi9cclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzcG9uc2UsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKHJlc3BvbnNlLml0ZW1zKSk7XHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3dpdGNoUHJpY2VJbkNhcnRJdGVtID0gKGl0ZW1zOiBDYXJ0SXRlbVtdKSA9PiB7XHJcbiAgICAgICAgLy9yZXR1cm4gaXRlbXM7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcChcclxuICAgICAgICAgICAgaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5wcm9kdWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5wcm9kdWN0LnByaWNlID0gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnNhbGVwcmljZSA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RlcENhcnQgPSAocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzLml0ZW1zLmxlbmd0aCA+IDAgJiYgcmVzLml0ZW1zLmZvckVhY2goXHJcbiAgICAgICAgICAgIGl0ZW0gPT4gIXRoaXMuaXNJdGVtSW5Mb2NhbChpdGVtLmlkKSAmJiB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW0sIGZhbHNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5hZGRBbGxUb0NhcnQoXHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgaXRlbSA9PiAhcmVzLml0ZW1zLnNvbWUoZXh0ZXJuYWxfaXRlbSA9PiBleHRlcm5hbF9pdGVtLmlkID09IGl0ZW0uaXRlbV9pZClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FydEl0ZW1zID0gKGl0ZW1zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSBpdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jYXJ0SXRlbXNTdWJqZWN0Lm5leHQodGhpcy5pdGVtcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVDYXJ0SXRlbVF1YW50aXR5ID0gKHZhcmlhbnRfaWQsIHF1YW50aXR5LCBjb21tZW50cz86IHN0cmluZyB8IG51bGwpID0+IHtcclxuICAgICAgICBjb25zdCBub3JtYWxpemVkQ29tbWVudHMgPSBjb21tZW50cyAhPT0gdW5kZWZpbmVkID8gKGNvbW1lbnRzID8/ICcnKS50cmltKCkgOiB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5pdGVtcy5tYXAoaXQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXQudmFyaWFudF9pZCAhPT0gdmFyaWFudF9pZCkgcmV0dXJuIGl0O1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkOiBhbnkgPSB7IC4uLml0LCBxdWFudGl0eTogTnVtYmVyKHF1YW50aXR5KSB9O1xyXG4gICAgICAgICAgICBpZiAobm9ybWFsaXplZENvbW1lbnRzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHVwZGF0ZWQuY29tbWVudHMgPSBub3JtYWxpemVkQ29tbWVudHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZWQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBuZXdJdGVtcztcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC11cGRhdGVkJywgeyBxdWFudGl0eSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGVuZFRvQ2FydCA9IChjYXJ0KSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnQuaXRlbXMpO1xyXG4gICAgICAgIHRoaXMuY291bnQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMb2NhbENhcnQoKTtcclxuICAgICAgICAvLyAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KHRoaXMuaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVtb3ZlQ2FydEl0ZW0gPSAoY2FydCwgcHJvZHVjdCwgdG9hc3QgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKGNhcnQsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLml0ZW1zLnNwbGljZSh0aGlzLml0ZW1zLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaXRlbV9pZCA9PSBwcm9kdWN0Lml0ZW1faWQpLCAxKTtcclxuICAgICAgICB0aGlzLmNhcnRJdGVtc1N1YmplY3QubmV4dCh0aGlzLml0ZW1zKTtcclxuICAgICAgICB0b2FzdCAmJiB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdG9hc3QgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3QtcmVtb3ZlZCcpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTG9jYWxDYXJ0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5nb29nbGVBbmFseXRpY3MucmVtb3ZlRnJvbUNhcnQocHJvZHVjdCk7XHJcbiAgICAgICAgdGhpcy5hbmFseXRpY3NTZXJ2aWNlLmNhbGxFdmVudCgncmVtb3ZlX2Zyb21fY2FydCcsIHsgLi4ucHJvZHVjdCwgY3VycmVuY3k6IHRoaXMuY29uc3RzLmN1cnJlbmN5LmNvZGUgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRJZkFsbHJlYWR5RXhpc3RzID0gKHByb2R1Y3QsIHZhcmlhbnRfaWQsIHF1YW50aXR5QWRkID0gMSwgY29tbWVudHM/OiBzdHJpbmcgfCBudWxsKSA9PlxyXG4gICAgICAgIHRoaXMuaXRlbXMuZmluZCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0LmlkICYmIGl0ZW0udmFyaWFudF9pZCA9PSB2YXJpYW50X2lkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUl0ZW1RdWFudGl0eShpdGVtLCB0aGlzLmZpbmRJdGVtKHByb2R1Y3QuaWQpLnF1YW50aXR5ICsgcXVhbnRpdHlBZGQsIGNvbW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsQ2FydCA9ICgpID0+IHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydCcsIEpTT04uc3RyaW5naWZ5KHRoaXMuaXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0Q2FydCA9IChuZXh0PykgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNhcnRTdWJqZWN0Lm5leHQobnVsbCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVCYWxhbmNlQXR0cmlidXRlcyhudWxsKTtcclxuICAgICAgICB0aGlzLmNhcnRfdG9rZW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2FydEl0ZW1zU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLmNvdW50ID0gMDtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FydCcsIFwiW11cIik7XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ2NhcnRfdG9rZW4nKTtcclxuICAgICAgICBuZXh0ICYmIG5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNhcnRPYmogPSAoY2FydCwgZW1pdEV2ZW50ID0gdHJ1ZSk6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIHRoaXMuY2FydFN1YmplY3QubmV4dChjYXJ0KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGNhcnQ/LmJhbGFuY2VDdXN0b21lciwgY2FydD8udG90YWxzPy50b3RhbCk7XHJcbiAgICAgICAgZW1pdEV2ZW50ICYmIHRoaXMuYW5hbHl0aWNzU2VydmljZS5jYWxsRXZlbnQoJ2FkZF90b19jYXJ0JywgY2FydCk7XHJcbiAgICAgICAgdGhpcy5wcm9tb3Rpb25zU3ViamVjdC5uZXh0KHRoaXMub3JkZXJVdGlscy5nZXRQcm9tb3Rpb25zKGNhcnQsIHRydWUpKTtcclxuXHJcbiAgICAgICAgY2FydC5jb3Vwb25Db2RlXHJcbiAgICAgICAgICAgID8gdGhpcy5mb3JtYXRDb3Vwb24oY2FydClcclxuICAgICAgICAgICAgOiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChudWxsKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSXRlbUluTG9jYWwgPSAoaXRlbV9pZCkgPT4gdGhpcy5pdGVtcy5zb21lKGl0ZW0gPT4gaXRlbS5pdGVtX2lkID09IGl0ZW1faWQpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogIEBwdWJsaWNcclxuICAgICAqICBDQVJUIENSVURcclxuICAgICAqL1xyXG5cclxuICAgIGFkZFRvQ2FydCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBjb21tZW50cz86IHN0cmluZykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnJlcXVlc3RJblByb2Nlc3MuZ2V0VmFsdWUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgY29uc3QgYXBwbHlNYXhPcmRlcnMgPSBiYWxhbmNlPy5hcHBseU1heE9yZGVycyA/PyBmYWxzZTtcclxuICAgICAgICBjb25zdCBtYXhPcmRlcnMgPSBiYWxhbmNlPy5tYXhPcmRlcnMgPz8gSW5maW5pdHk7XHJcblxyXG4gICAgICAgIGlmIChhcHBseU1heE9yZGVycyAmJiAobWF4T3JkZXJzIDw9IDAgfHwgbWF4T3JkZXJzID09PSBudWxsKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWF4LW9yZGVycy1yZWFjaGVkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgbGV0IGFkZGVkID0gdGhpcy5hZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3QsIHZhcmlhbnRfaWQsIHF1YW50aXR5LCBjb21tZW50cyk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgICBwcm9kdWN0Q29kZTogcHJvZHVjdC5pZCxcclxuICAgICAgICAgICAgICAgIHF1YW50aXR5OiBxdWFudGl0eSxcclxuICAgICAgICAgICAgICAgIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbW1lbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmNvbW1lbnRzID0gY29tbWVudHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCBwYXlsb2FkKVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNYW5lamFyIGxhIHJlc3B1ZXN0YSBIVFRQIGV4aXRvc2EgKGPDs2RpZ28gMjAwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZFRvQ2FydChyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygncHJvZHVjdC1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFuZWphciBlbCBlcnJvciBkZSBsYSBsbGFtYWRhIEhUVFAgKGPDs2RpZ28gNTAwIHUgb3RybyBlcnJvcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ8OzZGlnbyBkZSBlcnJvciA1MDAgKHRpbWVvdXQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnSGEgb2N1cnJpZG8gdW4gZXJyb3IgYWwgYWdyZWdhciBhbCBjYXJyaXRvLiBWdWVsdmEgYSBpbnRlbnRhcmxvLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RybyBjw7NkaWdvIGRlIGVycm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnRXJyb3IgaW5lc3BlcmFkby4gVnVlbHZhIGEgaW50ZW50YXJsbycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0xvdCA9IChwcm9kdWN0OiBQcm9kdWN0LCBxdWFudGl0eTogbnVtYmVyLCB2YXJpYW50X2lkLCBpZD8sIG9yZGVyX2l0ZW1faWQ/LCBsb3RfcXVhbnRpdHk/LCB1bml0X3ByaWNlPywgdW5pdF90b3RhbD8sIGFqdXN0ZW1lbnRfdG90YWw/LCB0b3RhbF9sb3Q/LCBsb3Rfc3RhdHVzPywgZGF0ZV9yZXF1ZXN0Pywgbm90ZXM/LCBzaGlwcGluZ19hZGRyZXNzX2lkPywgc2hpcHBpbmdfYWRkcmVzc19uYW1lPywgYWN0aW9uPykgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGFkZGVkID0gJyc7XHJcbiAgICAgICAgIWFkZGVkICYmIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkLCBpZDogaWQgfHwgJycsIG9yZGVyX2l0ZW1faWQ6IG9yZGVyX2l0ZW1faWQgfHwgJycsIGxvdF9xdWFudGl0eTogbG90X3F1YW50aXR5IHx8ICcnLCB1bml0X3ByaWNlOiB1bml0X3ByaWNlIHx8ICcnLCB1bml0X3RvdGFsOiB1bml0X3RvdGFsIHx8ICcnLCBhanVzdGVtZW50X3RvdGFsOiBhanVzdGVtZW50X3RvdGFsIHx8ICcnLCB0b3RhbF9sb3Q6IHRvdGFsX2xvdCB8fCAnJywgbG90X3N0YXR1czogbG90X3N0YXR1cyB8fCAnJywgZGF0ZV9yZXF1ZXN0OiBkYXRlX3JlcXVlc3QgfHwgJycsIG5vdGVzOiBub3RlcyB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19pZDogc2hpcHBpbmdfYWRkcmVzc19pZCB8fCAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiBzaGlwcGluZ19hZGRyZXNzX25hbWUgfHwgJycsIGFjdGlvbjogYWN0aW9uIHx8ICduZXdsb3QnIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICByZXMgPT4gdGhpcy5hcHBlbmRUb0NhcnQocmVzKSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVycilcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUb0NhcnRQcm9taXNlID0gYXN5bmMgKHByb2R1Y3Q6IFByb2R1Y3QsIHF1YW50aXR5OiBudW1iZXIsIHZhcmlhbnRfaWQsIGNvbW1lbnRzPzogc3RyaW5nIHwgbnVsbCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5hdXRoU2VydmljZS5pc0FibGVUb0J1eSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtdXN0LXNlbGVjdC1jdXN0b21lcicpXHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgbGV0IGFkZGVkID0gdGhpcy5hZGRJZkFsbHJlYWR5RXhpc3RzKHByb2R1Y3QsIHZhcmlhbnRfaWQsIHF1YW50aXR5LCBjb21tZW50cyk7XHJcbiAgICAgICAgaWYgKCFhZGRlZCkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgKHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkSXRlbUFwaSgpLCB7IHByb2R1Y3RDb2RlOiBwcm9kdWN0LmlkLCBxdWFudGl0eTogcXVhbnRpdHksIHZhcmlhbnRDb2RlOiB2YXJpYW50X2lkIH0pLnRvUHJvbWlzZSgpKTtcclxuICAgICAgICAgICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0LmVycm9yKSB0aGlzLmhhbmRsZUVycm9yKHJlc3VsdC5lcnJvcik7XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRUb0NhcnQocmVzdWx0KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhZGRBbGxUb0NhcnQgPSAoaXRlbXM6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhTZXJ2aWNlLmlzQWJsZVRvQnV5KCkpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ211c3Qtc2VsZWN0LWN1c3RvbWVyJylcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBpdGVtczogdGhpcy5tZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0KGl0ZW1zKSB9O1xyXG5cclxuICAgICAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEFsbEl0ZW1zQXBpKCksIHBhcmFtcylcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpLnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FydE9iaihyZXMuY2FydCkgJiYgdGhpcy51cGRhdGVDYXJ0SXRlbXModGhpcy50cmFuc2Zvcm1JdGVtcyhyZXMuY2FydC5pdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5jYXJ0X3Jlc3BvbnNlLnN0YXR1cyA9PSAnc3VjY2VzcycgJiYgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3Byb2R1Y3RzLWFkZGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUmVwZWF0T3JkZXJUb0NhcnQoaXRlbXM6IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FydEl0ZW1zU3ViamVjdC52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdjYXJ0LW5vdC1lbXB0eScpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuYXV0aFNlcnZpY2UuaXNBYmxlVG9CdXkoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1zZWxlY3QtY3VzdG9tZXInKVxyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGl0ZW1zVG9BZGQgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgICAgICBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICBxdWFudGl0eTogaXRlbS5xdWFudGl0eSxcclxuICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5jb2RlXHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICBpZiAoaXRlbXNUb0FkZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vLXByb2R1Y3RzLXRvLWFkZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgIGl0ZW1zOiBpdGVtc1RvQWRkXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQodHJ1ZSk7XHJcblxyXG4gICAgICAgIHRoaXMuY29ubmVjdGlvbi5wb3N0KHRoaXMuYWRkQWxsSXRlbXNBcGkoKSwgcGFyYW1zKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdmYWlsdXJlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHJlcy5lcnJvcj8udG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXHMrL2csICdfJykgfHwgJ3Vua25vd25fZXJyb3InO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zUmVzcG9uc2UgPSByZXM/Lml0ZW1zX3Jlc3BvbnNlIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FydEl0ZW1zID0gcmVzPy5jYXJ0Py5pdGVtcyB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRPZlN0b2NrSXRlbXMgPSBpdGVtc1Jlc3BvbnNlLmZpbHRlcihpdGVtID0+XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGF0dXMgPT09ICdmYWlsdXJlJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3JzLnNvbWUoZXJyb3IgPT4gZXJyb3IuY29kZSA9PT0gJ291dF9vZl9zdG9jaycpXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjYXJ0SXRlbXMubGVuZ3RoID09PSAwICYmIG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ2FsbC1wcm9kdWN0cy1vdXQtb2Ytc3RvY2snKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKG91dE9mU3RvY2tJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ3NvbWUtcHJvZHVjdHMtb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGNhcnRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJ0T2JqKHJlcy5jYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyh0aGlzLnRyYW5zZm9ybUl0ZW1zKGNhcnRJdGVtcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdwcm9kdWN0cy1hZGRlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2NhcnQnXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBtZXJnZUl0ZW1zQWRkQWxsVG9DYXJ0ID0gKGl0ZW1zOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgIGxldCBwYXJhbXNNZXJnZSA9IFtdXHJcbiAgICAgICAgdGhpcy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBsZXQgaXRlbUludGVybm8gPSBpdGVtcy5maW5kKGl0ZW1QYXJhbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKVxyXG4gICAgICAgICAgICBwYXJhbXNNZXJnZS5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2R1Y3RDb2RlOiBpdGVtLnByb2R1Y3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCxcclxuICAgICAgICAgICAgICAgICAgICBxdWFudGl0eTogaXRlbUludGVybm8gJiYgaXRlbUludGVybm8ucXVhbnRpdHkgfHwgaXRlbS5xdWFudGl0eVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbVBhcmFtID0+ICF0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtUGFyYW0udmFyaWFudENvZGUgPT0gaXRlbS52YXJpYW50X2lkKSlcclxuXHJcbiAgICAgICAgcmV0dXJuIFsuLi5pdGVtcywgLi4ucGFyYW1zTWVyZ2VdXHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlSXRlbVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSwgY29tbWVudHM/OiBzdHJpbmcgfCBudWxsKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVRdWFudGl0eShpdGVtLCBxdWFudGl0eSkgJiYgKHRoaXMudmFsaWRhdGVQcmljZUFuZENyZWRpdHMoaXRlbSwgcXVhbnRpdHkpKSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHsgcXVhbnRpdHk6IE51bWJlcihxdWFudGl0eSkgfTtcclxuICAgICAgICAgICAgaWYgKGNvbW1lbnRzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNsZWFuZWQgPSAoY29tbWVudHMgPz8gJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIHBheWxvYWQuY29tbWVudHMgPSBjbGVhbmVkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIC5wdXQoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJdGVtUXVhbnRpdHlBcGkodGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZCkpLFxyXG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzID0+IHRoaXMudXBkYXRlQ2FydE9iaihyZXMpICYmIHRoaXMudXBkYXRlQ2FydEl0ZW1RdWFudGl0eShpdGVtLnZhcmlhbnRfaWQsIE51bWJlcihxdWFudGl0eSksIGNvbW1lbnRzKSxcclxuICAgICAgICAgICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICB2YWxpZGF0ZVF1YW50aXR5ID0gKGl0ZW06IENhcnRJdGVtLCBxdWFudGl0eSkgPT4ge1xyXG4gICAgICAgIGlmICgodGhpcy5nZXRDb3VudEZyb21JdGVtSW5DYXJ0KGl0ZW0ucHJvZHVjdENvZGUpICsgcXVhbnRpdHkpID4gaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyU2VydmljZS5zaG93KCdtYXhpbXVtLWl0ZW1zLXF1YW50aXR5JywgeyBxdWFudGl0eTogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLm1heGltdW1JdGVtc1F1YW50aXR5IH0pXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSA8IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbWluaW11bS1pdGVtcy1xdWFudGl0eScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5taW5pbXVtSXRlbXNRdWFudGl0eSB9KVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICYmIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ID4gMCkge1xyXG4gICAgICAgICAgICBpZiAoKHRoaXMuZ2V0Q291bnRGcm9tSXRlbUluQ2FydChpdGVtLnByb2R1Y3RDb2RlKSArIHF1YW50aXR5KSAlIGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5ICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbXVzdC1iZS1tdWx0aXBsZScsIHsgcXVhbnRpdHk6IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5tdWx0aXBsZVF1YW50aXR5IH0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVByaWNlQW5kQ3JlZGl0cyA9IChpdGVtOiBDYXJ0SXRlbSwgcXVhbnRpdHk6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhbGFuY2UgPSB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QudmFsdWU7XHJcblxyXG4gICAgICAgIGlmICghYmFsYW5jZSB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gbnVsbCB8fCBiYWxhbmNlLmNyZWRpdEFtb3VudCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHVuaXRQcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5O1xyXG4gICAgICAgIGNvbnN0IGFkZGl0aW9uYWxRdWFudGl0eSA9IHF1YW50aXR5IC0gaXRlbS5xdWFudGl0eTtcclxuXHJcbiAgICAgICAgaWYgKGFkZGl0aW9uYWxRdWFudGl0eSA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbENvc3QgPSB1bml0UHJpY2UgKiBhZGRpdGlvbmFsUXVhbnRpdHk7XHJcblxyXG4gICAgICAgIGlmIChhZGRpdGlvbmFsQ29zdCA+IGJhbGFuY2UucmVtYWluaW5nQ3JlZGl0cykge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnbm90LWVub3VnaC1jcmVkaXRzJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfTtcclxuXHJcbiAgICBwdWJsaWMgaGFzU3VmZmljaWVudENyZWRpdHNGb3JDYXJ0VG90YWwgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICAgICAgY29uc3QgYmFsYW5jZSA9IHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC52YWx1ZTtcclxuXHJcbiAgICAgICAgaWYgKCFiYWxhbmNlIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSBudWxsIHx8IGJhbGFuY2UuY3JlZGl0QW1vdW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5hbGxvd0FueVBheW1lbnRNZXRob2QpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYmFsYW5jZS5yZW1haW5pbmdDcmVkaXRzID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdG90YWwgPSB0aGlzLmNhcnRTdWJqZWN0LnZhbHVlPy50b3RhbHM/LnRvdGFsIHx8IDA7XHJcblxyXG4gICAgICAgIC8vIFNpIE5PIHB1ZWRlIGV4Y2VkZXIgc2FsZG8geSBlbCB0b3RhbCBzdXBlcmEgZWwgY3JlZGl0bywgYmxvcXVlYXJcclxuICAgICAgICBpZiAoIWJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlICYmIHRvdGFsID4gYmFsYW5jZS5jcmVkaXRBbW91bnQpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ25vdC1lbm91Z2gtY3JlZGl0cycpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcblxyXG4gICAgY2FsY3VsYXRlU3RvY2tDb3VudHMgPSAoaXRlbTogQ2FydEl0ZW0sIHF1YW50aXR5KSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0ucHJvZHVjdC5zdG9jayA8IGl0ZW0ucXVhbnRpdHkgKyBxdWFudGl0eSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnRvYXN0clNlcnZpY2Uuc2hvdygnb3V0LW9mLXN0b2NrJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUNhcnRJdGVtID0gKGl0ZW0sIHRvYXN0ID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIGxldCBpZF9idXNjYWRvID0gdGhpcy5maW5kSXRlbUJ5SWRWYXJpYW50KGl0ZW0udmFyaWFudF9pZClcclxuICAgICAgICB0aGlzLnJlcXVlc3RJblByb2Nlc3MubmV4dCh0cnVlKTtcclxuICAgICAgICAvLyAgICB0aGlzLmNvbm5lY3Rpb24ucG9zdCh0aGlzLmFkZEl0ZW1BcGkoKSwgeyBwcm9kdWN0Q29kZTogaXRlbS5wcm9kdWN0LmlkLCBxdWFudGl0eTogMCwgdmFyaWFudENvZGU6IGl0ZW0udmFyaWFudF9pZCwgaWQ6ICcnLCBvcmRlcl9pdGVtX2lkOiBpdGVtLml0ZW1faWQsIGxvdF9xdWFudGl0eTogJycsIHVuaXRfcHJpY2U6ICcnLCB1bml0X3RvdGFsOiAnJywgYWp1c3RlbWVudF90b3RhbDogJycsIHRvdGFsX2xvdDogJycsIGxvdF9zdGF0dXM6ICcnLCBkYXRlX3JlcXVlc3Q6ICcnLCBub3RlczogICcnLCBzaGlwcGluZ19hZGRyZXNzX2lkOiAnJywgc2hpcHBpbmdfYWRkcmVzc19uYW1lOiAnJywgYWN0aW9uOiAgJ2RlbGV0ZW9yZGVyaXRlbSd9KVxyXG4gICAgICAgIC8vICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIC8vICAgICAgICAgICAgcmVzID0+IHRoaXMucmVtb3ZlQ2FydEl0ZW0ocmVzLCBpdGVtLCB0b2FzdCksXHJcbiAgICAgICAgLy8gICAgICAgICAgICBlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIpXHJcbiAgICAgICAgLy8gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmRlbGV0ZUl0ZW1BcGkoaWRfYnVzY2FkbykpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgcmVzID0+IHsgdGhpcy5yZW1vdmVDYXJ0SXRlbShyZXMsIGl0ZW0sIHRvYXN0KTsgdGhpcy5yZXF1ZXN0SW5Qcm9jZXNzLm5leHQoZmFsc2UpOyB9LFxyXG4gICAgICAgICAgICBlcnIgPT4geyB0aGlzLmhhbmRsZUVycm9yKGVycik7IHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTsgfSxcclxuICAgICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJDYXJ0KCkge1xyXG4gICAgICAgIC8vc29sdWNpb24gcHJvdmlzYW9yaWFcclxuICAgICAgICBsZXQgaXRlbXMgPSBbLi4udGhpcy5pdGVtc11cclxuICAgICAgICB3aGlsZSAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUNhcnRJdGVtKGl0ZW1zLnBvcCgpLCBmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgLy90aGlzLnJlc2V0Q2FydCh0aGlzLmdldENhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQW5kUmVzZXRDYXJ0KCkge1xyXG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbmRSZXNldEN1c3RvbWVyQ2FydCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkNsZWFyaW5nIGFuZCByZXNldGluZy4uLlwiKVxyXG4gICAgICAgIHRoaXMucmVzZXRDYXJ0KHRoaXMuZ2V0Q2FydEJ5Q3VzdG9tZXIpXHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IHsgZXJyb3I6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdHJTZXJ2aWNlLnNob3coJ29wZXJhdGlvbi1lcnJvci1wYXJhbScpO1xyXG4gICAgICAgIHRoaXMucmVxdWVzdEluUHJvY2Vzcy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb3VudEZyb21JdGVtSW5DYXJ0ID0gKGNvZGVWYXJpYW50KTogbnVtYmVyID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0udmFyaWFudF9pZCA9PSBjb2RlVmFyaWFudCk/LnF1YW50aXR5IHx8IDA7XHJcblxyXG4gICAgZmluZEl0ZW1CeUlkVmFyaWFudCA9ICh2YXJpYW50X2lkKSA9PiB0aGlzLml0ZW1zLmZpbmQoaXRlbSA9PiBpdGVtLnZhcmlhbnRfaWQgPT0gdmFyaWFudF9pZCkuaXRlbV9pZFxyXG5cclxuICAgIGZpbmRJdGVtID0gKHByb2R1Y3RfaWQpID0+IHRoaXMuaXRlbXMuZmluZChpdGVtID0+IGl0ZW0ucHJvZHVjdC5pZCA9PSBwcm9kdWN0X2lkKTtcclxuXHJcbiAgICAvKiogREFUQSBGT1IgT1RIRVIgU0VSVklDRVMgKi9cclxuICAgIGdldENhcnRUb2tlbiA9ICgpID0+IHRoaXMuY2FydF90b2tlbjtcclxuXHJcbiAgICBnZXRMb2NhbGUgPSAoKSA9PiB0aGlzLmxvY2FsZTtcclxuXHJcbiAgICBnZXRUb3RhbEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnQucGlwZShtYXAoKGNhcnQpID0+IGNhcnQ/LnRvdGFscz8udG90YWwpKTtcclxuXHJcbiAgICBnZXRDb3VudENhcnRJdGVtcyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmNhcnRJdGVtcy5waXBlKG1hcCgoY2FydEl0ZW1zKSA9PiBjYXJ0SXRlbXM/Lmxlbmd0aCkpO1xyXG5cclxuICAgIGdldFRheGVzQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy50YXhlcyA+IDAgPyBjYXJ0Py50b3RhbHM/LnRheGVzIDogMCkpO1xyXG5cclxuICAgIGdldFN1YlRvdGFsQW1vdW50ID0gKCk6IE9ic2VydmFibGU8bnVtYmVyPiA9PlxyXG4gICAgICAgIHRoaXMuY2FydC5waXBlKG1hcCgoY2FydCkgPT4gY2FydD8udG90YWxzPy5zdWJ0b3RhbCkpO1xyXG5cclxuICAgIHRvRGVjaW1hbCA9ICh0b3RhbCkgPT4gKHRvdGFsIC0gTWF0aC5mbG9vcih0b3RhbCkgPT0gMCkgPyB0b3RhbCAvIDEwMCA6IHRvdGFsXHJcblxyXG4gICAgZ2V0RGlzY291bnQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jYXJ0SXRlbXMucGlwZShtYXAoKHByb2R1Y3QpID0+IHtcclxuICAgICAgICAgICAgbGV0IHRvdGFsID0gdGhpcy5pdGVtcy5yZWR1Y2UoKHByZXYsIGN1cnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2ICsgY3Vyci5wcm9kdWN0LnNhbGVwcmljZSAqIGN1cnIucXVhbnRpdHk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICBsZXQgc3VidG90YWwgPSB0aGlzLml0ZW1zLnJlZHVjZSgocHJldiwgY3VycikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXYgKyBjdXJyLnByb2R1Y3QucHJpY2UgKiBjdXJyLnF1YW50aXR5O1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgcmV0dXJuIHN1YnRvdGFsIC0gdG90YWw7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENvdXBvbiA9IGFzeW5jIChjb2RlKTogUHJvbWlzZTxhbnk+ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25uZWN0aW9uLnB1dCh0aGlzLmNvdXBvbkFwaSgpLCB7IGNvdXBvbjogY29kZSB9KS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvciB8fCByZXN1bHQuZXJyb3JzKSByZXR1cm4geyBlcnJvcjogdHJ1ZSwgbWVzc2FnZTogJ2ludmFsaWQtY291cG9uJyB9O1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcnRPYmoocmVzdWx0LCBmYWxzZSk7XHJcbiAgICAgICAgICAgIHJldHVybiB7IGVycm9yOiBmYWxzZSwgbWVzc2FnZTogJ29rJyB9O1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIG1lc3NhZ2U6ICdpbnZhbGlkLWNvdXBvbicgfTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ291cG9uID0gYXN5bmMgKCkgPT4gdGhpcy5jb25uZWN0aW9uLmRlbGV0ZSh0aGlzLmNvdXBvbkFwaSgpKS5waXBlKG1hcChyZXMgPT4gdGhpcy51cGRhdGVDYXJ0T2JqKHJlcywgZmFsc2UpKSkudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgZm9ybWF0Q291cG9uID0gKGNhcnQpID0+IHtcclxuICAgICAgICBsZXQgY3VycmVudF9jb3Vwb24gPSB0aGlzLmNvdXBvblN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IGNvdXBvbjogQ291cG9uSSA9IHsgY29kZTogY2FydC5jb3Vwb25Db2RlIH07XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoY2FydC5jYXJ0RGlzY291bnRzKVswXTtcclxuICAgICAgICAgICAgY291cG9uID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY291cG9uLFxyXG4gICAgICAgICAgICAgICAgYW1vdW50OiAoY2FydC5jYXJ0RGlzY291bnRzICYmIGNhcnQuY2FydERpc2NvdW50c1trZXldLmFtb3VudC5jdXJyZW50KSB8fCAwLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogKGNhcnQuY2FydERpc2NvdW50cyAmJiBjYXJ0LmNhcnREaXNjb3VudHNba2V5XS5uYW1lKSB8fCAnbm8tbmFtZSdcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICAoY291cG9uICE9IGN1cnJlbnRfY291cG9uKSAmJiB0aGlzLmNvdXBvblN1YmplY3QubmV4dChjb3Vwb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUhhdmVUb1VwZGF0ZSA9ICh2YWx1ZSkgPT4gdGhpcy5oYXZlX3RvX3VwZGF0ZSA9IHZhbHVlO1xyXG5cclxuICAgIHJlYWR5Rm9yQ2hlY2tvdXQgPSAoc3VjY2Vzc0NhbGxiYWNrPzogRnVuY3Rpb24sIGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbik6IENhcnRBZmZvcmRhYmxlID0+IHtcclxuICAgICAgICBsZXQgY2FydCA9IHRoaXMuY2FydFN1YmplY3QudmFsdWU7XHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5jYXJ0SXRlbXNTdWJqZWN0LnZhbHVlO1xyXG4gICAgICAgIGxldCByZXN1bHQ6IENhcnRBZmZvcmRhYmxlID0geyBvazogdHJ1ZSB9O1xyXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPCB0aGlzLmNoYW5uZWxDb25maWcubWluaW11bVF1YW50aXR5UHVyY2hhc2VJdGVtcykge1xyXG4gICAgICAgICAgICByZXN1bHQub2sgPSBmYWxzZTsgcmVzdWx0LnJlYXNvbnMucHVzaCh7IG1lc3NhZ2U6ICdub3QtZW5vdWdodC1pdGVtcycgfSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhcnQudG90YWxzLnRvdGFsIDwgdGhpcy5jaGFubmVsQ29uZmlnLm1pbmltdW1QdXJjaGFzZUFtb3VudCkge1xyXG4gICAgICAgICAgICByZXN1bHQub2sgPSBmYWxzZTsgcmVzdWx0LnJlYXNvbnMucHVzaCh7IG1lc3NhZ2U6ICdub3QtZW5vdWdodC1hbW91bnQnIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzdWNjZXNzQ2FsbGJhY2sgfHwgZXJyb3JDYWxsYmFjaykge1xyXG4gICAgICAgICAgICByZXN1bHQub2tcclxuICAgICAgICAgICAgICAgID8gc3VjY2Vzc0NhbGxiYWNrICYmIHN1Y2Nlc3NDYWxsYmFjaygpXHJcbiAgICAgICAgICAgICAgICA6IGVycm9yQ2FsbGJhY2sgJiYgZXJyb3JDYWxsYmFjaygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUl0ZW1zT25FcnJvciA9IChpdGVtc1dpdGhFcnJvcjogYW55W10sIGNvZGU6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW1zV2l0aEVycm9yKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLml0ZW1zKTtcclxuICAgICAgICBsZXQgaXRlbXNVcGRhdGVkID0gdGhpcy5pdGVtcy5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpdGVtV2l0aEVycm9yID0gaXRlbXNXaXRoRXJyb3IuZmluZChmYWlsZWRJdGVtID0+IGl0ZW0uaXRlbV9pZCA9PSBmYWlsZWRJdGVtLmlkKTtcclxuICAgICAgICAgICAgaWYgKGl0ZW1XaXRoRXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBjb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coaXRlbXNVcGRhdGVkKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNhcnRJdGVtcyhpdGVtc1VwZGF0ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRDYXJ0QnlUb2tlbiA9IGFzeW5jICh0b2tlbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jYXJ0X3Rva2VuID0gdG9rZW5cclxuICAgICAgICBsZXQgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRDYXJ0QnlUb2tlbigpXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogIFVUSUxTXHJcbiAgICAgKi9cclxuXHJcbiAgICB0cmFuc2Zvcm1JdGVtcyA9IChzZXJ2ZXJfaXRlbSkgPT4gc2VydmVyX2l0ZW0ubWFwKFxyXG4gICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtID0ge1xyXG4gICAgICAgICAgICAgICAgcHJvZHVjdDogaXRlbS5wcm9kdWN0LFxyXG4gICAgICAgICAgICAgICAgdmFyaWFudF9pZDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBsb3Q6IGl0ZW0ub3JkZXJJdGVtTG90LFxyXG4gICAgICAgICAgICAgICAgcXVhbnRpdHk6IGl0ZW0ucXVhbnRpdHksXHJcbiAgICAgICAgICAgICAgICBjb21tZW50czogaXRlbS5jb21tZW50cyB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGl0ZW1faWQ6IGl0ZW0uaWQsXHJcbiAgICAgICAgICAgICAgICB0b3RhbDogaXRlbS50b3RhbFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zYWxlcHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2FsZXByaWNlID4gMCA/IGl0ZW0ucHJvZHVjdC52YXJpYW50c1swXS5zZWxlcHJpY2UgOiBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0ucHJpY2UpO1xyXG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgLy8gICAgIGl0ZW0ucHJvZHVjdC5wcmljZSA9IGl0ZW0udG90YWwgLyBpdGVtLnF1YW50aXR5Ly8gPyBpdGVtLnByb2R1Y3QudmFyaWFudHNbMF0uc2VsZXByaWNlIDogaXRlbS5wcm9kdWN0LnZhcmlhbnRzWzBdLnByaWNlO1xyXG4gICAgICAgICAgICAvLyB9LCAxMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICApXHJcblxyXG5cclxuICAgIGdldENyZWRpdEFtb3VudCA9ICgpOiBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+ID0+XHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgoYmFsYW5jZUN1c3RvbWVyKSA9PiBiYWxhbmNlQ3VzdG9tZXI/LmNyZWRpdEFtb3VudCA/PyBudWxsKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgZ2V0Q2xpZW50VGF4ZXMgPSAoKTogT2JzZXJ2YWJsZTxudW1iZXI+ID0+XHJcbiAgICAgICAgdGhpcy5jYXJ0LnBpcGUobWFwKChjYXJ0KSA9PiBjYXJ0Py50b3RhbHM/LnRheGVzID4gMCA/IGNhcnQ/LnRvdGFscz8uY2xpZW50VGF4ZXMgOiAwKSk7XHJcblxyXG4gICAgZ2V0UmVtYWluaW5nQ3JlZGl0cyA9ICgpOiBPYnNlcnZhYmxlPG51bWJlcj4gPT5cclxuICAgICAgICB0aGlzLmJhbGFuY2VDdXN0b21lclN1YmplY3QucGlwZShtYXAoKGJhbGFuY2VDdXN0b21lcikgPT4gYmFsYW5jZUN1c3RvbWVyPy5yZW1haW5pbmdDcmVkaXRzKSk7XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZUJhbGFuY2VBdHRyaWJ1dGVzKGJhbGFuY2U6IGFueSwgdG90YWw6IG51bWJlciB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFiYWxhbmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYmFsYW5jZUN1c3RvbWVyU3ViamVjdC5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0b3RhbEFtb3VudCA9IHRvdGFsID8/IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGJhbGFuY2VEYXRhID0ge1xyXG4gICAgICAgICAgICBhbGxvd0FueVBheW1lbnRNZXRob2Q6IGJhbGFuY2UuYWxsb3dBbnlQYXltZW50TWV0aG9kLFxyXG4gICAgICAgICAgICBhbGxvd0V4Y2VlZEJhbGFuY2U6IGJhbGFuY2UuYWxsb3dFeGNlZWRCYWxhbmNlLFxyXG4gICAgICAgICAgICBjcmVkaXRBbW91bnQ6IGJhbGFuY2UuY3JlZGl0QW1vdW50LFxyXG4gICAgICAgICAgICBzaG93TWF4OiBiYWxhbmNlLnNob3dNYXgsXHJcbiAgICAgICAgICAgIHNob3dQcmljZTogYmFsYW5jZS5zaG93UHJpY2UsXHJcbiAgICAgICAgICAgIHJlbWFpbmluZ0NyZWRpdHM6XHJcbiAgICAgICAgICAgICAgICBiYWxhbmNlLmNyZWRpdEFtb3VudCAhPSBudWxsICYmIHRvdGFsQW1vdW50ICE9IG51bGwgJiYgYmFsYW5jZS5jcmVkaXRBbW91bnQgPj0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA/IGJhbGFuY2UuY3JlZGl0QW1vdW50IC0gdG90YWxBbW91bnRcclxuICAgICAgICAgICAgICAgICAgICA6IDAsXHJcbiAgICAgICAgICAgIGFwcGx5TWF4T3JkZXJzOiBiYWxhbmNlLmFwcGx5TWF4T3JkZXJzLFxyXG4gICAgICAgICAgICBtYXhPcmRlcnM6IGJhbGFuY2UubWF4T3JkZXJzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5iYWxhbmNlQ3VzdG9tZXJTdWJqZWN0Lm5leHQoYmFsYW5jZURhdGEpO1xyXG4gICAgfVxyXG5cclxufVxyXG4iXX0=
|