@colijnit/transaction 12.1.145 → 12.1.147
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/colijnit-transaction.umd.js +698 -397
- package/bundles/colijnit-transaction.umd.js.map +1 -1
- package/colijnit-transaction.d.ts +125 -123
- package/colijnit-transaction.metadata.json +1 -1
- package/esm2015/colijnit-transaction.js +126 -124
- package/esm2015/lib/component/checkout/checkout-overview-payment/checkout-overview-payment.component.js +2 -2
- package/esm2015/lib/component/checkout/checkout-overview-relation-edit/checkout-overview-relation-edit.component.js +7 -1
- package/esm2015/lib/component/checkout/checkout.component.js +10 -2
- package/esm2015/lib/component/core/base/transaction-base.component.js +11 -3
- package/esm2015/lib/component/deposit-payment/deposit-payment.component.js +2 -1
- package/esm2015/lib/component/dialog/catalog/dialog-catalog/dialog-catalog.component.js +1 -3
- package/esm2015/lib/component/dialog/catalog/dialog-catalog/dialog-catalog.module.js +6 -3
- package/esm2015/lib/component/payment/payment.component.js +149 -66
- package/esm2015/lib/component/transaction-card/transaction-card-invoice/transaction-card-invoice.component.js +50 -48
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-order.component.js +3 -1
- package/esm2015/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/transaction-cash-register-payment-dialog.component.js +3 -2
- package/esm2015/lib/component/transaction-confirmation-history/transaction-confirmation-history.component.js +3 -1
- package/esm2015/lib/component/transaction-header/transaction-header-payment/transaction-header-payment.component.js +2 -1
- package/esm2015/lib/component/transaction-header-fields/transaction-header-remaining-amount.component.js +2 -2
- package/esm2015/lib/component/transaction-line/transaction-invoice-line/transaction-invoice-line-base.component.js +13 -3
- package/esm2015/lib/component/transaction-line/transaction-invoice-line/transaction-invoice-line.component.js +15 -11
- package/esm2015/lib/component/transaction-line/transaction-order-delivery-line/transaction-order-delivery-line-base.component.js +20 -7
- package/esm2015/lib/component/transaction-line/transaction-order-delivery-line/transaction-order-delivery-line.component.js +3 -2
- package/esm2015/lib/component/transaction-line/transaction-overview-line/transaction-overview-line.component.js +8 -4
- package/esm2015/lib/component/transaction-line/transaction-picked-line/transaction-picked-line.component.js +4 -2
- package/esm2015/lib/component/transaction-line/transaction-picked-line/transaction-picked-line.module.js +4 -3
- package/esm2015/lib/component/transaction-line/transaction-purchase-line/transaction-purchase-line-base.component.js +3 -2
- package/esm2015/lib/component/transaction-line/transaction-purchase-line/transaction-purchase-line.component.js +2 -1
- package/esm2015/lib/component/transaction-line/transaction-purchase-line/transaction-purchase-line.module.js +4 -2
- package/esm2015/lib/component/transaction-line/transaction-purchase-order-line/transaction-purchase-order-line-base.component.js +3 -3
- package/esm2015/lib/component/transaction-line/transaction-purchase-order-line/transaction-purchase-order-line.component.js +20 -13
- package/esm2015/lib/component/transaction-line/transaction-purchase-order-line/transaction-purchase-order-line.module.js +6 -5
- package/esm2015/lib/component/transaction-line/transaction-to-be-picked-line/transaction-to-be-picked-line.component.js +4 -2
- package/esm2015/lib/component/transaction-line/transaction-to-be-picked-line/transaction-to-be-picked-line.module.js +4 -3
- package/esm2015/lib/component/transaction-line-action-buttons/transaction-line-action-buttons-popup.component.js +2 -2
- package/esm2015/lib/component/transaction-line-fields/transaction-line-confirmed-delivery-date-button.component.js +108 -0
- package/esm2015/lib/component/transaction-line-fields/transaction-line-confirmed-delivery-date-button.module.js +21 -0
- package/esm2015/lib/component/transaction-line-fields/transaction-line-confirmed-price/transaction-line-confirmed-price.component.js +72 -0
- package/esm2015/lib/component/transaction-line-fields/transaction-line-confirmed-price/transaction-line-confirmed-price.module.js +24 -0
- package/esm2015/lib/component/transaction-line-fields/transaction-line-price/transaction-line-price.component.js +3 -3
- package/esm2015/lib/component/transaction-line-fields/transaction-line-price/transaction-line-price.module.js +4 -3
- package/esm2015/lib/component/transaction-line-fields/transaction-line-quantity.component.js +2 -1
- package/esm2015/lib/component/transaction-line-fields/transaction-line-supplier-button.component.js +4 -2
- package/esm2015/lib/component/transaction-line-fields/transaction-line-supplier.component.js +1 -1
- package/esm2015/lib/component/transaction-line-purchase-confirmation/transaction-line-purchase-confirmation.component.js +4 -4
- package/esm2015/lib/component/transaction-line-sales-allocation/transaction-line-sales-allocation.component.js +14 -12
- package/esm2015/lib/component/transaction-line-sales-allocation/transaction-line-sales-allocation.module.js +7 -3
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-invoice/transaction-quick-access-invoice.component.js +14 -14
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/transaction-quick-access-order-confirmation.component.js +45 -43
- package/esm2015/lib/component/transaction-quick-access/transaction-quick-access-order-delivery/transaction-quick-access-order-delivery.component.js +2 -2
- package/esm2015/lib/component/transaction-search/transaction-search-tile/transaction-statusbar/transaction-statusbar.component.js +2 -2
- package/esm2015/lib/enum/icon.enum.js +2 -1
- package/esm2015/lib/model/icon-svg.js +2 -1
- package/esm2015/lib/res/dictionary/dictionaries.js +3 -3
- package/esm2015/lib/service/payment.service.js +18 -18
- package/esm2015/lib/service/relation.service.js +18 -10
- package/esm2015/lib/service/transaction-base.service.js +3 -4
- package/esm2015/lib/service/transaction-connector-adapter.service.js +16 -4
- package/esm2015/lib/service/transaction-connector.service.js +6 -1
- package/esm2015/lib/service/transaction-event.service.js +2 -1
- package/esm2015/lib/service/transaction.service.js +5 -22
- package/esm2015/lib/transaction-version.js +3 -3
- package/fesm2015/colijnit-transaction.js +680 -381
- package/fesm2015/colijnit-transaction.js.map +1 -1
- package/lib/component/checkout/checkout.component.d.ts +6 -3
- package/lib/component/core/base/transaction-base.component.d.ts +2 -0
- package/lib/component/dialog/dialog-header-search/style/_layout.scss +1 -0
- package/lib/component/dialog/dialog-header-search/style/_material-definition.scss +2 -1
- package/lib/component/dialog/transaction-line/dialog-transaction-line-commission-code/style/_material-definition.scss +1 -1
- package/lib/component/payment/payment.component.d.ts +22 -14
- package/lib/component/payment/style/_layout.scss +1 -0
- package/lib/component/payment/style/_material-definition.scss +1 -0
- package/lib/component/transaction-cash-register-order/transaction-cash-register-order.component.d.ts +1 -0
- package/lib/component/transaction-cash-register-order/transaction-cash-register-payment-dialog/transaction-cash-register-payment-dialog.component.d.ts +1 -0
- package/lib/component/transaction-header/transaction-header-popup/style/_layout.scss +11 -0
- package/lib/component/transaction-header/transaction-header-popup/style/_material-definition.scss +3 -0
- package/lib/component/transaction-header-fields/transaction-header-remaining-amount.component.d.ts +0 -1
- package/lib/component/transaction-line/transaction-invoice-line/transaction-invoice-line-base.component.d.ts +2 -1
- package/lib/component/transaction-line/transaction-line/style/_layout.scss +1 -1
- package/lib/component/transaction-line/transaction-order-delivery-line/transaction-order-delivery-line-base.component.d.ts +3 -1
- package/lib/component/transaction-line/transaction-purchase-order-line/style/_layout.scss +9 -3
- package/lib/component/transaction-line/transaction-purchase-order-line/transaction-purchase-order-line.component.d.ts +0 -1
- package/lib/component/transaction-line-fields/transaction-line-confirmed-delivery-date-button.component.d.ts +34 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-delivery-date-button.module.d.ts +2 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-price/style/_layout.scss +17 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-price/style/_material-definition.scss +1 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-price/style/_theme.scss +4 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-price/style/material.scss +4 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-price/transaction-line-confirmed-price.component.d.ts +17 -0
- package/lib/component/transaction-line-fields/transaction-line-confirmed-price/transaction-line-confirmed-price.module.d.ts +2 -0
- package/lib/component/transaction-line-purchase-confirmation/style/_layout.scss +2 -2
- package/lib/component/transaction-line-sales-allocation/style/_layout.scss +4 -15
- package/lib/component/transaction-line-side-panel/style/_layout.scss +18 -0
- package/lib/component/transaction-lines/style/material.scss +1 -0
- package/lib/component/transaction-quick-access/transaction-quick-access-order-confirmation/transaction-quick-access-order-confirmation.component.d.ts +3 -3
- package/lib/enum/icon.enum.d.ts +1 -0
- package/lib/res/dictionary/dictionaries.d.ts +31 -2
- package/lib/service/payment.service.d.ts +2 -2
- package/lib/service/relation.service.d.ts +1 -0
- package/lib/service/transaction-base.service.d.ts +0 -1
- package/lib/service/transaction-connector-adapter.service.d.ts +1 -0
- package/lib/service/transaction-connector.service.d.ts +1 -0
- package/lib/service/transaction-event.service.d.ts +1 -0
- package/lib/service/transaction.service.d.ts +2 -3
- package/lib/style/_variables.scss +5 -3
- package/lib/style/transaction-globals.scss +4 -0
- package/package.json +3 -3
- package/esm2015/lib/component/transaction-line-fields/transaction-purchase-portal-line-confirmed-price.component.js +0 -72
- package/esm2015/lib/component/transaction-line-fields/transaction-purchase-portal-line-confirmed-price.module.js +0 -23
- package/lib/component/transaction-line-fields/transaction-purchase-portal-line-confirmed-price.component.d.ts +0 -15
- package/lib/component/transaction-line-fields/transaction-purchase-portal-line-confirmed-price.module.d.ts +0 -2
|
@@ -69,7 +69,6 @@ export class TransactionBaseService {
|
|
|
69
69
|
this.purchasePortalLine = [];
|
|
70
70
|
this.docDeliveryBatch = new DocDeliveryBatch();
|
|
71
71
|
this.internalParameterAllowsDropShipment = false;
|
|
72
|
-
this.internalParameterPartialInvoice = false;
|
|
73
72
|
this.internalParameterReceiveGoodsWithDataTerminal = false;
|
|
74
73
|
this.internalParameterPakBinnen = false;
|
|
75
74
|
this.articleAmount = 0;
|
|
@@ -387,12 +386,12 @@ export class TransactionBaseService {
|
|
|
387
386
|
request.transNr = parseInt(salesOrders[j].refTransactionNr);
|
|
388
387
|
const transSearchResult = yield this.searchTransactions(request);
|
|
389
388
|
if (transSearchResult.transactions && transSearchResult.transactions.length > 0) {
|
|
390
|
-
refTransactions.push(new TransactionRefTransaction(transSearchResult.transactions[0].transNr.toString(), transSearchResult.transactions[0].transactionKind, transSearchResult.transactions[0].relationNr, transSearchResult.transactions[0].relationName));
|
|
389
|
+
refTransactions.push(new TransactionRefTransaction(transSearchResult.transactions[0].transId, transSearchResult.transactions[0].transNr.toString(), transSearchResult.transactions[0].transactionKind, transSearchResult.transactions[0].relationNr, transSearchResult.transactions[0].relationName));
|
|
391
390
|
}
|
|
392
391
|
}
|
|
393
392
|
}
|
|
394
393
|
transLine.refTransactions = refTransactions;
|
|
395
|
-
this.transactionEventService.
|
|
394
|
+
this.transactionEventService.transactionLineRefTransactionsChanged.next(transLine);
|
|
396
395
|
}));
|
|
397
396
|
}
|
|
398
397
|
}
|
|
@@ -483,4 +482,4 @@ TransactionBaseService.ctorParameters = () => [
|
|
|
483
482
|
{ type: TransactionEventService },
|
|
484
483
|
{ type: RelationService }
|
|
485
484
|
];
|
|
486
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFOUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDNUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFD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YW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxvY2stcmVzdWx0LmJvJztcclxuaW1wb3J0IHtPcHRpb25zU2VydmljZX0gZnJvbSAnLi9vcHRpb25zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0RpYWxvZ1NlcnZpY2V9IGZyb20gJy4vZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uQ29ubmVjdG9yU2VydmljZX0gZnJvbSAnLi90cmFuc2FjdGlvbi1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7U2hhcmVkU2VydmljZX0gZnJvbSAnQGNvbGlqbml0L3NoYXJlZGNvbXBvbmVudHMnO1xyXG5pbXBvcnQge0FydGljbGVDb25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL2FydGljbGUtY29ubmVjdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge0RpY3Rpb25hcnlTZXJ2aWNlfSBmcm9tICcuL2RpY3Rpb25hcnkuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25FdmVudFNlcnZpY2V9IGZyb20gJy4vdHJhbnNhY3Rpb24tZXZlbnQuc2VydmljZSc7XHJcbmltcG9ydCB7UmVsYXRpb25TZXJ2aWNlfSBmcm9tICcuL3JlbGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25LaW5kfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW0nO1xyXG5pbXBvcnQge1JlbGF0aW9ufSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24uYm8nO1xyXG5pbXBvcnQge0N1c3RvbWVyRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL2N1c3RvbWVyLWZ1bGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtTdXBwbGllckZ1bGxPYmplY3R9IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9zdXBwbGllci1mdWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtQdXJjaGFzZVBvcnRhbExpbmV9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9wdXJjaGFzZS1wb3J0YWwtbGluZS5ibyc7XHJcbmltcG9ydCB7RG9jRGVsaXZlcnlCYXRjaH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RvYy1kZWxpdmVyeS1iYXRjaC5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lVHlwZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24tbGluZS10eXBlLmVudW0nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm8sIFRyYW5zYWN0aW9uUmVmVHJhbnNhY3Rpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1saW5lLWluZm8uYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb0hpc3Rvcnl9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLWhpc3RvcnkuYm8nO1xyXG5pbXBvcnQge0dldFB1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2dldC1wdXJjaGFzZS1wb3J0YWwtbGluZSc7XHJcbmltcG9ydCB7UmVmVHJhbnNhY3Rpb259IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWYtdHJhbnNhY3Rpb24uYm8nO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3R9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtdmlldy1yZXF1ZXN0JztcclxuaW1wb3J0IHtUcmFuc2FjdGlvblNlYXJjaFJlc3VsdH0gZnJvbSAnLi4vbW9kZWwvdHJhbnNhY3Rpb24tc2VhcmNoLXJlc3VsdCc7XHJcbmltcG9ydCB7UmVsYXRpb25TbWFsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXNtYWxsLW9iamVjdC5ibyc7XHJcbmltcG9ydCB7UmVsYXRpb25LaW5kfSBmcm9tICdAY29saWpuaXQvYXJ0aWNsZWFwaS9idWlsZC9lbnVtL3JlbGF0aW9uLWtpbmQuZW51bSc7XHJcbmltcG9ydCB7UmVsYXRpb25TdGF0dXN9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVsYXRpb24tc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uVHlwZUNhdGVnb3J5fSBmcm9tICcuLi9lbnVtL3RyYW5zYWN0aW9uLXR5cGUtY2F0ZWdvcnkuZW51bSc7XHJcbmltcG9ydCB7SWNvbn0gZnJvbSAnLi4vZW51bS9pY29uLmVudW0nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CYXNlU2VydmljZSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVsYXRpb25DbGFzc0Zyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIHR5cGVvZiBSZWxhdGlvbj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgdHlwZW9mIFJlbGF0aW9uPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIEN1c3RvbWVyRnVsbE9iamVjdF0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFN1cHBsaWVyRnVsbE9iamVjdF0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBDdXN0b21lckZ1bGxPYmplY3RdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpdGxlRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgXCJSRVRBSUxcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFwiUFVSQ0hBU0VcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBcIlFVT1RBVElPTlwiXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9pY29uRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgSWNvbj4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgSWNvbj4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBJY29uLkNhcnRTaG9wcGluZ1JlZ3VsYXJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBJY29uLlBhbGxldEJveGVzU2hhcnBSZWd1bGFyXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIEljb24uUmVndWxhckNhcnRTaG9wcGluZ0NpcmNsZVF1ZXN0aW9uXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZWZhdWx0QWN0aXZlUnVicmljRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnk+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5PihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJPdmVydmlld10sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlB1cmNoYXNlT3JkZXJPdmVydmlld10sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyUXVvdGF0aW9uXVxyXG4gIF0pO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9jaGVja291dFBheW1lbnRTdGVwVGl0bGVGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBcIk9WRVJWSUVXX0FORF9QQVlNRU5UXCJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyLCBcIk9WRVJWSUVXXCJdXHJcbiAgXSk7XHJcblxyXG4gIHB1YmxpYyBsb2dvdXQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHB1YmxpYyB0cmFuc2FjdGlvblVwZGF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPih1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyByZWxhdGlvblVwZGF0ZWQ6IEJlaGF2aW9yU3ViamVjdDxSZWxhdGlvbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJlbGF0aW9uPih1bmRlZmluZWQpO1xyXG4gIHB1YmxpYyB0cmFuc2FjdGlvbktpbmRTZXQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG5cclxuICBwdWJsaWMgY3VycmVudEJyYW5jaDogc3RyaW5nID0gXCIxXCI7IC8vIGN1cnJlbnQgdXNlciBicmFuY2gsIG5lZWRzIHRvIGJlIHNldCBiZWZvcmUgd2UgY2FuIGRvIGFueXRoaW5nIHdpdGggdHJhbnNhY3Rpb25zXHJcbiAgcHVibGljIGF1dG9TYXZlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGFwcGxpY2F0aW9uVXNlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnZvaWNlQWRkcmVzc1NhbWVBc0RlbGl2ZXJ5OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgc2V0IGFjdGl2ZVJ1YnJpYyh2YWx1ZTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkpIHtcclxuICAgIHRoaXMuX2FjdGl2ZVJ1YnJpYyA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5hY3RpdmVSdWJyaWNDaGFuZ2UubmV4dCh0aGlzLl9hY3RpdmVSdWJyaWMpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhY3RpdmVSdWJyaWMoKTogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZVJ1YnJpYztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZWxhdGlvbk9uUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgZ2V0IHRpdGxlRm9yQ2hlY2tvdXQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90aXRsZUZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaWNvbkZvckNoZWNrb3V0KCk6IEljb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ljb25Gcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBheW1lbnRTdGVwVGl0bGVGb3JDaGVja291dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoZWNrb3V0UGF5bWVudFN0ZXBUaXRsZUZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNhY3Rpb25LaW5kKHZhbHVlOiBUcmFuc2FjdGlvbktpbmQpIHtcclxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbktpbmQgIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3RyYW5zYWN0aW9uS2luZCA9IHZhbHVlO1xyXG4gICAgICB0aGlzLmFjdGl2ZVJ1YnJpYyA9IHRoaXMuX2RlZmF1bHRBY3RpdmVSdWJyaWNGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uS2luZFNldC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbktpbmQoKTogVHJhbnNhY3Rpb25LaW5kIHtcclxuICAgIHJldHVybiB0aGlzLl90cmFuc2FjdGlvbktpbmQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3VycmVudFRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IG5ldyBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSgpO1xyXG4gIHB1YmxpYyBoYXNUcmFuc2FjdGlvbkxpbmVzOiBib29sZWFuO1xyXG5cclxuICBwdWJsaWMgc2V0IHB1cmNoYXNlT3JkZXJzQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyR2VuZXJhdGVQdXJjaGFzZU9yZGVyc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHB1cmNoYXNlT3JkZXJzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZWNlaXZlR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5wdXJjaGFzZU9yZGVyUmVjZWl2ZUdvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlY2VpdmVHb29kc0NvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWNlaXZlR29vZHNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFsbG9jYXRlR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckFsbG9jYXRlR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJQaWNraW5nR29vZHNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BpY2tpbmdHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyUGlja2luZ0dvb2RzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3BpY2tpbmdHb29kc0NvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJQaWNrZWRDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3BpY2tlZENvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyUGlja2VkQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3BpY2tlZENvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl90b0JlUGlja2VkQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJUb0JlUGlja2VkQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3RvQmVQaWNrZWRDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhbGxvY2F0ZUdvb2RzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHB1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UucHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkZWxpdmVyeUNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlckRlbGl2ZXJ5Q29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX2RlbGl2ZXJ5Q29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZGVsaXZlcnlDb21wbGV0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGludm9pY2VDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ludm9pY2VDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuaW52b2ljZUNvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9pbnZvaWNlQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgaW52b2ljZUNvbXBsZXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnZvaWNlQ29tcGxldGVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCByZWxhdGlvbih2YWx1ZTogUmVsYXRpb24pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9yZWxhdGlvbiA9IHZhbHVlO1xyXG4gICAgICB0aGlzLnJlbGF0aW9uVXBkYXRlZC5uZXh0KHRoaXMuX3JlbGF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcbiAgcHVibGljIGdldCByZWxhdGlvbigpOiBSZWxhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVsYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHRyYW5zYWN0aW9uRGlydHkodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3RyYW5zYWN0aW9uRGlydHkgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25IZWFkZXJEaXJ0eS5uZXh0KHRoaXMuX3RyYW5zYWN0aW9uRGlydHkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmFuc2FjdGlvbkRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uRGlydHk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcHVyY2hhc2VQb3J0YWxMaW5lOiBQdXJjaGFzZVBvcnRhbExpbmVbXSA9IFtdO1xyXG4gIHB1YmxpYyBkb2NEZWxpdmVyeUJhdGNoOiBEb2NEZWxpdmVyeUJhdGNoID0gbmV3IERvY0RlbGl2ZXJ5QmF0Y2goKVxyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlckFsbG93c0Ryb3BTaGlwbWVudDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlclBhcnRpYWxJbnZvaWNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyUmVjZWl2ZUdvb2RzV2l0aERhdGFUZXJtaW5hbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlclBha0Jpbm5lbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFtb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uTGluZUFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2FjdGl2ZVJ1YnJpYzogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkgPSBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyT3ZlcnZpZXc7XHJcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQgPSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlcjtcclxuICBwcml2YXRlIF9yZWxhdGlvbjogUmVsYXRpb24gPSBuZXcgUmVsYXRpb24oKTtcclxuICBwcml2YXRlIF9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlY2VpdmVHb29kc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9waWNraW5nR29vZHNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9waWNrZWRDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF90b0JlUGlja2VkQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2RlbGl2ZXJ5Q29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaW52b2ljZUNvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2FscmVhZHlMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF90cmFuc2FjdGlvbkRpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGNvbm5lY3RvcjogVHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYXJ0aWNsZUNvbm5lY3RvcjogQXJ0aWNsZUNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlOiBUcmFuc2FjdGlvbkV2ZW50U2VydmljZSxcclxuICAgIHByb3RlY3RlZCByZWxhdGlvblNlcnZpY2U6IFJlbGF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQob3B0aW9uczogYW55LCByZXNldEN1cnJlbnRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZXNldEN1cnJlbnRUcmFuc2FjdGlvbikge1xyXG4gICAgICB0aGlzLnJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUob3B0aW9ucyk7XHJcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaW5pdChvcHRpb25zKTtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuY29ubmVjdGlvbkluaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlTmV3UmVsYXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBjbGF6ejogdHlwZW9mIFJlbGF0aW9uID0gdGhpcy5fZ2V0UmVsYXRpb25DbGFzcyh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgICB0aGlzLnJlbGF0aW9uID0gbmV3IGNsYXp6O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UoKTtcclxuICAgIHRoaXMuX3JlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb24ocmVtZW1iZXJUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQpXHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0TG9ja1RyYW5zYWN0aW9uKCk7XHJcbiAgICAgIGlmIChyZW1lbWJlclRyYW5zYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21taXQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLl9yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvbW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgcm9sbGJhY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iucm9sbGJhY2soKTtcclxuICAgIGlmIChyb2xsYmFja1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5fcmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgICAgaWYgKHJlZnJlc2ggJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCkge1xyXG4gICAgICAgIHRoaXMuZ2V0UmVmcmVzaGVkVHJhbnNhY3Rpb25Gcm9tRGF0YWJhc2UodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvbGxiYWNrU3VjY2VzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKHRyYW5zYWN0aW9uTnI6IG51bWJlciwgdHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQodHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5yKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVmcmVzaGVkVHJhbnNhY3Rpb25Gcm9tRGF0YWJhc2UodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZyZXNoZWRUcmFuc2FjdGlvbkZyb21EYXRhYmFzZSh0cmFuc2FjdGlvbklkKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViU2Vzc2lvblNhbGVzT3JkZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRXZWJTZXNzaW9uU2FsZXNPcmRlcigpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB0cnlUb0xvY2tUcmFuc2FjdGlvbihpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNlY29uZEF0dGVtcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFpZCkgeyAvLyBpdCdzIGEgbmV3IHRyYW5zYWN0aW9uLCBubyBuZWVkIHRvIGxvY2tcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9hbHJlYWR5TG9ja2VkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9ja1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkxvY2tSZXN1bHQgPSBhd2FpdCB0aGlzLl9sb2NrVHJhbnNhY3Rpb24oaWQsIHZlcnNpb24pO1xyXG4gICAgaWYgKGxvY2tSZXNwb25zZSkge1xyXG4gICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xvY2tTdWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKHNlY29uZEF0dGVtcHQpIHsgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3IoXCJUUkFOU0FDVElPTl9WRVJTSU9OX01JU01BVENIX0VSUk9SXCIsIHRydWUpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xhdGVzdFZlcnNpb24pIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93VG9hc3QoXCJUUkFOU0FDVElPTl9WRVJTSU9OX01JU01BVENIXCIsIHRydWUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQoaWQpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmhpZGVUb2FzdEFmdGVyTXMoMzAwMCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgbG9ja0RldGFpbHM6IHN0cmluZyA9IGAke3RoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KFwiQllcIil9OiAke2xvY2tSZXNwb25zZS5sb2NrZWRCeX1cclxuICAgICAgICAgICAgICAgICR7dGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJTSU5DRVwiLCBmYWxzZSl9ICR7bG9ja1Jlc3BvbnNlLmxvY2tlZFNpbmNlLnRvTG9jYWxlU3RyaW5nKCl9YDtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3IoXCJUUkFOU0FDVElPTl9BTFJFQURZX0xPQ0tFRFwiLCB0cnVlLCBsb2NrRGV0YWlscyk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FscmVhZHlMb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25JbmZvKHRyYW5zSWQ6IG51bWJlciwgbGluZUlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb0hpc3RvcnlbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uSW5mbyh0cmFuc0lkLCBsaW5lSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFJlZlRyYW5zYWN0aW9uW10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0OiBHZXRQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPFB1cmNoYXNlUG9ydGFsTGluZVtdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb25BbmRDb21taXQocmVzcG9uc2U/OiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gd2UgY2FuIHNhZmVseSBzYXZlL2NvbW1pdCB0aGUgY2hhbmdlc1xyXG4gICAgY29uc3Qgc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zYXZlVHJhbnNhY3Rpb24oZmFsc2UpO1xyXG4gICAgaWYgKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlICYmIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHdlIG5lZWQgdG8gZG8gYW4gZXh0cmEgY29tbWl0IHRvIHJlbGVhc2UgdGhlIGxvY2tcclxuICAgIC8vIGNvbnN0IGNvbW1pdFN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgcmV0dXJuIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlICYmIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlLmlzU3VjY2VzcyAvKiYmIGNvbW1pdFN1Y2Nlc3MqLztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih2YWx1ZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2hhbmRsZUJlZm9yZVJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uS2luZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQ7XHJcbiAgICB0aGlzLmhhc1RyYW5zYWN0aW9uTGluZXMgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuX3NldEFtb3VudCgpO1xyXG4gICAgdGhpcy5fY2hlY2tIZWFkZXJTdGF0dXMoKTtcclxuICAgIHRoaXMuY2hlY2tSZWZUcmFuc2FjdGlvbigpOyAvLyB0b2RvOiBnZXQgZnJvbSB0aGUgaGVhZGVyIHN0YXR1c1xyXG4gICAgaWYgKHRoaXMuZ2V0UmVsYXRpb25PblJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICB0aGlzLl9nZXRSZWxhdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24pO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvblNldC5uZXh0KHRoaXMuY3VycmVudFRyYW5zYWN0aW9uKTtcclxuICAgIGF3YWl0IHRoaXMuX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jaGVja0hlYWRlclN0YXR1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMpIHtcclxuICAgICAgLy9zYWxlcyBvcmRlclxyXG4gICAgICB0aGlzLnB1cmNoYXNlT3JkZXJzQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseU9yZGVyZWQ7XHJcbiAgICAgIHRoaXMuYWxsb2NhdGVHb29kc0NvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlBbGxvY2F0ZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlQaWNrZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5VG9CZVBpY2tlZDtcclxuICAgICAgdGhpcy5kZWxpdmVyeUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlEZWxpdmVyZWQ7XHJcbiAgICAgIHRoaXMuaW52b2ljZUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlJbnZvaWNlZDtcclxuICAgICAgLy8gcHVyY2hhc2VcclxuICAgICAgdGhpcy5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVB1cmNoYXNlQ29uZmlybWVkO1xyXG4gICAgICB0aGlzLnJlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJQYWtCaW5uZW4gPyB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UmVjZWl2ZWRVblByb2Nlc3NlZCA6IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlSZWNlaXZlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGVja1JlZlRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrUmVmVHJhbnNhY3Rpb25zKCkpIHtcclxuICAgICAgY29uc3QgdHJhbnNJZDogbnVtYmVyID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xyXG4gICAgICBpZiAoIXRyYW5zSWQpIHsgLy8gbmV3IHRyYW5zYWN0aW9uLCBnZXQgb3V0XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFydGljbGVUcmFuc0xpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcih0ID0+IHQuaXNBcnRpY2xlKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnRpY2xlVHJhbnNMaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByZWZUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uUmVmVHJhbnNhY3Rpb25bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbyA9IGFydGljbGVUcmFuc0xpbmVzW2ldO1xyXG4gICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkKS50aGVuKGFzeW5jIChyZWZzOiBSZWZUcmFuc2FjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVmcyAmJiByZWZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2FsZXNPcmRlcnM6IFJlZlRyYW5zYWN0aW9uW10gPSByZWZzLmZpbHRlcihyID0+IHIucmVmVHJhbnNhY3Rpb25UeXBlID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlcik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2FsZXNPcmRlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0ID0gbmV3IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QoKTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uS2luZCA9IHNhbGVzT3JkZXJzW2pdLnJlZlRyYW5zYWN0aW9uVHlwZTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zTnIgPSBwYXJzZUludChzYWxlc09yZGVyc1tqXS5yZWZUcmFuc2FjdGlvbk5yKTtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFuc1NlYXJjaFJlc3VsdDogVHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQgPSBhd2FpdCB0aGlzLnNlYXJjaFRyYW5zYWN0aW9ucyhyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICBpZiAodHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zICYmIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZWZUcmFuc2FjdGlvbnMucHVzaChuZXcgVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbihcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zTnIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zYWN0aW9uS2luZCxcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnJlbGF0aW9uTnIsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS5yZWxhdGlvbk5hbWUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJhbnNMaW5lLnJlZlRyYW5zYWN0aW9ucyA9IHJlZlRyYW5zYWN0aW9ucztcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UudHJhbnNhY3Rpb25MaW5lQ2hhbmdlZC5uZXh0KHRyYW5zTGluZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9oYW5kbGVCZWZvcmVSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfaGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBpbml0aWFsaXplVHJhbnNhY3Rpb24oKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMucmVsYXRpb24pIHtcclxuICAgICAgdGhpcy5yZWxhdGlvbiA9IG5ldyBDdXN0b21lckZ1bGxPYmplY3QoKTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XHJcbiAgICAgIGlmICh0aGlzLnJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gUmVsYXRpb25LaW5kLkN1c3RvbWVyKSB7XHJcbiAgICAgICAgKHRoaXMucmVsYXRpb24gYXMgQ3VzdG9tZXJGdWxsT2JqZWN0KS5yZWxhdGlvblN0YXR1cyA9IFJlbGF0aW9uU3RhdHVzLlJlZ3VsYXJDdXN0b21lcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbGF0aW9uLnN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucHJlZmVycmVkRGVsaXZlcnlEYXRlMiA9IFwiPVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9pc1ZhbGlkVHJhbnNhY3Rpb24oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXNldExvY2tUcmFuc2FjdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2FscmVhZHlMb2NrZWQgPSBmYWxzZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25EaXJ0eSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfbG9ja1RyYW5zYWN0aW9uKHRyYW5zSWQ6IG51bWJlciwgdmVyc2lvbjogbnVtYmVyKTogUHJvbWlzZTxUcmFuc2FjdGlvbkxvY2tSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5sb2NrVHJhbnNhY3Rpb25CeUlkKHRyYW5zSWQsIHZlcnNpb24pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UmVsYXRpb25DbGFzcyh0cmFuc2FjdGlvbktpbmQ6IFRyYW5zYWN0aW9uS2luZCk6IHR5cGVvZiBSZWxhdGlvbiB7XHJcbiAgICBpZiAodGhpcy5fcmVsYXRpb25DbGFzc0Zyb21UcmFuc2FjdGlvbktpbmQuaGFzKHRyYW5zYWN0aW9uS2luZCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kLmdldCh0cmFuc2FjdGlvbktpbmQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFJlbGF0aW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZ2V0UmVsYXRpb24ocmVsYXRpb246IFJlbGF0aW9uU21hbGxPYmplY3QpOiB2b2lkIHtcclxuICAgIGlmIChyZWxhdGlvbikge1xyXG4gICAgICB0aGlzLnJlbGF0aW9uU2VydmljZS5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbi5yZWxhdGlvbklkKS50aGVuKChyZWxhdGlvbk5yOiBzdHJpbmcpID0+IHtcclxuICAgICAgICBpZiAocmVsYXRpb24ucmVsYXRpb25UeXBlID09PSBSZWxhdGlvbktpbmQuQ3VzdG9tZXIpIHtcclxuICAgICAgICAgIHRoaXMucmVsYXRpb25TZXJ2aWNlLmdldEN1c3RvbWVyRnVsbE9iamVjdChwYXJzZUludChyZWxhdGlvbk5yLCAwKSkudGhlbigoY3VzdG9tZXI6IEN1c3RvbWVyRnVsbE9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY3VzdG9tZXIuYWRkcmVzc2VzICYmIGN1c3RvbWVyLmFkZHJlc3Nlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgY3VzdG9tZXIuYWRkcmVzc2VzLnNvcnQoKGEsIGIpID0+IGEuc2VxdWVuY2UgPCBiLnNlcXVlbmNlID8gLTEgOiAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJlbGF0aW9uID0gY3VzdG9tZXI7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gUmVsYXRpb25LaW5kLlN1cHBsaWVyKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbGF0aW9uU2VydmljZS5nZXRTdXBwbGllckZ1bGxPYmplY3QocGFyc2VJbnQocmVsYXRpb25OciwgMCkpLnRoZW4oKHN1cHBsaWVyOiBTdXBwbGllckZ1bGxPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKHN1cHBsaWVyLmFkZHJlc3NlcyAmJiBzdXBwbGllci5hZGRyZXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHN1cHBsaWVyLmFkZHJlc3Nlcy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIDwgYi5zZXF1ZW5jZSA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZWxhdGlvbiA9IHN1cHBsaWVyO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NldEFtb3VudCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzKSB7XHJcbiAgICAgIHRoaXMuYXJ0aWNsZUFtb3VudCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMuZmlsdGVyKHQgPT4gdC5saW5lVHlwZSA9PT0gVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSkubGVuZ3RoO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvdWxkQ2hlY2tSZWZUcmFuc2FjdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiAhIXRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMgJiZcclxuICAgICAgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQgPT09IFRyYW5zYWN0aW9uS2luZC5QdXJjaGFzZU9yZGVyIHx8XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZCA9PT0gVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIgfHxcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24pO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
485
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24tYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHJhbnNhY3Rpb24vc3JjL2xpYi9zZXJ2aWNlL3RyYW5zYWN0aW9uLWJhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvQyxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyREFBMkQsQ0FBQztBQUMxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sK0NBQStDLENBQUM7QUFDdkUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0YsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFOUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNERBQTRELENBQUM7QUFDNUYsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFD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fSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbG9jay1yZXN1bHQuYm8nO1xyXG5pbXBvcnQge09wdGlvbnNTZXJ2aWNlfSBmcm9tICcuL29wdGlvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7RGlhbG9nU2VydmljZX0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlfSBmcm9tICcuL3RyYW5zYWN0aW9uLWNvbm5lY3Rvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtTaGFyZWRTZXJ2aWNlfSBmcm9tICdAY29saWpuaXQvc2hhcmVkY29tcG9uZW50cyc7XHJcbmltcG9ydCB7QXJ0aWNsZUNvbm5lY3RvclNlcnZpY2V9IGZyb20gJy4vYXJ0aWNsZS1jb25uZWN0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7RGljdGlvbmFyeVNlcnZpY2V9IGZyb20gJy4vZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkV2ZW50U2VydmljZX0gZnJvbSAnLi90cmFuc2FjdGlvbi1ldmVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWxhdGlvblNlcnZpY2V9IGZyb20gJy4vcmVsYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2V9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bSc7XHJcbmltcG9ydCB7UmVsYXRpb259IGZyb20gJ0Bjb2xpam5pdC9yZWxhdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi5ibyc7XHJcbmltcG9ydCB7Q3VzdG9tZXJGdWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZnVsbC1vYmplY3QuYm8nO1xyXG5pbXBvcnQge1N1cHBsaWVyRnVsbE9iamVjdH0gZnJvbSAnQGNvbGlqbml0L3JlbGF0aW9uYXBpL2J1aWxkL21vZGVsL3N1cHBsaWVyLWZ1bGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1B1cmNoYXNlUG9ydGFsTGluZX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3B1cmNoYXNlLXBvcnRhbC1saW5lLmJvJztcclxuaW1wb3J0IHtEb2NEZWxpdmVyeUJhdGNofSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZG9jLWRlbGl2ZXJ5LWJhdGNoLmJvJztcclxuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1saW5lLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lSW5mbywgVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvSGlzdG9yeX0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWluZm8taGlzdG9yeS5ibyc7XHJcbmltcG9ydCB7R2V0UHVyY2hhc2VQb3J0YWxMaW5lfSBmcm9tICdAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZ2V0LXB1cmNoYXNlLXBvcnRhbC1saW5lJztcclxuaW1wb3J0IHtSZWZUcmFuc2FjdGlvbn0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlZi10cmFuc2FjdGlvbi5ibyc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdH0gZnJvbSAnQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXNlYXJjaC12aWV3LXJlcXVlc3QnO1xyXG5pbXBvcnQge1RyYW5zYWN0aW9uU2VhcmNoUmVzdWx0fSBmcm9tICcuLi9tb2RlbC90cmFuc2FjdGlvbi1zZWFyY2gtcmVzdWx0JztcclxuaW1wb3J0IHtSZWxhdGlvblNtYWxsT2JqZWN0fSBmcm9tICdAY29saWpuaXQvcmVsYXRpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tc21hbGwtb2JqZWN0LmJvJztcclxuaW1wb3J0IHtSZWxhdGlvbktpbmR9IGZyb20gJ0Bjb2xpam5pdC9hcnRpY2xlYXBpL2J1aWxkL2VudW0vcmVsYXRpb24ta2luZC5lbnVtJztcclxuaW1wb3J0IHtSZWxhdGlvblN0YXR1c30gZnJvbSAnQGNvbGlqbml0L2FydGljbGVhcGkvYnVpbGQvZW51bS9yZWxhdGlvbi1zdGF0dXMuZW51bSc7XHJcbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnl9IGZyb20gJy4uL2VudW0vdHJhbnNhY3Rpb24tdHlwZS1jYXRlZ29yeS5lbnVtJztcclxuaW1wb3J0IHtJY29ufSBmcm9tICcuLi9lbnVtL2ljb24uZW51bSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJhc2VTZXJ2aWNlIHtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZDogTWFwPFRyYW5zYWN0aW9uS2luZCwgdHlwZW9mIFJlbGF0aW9uPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCB0eXBlb2YgUmVsYXRpb24+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgQ3VzdG9tZXJGdWxsT2JqZWN0XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgU3VwcGxpZXJGdWxsT2JqZWN0XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIEN1c3RvbWVyRnVsbE9iamVjdF1cclxuICBdKTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfdGl0bGVGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBzdHJpbmc+ID0gbmV3IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4oW1xyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBcIlJFVEFJTFwiXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgXCJQVVJDSEFTRVwiXSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIFwiUVVPVEFUSU9OXCJdXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ljb25Gcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBJY29uPiA9IG5ldyBNYXA8VHJhbnNhY3Rpb25LaW5kLCBJY29uPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIEljb24uQ2FydFNob3BwaW5nUmVndWxhcl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIEljb24uUGFsbGV0Qm94ZXNTaGFycFJlZ3VsYXJdLFxyXG4gICAgW1RyYW5zYWN0aW9uS2luZC5TYWxlc1F1b3RhdGlvbiwgSWNvbi5SZWd1bGFyQ2FydFNob3BwaW5nQ2lyY2xlUXVlc3Rpb25dXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RlZmF1bHRBY3RpdmVSdWJyaWNGcm9tVHJhbnNhY3Rpb25LaW5kOiBNYXA8VHJhbnNhY3Rpb25LaW5kLCBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeT4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnk+KFtcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuU2FsZXNPcmRlck92ZXJ2aWV3XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciwgVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkuUHVyY2hhc2VPcmRlck92ZXJ2aWV3XSxcclxuICAgIFtUcmFuc2FjdGlvbktpbmQuU2FsZXNRdW90YXRpb24sIFRyYW5zYWN0aW9uVHlwZUNhdGVnb3J5LlNhbGVzT3JkZXJRdW90YXRpb25dXHJcbiAgXSk7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoZWNrb3V0UGF5bWVudFN0ZXBUaXRsZUZyb21UcmFuc2FjdGlvbktpbmQ6IE1hcDxUcmFuc2FjdGlvbktpbmQsIHN0cmluZz4gPSBuZXcgTWFwPFRyYW5zYWN0aW9uS2luZCwgc3RyaW5nPihbXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiT1ZFUlZJRVdfQU5EX1BBWU1FTlRcIl0sXHJcbiAgICBbVHJhbnNhY3Rpb25LaW5kLlB1cmNoYXNlT3JkZXIsIFwiT1ZFUlZJRVdcIl1cclxuICBdKTtcclxuXHJcbiAgcHVibGljIGxvZ291dDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uVXBkYXRlZDogQmVoYXZpb3JTdWJqZWN0PFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHJlbGF0aW9uVXBkYXRlZDogQmVoYXZpb3JTdWJqZWN0PFJlbGF0aW9uPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UmVsYXRpb24+KHVuZGVmaW5lZCk7XHJcbiAgcHVibGljIHRyYW5zYWN0aW9uS2luZFNldDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50QnJhbmNoOiBzdHJpbmcgPSBcIjFcIjsgLy8gY3VycmVudCB1c2VyIGJyYW5jaCwgbmVlZHMgdG8gYmUgc2V0IGJlZm9yZSB3ZSBjYW4gZG8gYW55dGhpbmcgd2l0aCB0cmFuc2FjdGlvbnNcclxuICBwdWJsaWMgYXV0b1NhdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYXBwbGljYXRpb25Vc2VyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludm9pY2VBZGRyZXNzU2FtZUFzRGVsaXZlcnk6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBzZXQgYWN0aXZlUnVicmljKHZhbHVlOiBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSkge1xyXG4gICAgdGhpcy5fYWN0aXZlUnVicmljID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLmFjdGl2ZVJ1YnJpY0NoYW5nZS5uZXh0KHRoaXMuX2FjdGl2ZVJ1YnJpYyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFjdGl2ZVJ1YnJpYygpOiBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlUnVicmljO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFJlbGF0aW9uT25SZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHB1YmxpYyBnZXQgdGl0bGVGb3JDaGVja291dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RpdGxlRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpY29uRm9yQ2hlY2tvdXQoKTogSWNvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faWNvbkZyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHRoaXMudHJhbnNhY3Rpb25LaW5kKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcGF5bWVudFN0ZXBUaXRsZUZvckNoZWNrb3V0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tvdXRQYXltZW50U3RlcFRpdGxlRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodGhpcy50cmFuc2FjdGlvbktpbmQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0cmFuc2FjdGlvbktpbmQodmFsdWU6IFRyYW5zYWN0aW9uS2luZCkge1xyXG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uS2luZCAhPT0gdmFsdWUpIHtcclxuICAgICAgdGhpcy5fdHJhbnNhY3Rpb25LaW5kID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuYWN0aXZlUnVicmljID0gdGhpcy5fZGVmYXVsdEFjdGl2ZVJ1YnJpY0Zyb21UcmFuc2FjdGlvbktpbmQuZ2V0KHZhbHVlKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNhY3Rpb25LaW5kU2V0Lm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9uS2luZCgpOiBUcmFuc2FjdGlvbktpbmQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zYWN0aW9uS2luZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gbmV3IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKCk7XHJcbiAgcHVibGljIGhhc1RyYW5zYWN0aW9uTGluZXM6IGJvb2xlYW47XHJcblxyXG4gIHB1YmxpYyBzZXQgcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJHZW5lcmF0ZVB1cmNoYXNlT3JkZXJzQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3B1cmNoYXNlT3JkZXJzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcHVyY2hhc2VPcmRlcnNDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlY2VpdmVHb29kc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcmVjZWl2ZUdvb2RzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnB1cmNoYXNlT3JkZXJSZWNlaXZlR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcmVjZWl2ZUdvb2RzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVjZWl2ZUdvb2RzQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY2VpdmVHb29kc0NvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgYWxsb2NhdGVHb29kc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyQWxsb2NhdGVHb29kc0NvbXBsZXRlZENoYW5nZWQubmV4dCh0aGlzLl9hbGxvY2F0ZUdvb2RzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlclBpY2tpbmdHb29kc0NvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcGlja2luZ0dvb2RzQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJQaWNraW5nR29vZHNDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcGlja2luZ0dvb2RzQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcGlja2VkQ29tcGxldGVkID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnNhbGVzT3JkZXJQaWNrZWRDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fcGlja2VkQ29tcGxldGVkKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3RvQmVQaWNrZWRDb21wbGV0ZWQgPSB2YWx1ZTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2Uuc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fdG9CZVBpY2tlZENvbXBsZXRlZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGFsbG9jYXRlR29vZHNDb21wbGV0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb2NhdGVHb29kc0NvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3B1cmNoYXNlT3JkZXJDb25maXJtYXRpb25Db21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGRlbGl2ZXJ5Q29tcGxldGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kZWxpdmVyeUNvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5zYWxlc09yZGVyRGVsaXZlcnlDb21wbGV0ZWRDaGFuZ2VkLm5leHQodGhpcy5fZGVsaXZlcnlDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkZWxpdmVyeUNvbXBsZXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWxpdmVyeUNvbXBsZXRlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW52b2ljZUNvbXBsZXRlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faW52b2ljZUNvbXBsZXRlZCA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS5pbnZvaWNlQ29tcGxldGVkQ2hhbmdlZC5uZXh0KHRoaXMuX2ludm9pY2VDb21wbGV0ZWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpbnZvaWNlQ29tcGxldGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludm9pY2VDb21wbGV0ZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHJlbGF0aW9uKHZhbHVlOiBSZWxhdGlvbikge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3JlbGF0aW9uID0gdmFsdWU7XHJcbiAgICAgIHRoaXMucmVsYXRpb25VcGRhdGVkLm5leHQodGhpcy5fcmVsYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHJlbGF0aW9uKCk6IFJlbGF0aW9uIHtcclxuICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdHJhbnNhY3Rpb25EaXJ0eSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fdHJhbnNhY3Rpb25EaXJ0eSA9IHZhbHVlO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvbkhlYWRlckRpcnR5Lm5leHQodGhpcy5fdHJhbnNhY3Rpb25EaXJ0eSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9uRGlydHkoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb25EaXJ0eTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwdXJjaGFzZVBvcnRhbExpbmU6IFB1cmNoYXNlUG9ydGFsTGluZVtdID0gW107XHJcbiAgcHVibGljIGRvY0RlbGl2ZXJ5QmF0Y2g6IERvY0RlbGl2ZXJ5QmF0Y2ggPSBuZXcgRG9jRGVsaXZlcnlCYXRjaCgpXHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyQWxsb3dzRHJvcFNoaXBtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGludGVybmFsUGFyYW1ldGVyUmVjZWl2ZUdvb2RzV2l0aERhdGFUZXJtaW5hbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpbnRlcm5hbFBhcmFtZXRlclBha0Jpbm5lbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBwdWJsaWMgYXJ0aWNsZUFtb3VudDogbnVtYmVyID0gMDtcclxuXHJcbiAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uTGluZUFkZGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgX2FjdGl2ZVJ1YnJpYzogVHJhbnNhY3Rpb25UeXBlQ2F0ZWdvcnkgPSBUcmFuc2FjdGlvblR5cGVDYXRlZ29yeS5TYWxlc09yZGVyT3ZlcnZpZXc7XHJcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQgPSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlcjtcclxuICBwcml2YXRlIF9yZWxhdGlvbjogUmVsYXRpb24gPSBuZXcgUmVsYXRpb24oKTtcclxuICBwcml2YXRlIF9wdXJjaGFzZU9yZGVyc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3JlY2VpdmVHb29kc0NvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2FsbG9jYXRlR29vZHNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9waWNraW5nR29vZHNDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9waWNrZWRDb21wbGV0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF90b0JlUGlja2VkQ29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfcHVyY2hhc2VPcmRlckNvbmZpcm1hdGlvbkNvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2RlbGl2ZXJ5Q29tcGxldGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaW52b2ljZUNvbXBsZXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2FscmVhZHlMb2NrZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF90cmFuc2FjdGlvbkRpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSxcclxuICAgIHByb3RlY3RlZCBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIGNvbm5lY3RvcjogVHJhbnNhY3Rpb25Db25uZWN0b3JTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHNoYXJlZFNlcnZpY2U6IFNoYXJlZFNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgYXJ0aWNsZUNvbm5lY3RvcjogQXJ0aWNsZUNvbm5lY3RvclNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZGljdGlvbmFyeVNlcnZpY2U6IERpY3Rpb25hcnlTZXJ2aWNlLFxyXG4gICAgcHJvdGVjdGVkIHRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlOiBUcmFuc2FjdGlvbkV2ZW50U2VydmljZSxcclxuICAgIHByb3RlY3RlZCByZWxhdGlvblNlcnZpY2U6IFJlbGF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGluaXQob3B0aW9uczogYW55LCByZXNldEN1cnJlbnRUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmIChyZXNldEN1cnJlbnRUcmFuc2FjdGlvbikge1xyXG4gICAgICB0aGlzLnJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmluaXRpYWxpemUob3B0aW9ucyk7XHJcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuaW5pdChvcHRpb25zKTtcclxuICAgIGF3YWl0IHRoaXMuY29ubmVjdG9yLmNvbm5lY3QoKTtcclxuICAgIHRoaXMudHJhbnNhY3Rpb25FdmVudFNlcnZpY2UuY29ubmVjdGlvbkluaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlTmV3UmVsYXRpb24oKTogdm9pZCB7XHJcbiAgICBjb25zdCBjbGF6ejogdHlwZW9mIFJlbGF0aW9uID0gdGhpcy5fZ2V0UmVsYXRpb25DbGFzcyh0aGlzLnRyYW5zYWN0aW9uS2luZCk7XHJcbiAgICB0aGlzLnJlbGF0aW9uID0gbmV3IGNsYXp6O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0Q3VycmVudFRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UoKTtcclxuICAgIHRoaXMuX3JlbGF0aW9uID0gbmV3IEN1c3RvbWVyRnVsbE9iamVjdCgpO1xyXG4gICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb24ocmVtZW1iZXJUcmFuc2FjdGlvbjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XHJcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnV1aWQpXHJcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuaXNTdWNjZXNzKSB7XHJcbiAgICAgIHRoaXMuX3Jlc2V0TG9ja1RyYW5zYWN0aW9uKCk7XHJcbiAgICAgIGlmIChyZW1lbWJlclRyYW5zYWN0aW9uKSB7XHJcbiAgICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiByZXNwb25zZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb21taXQoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLl9yZXNldExvY2tUcmFuc2FjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdG9yLmNvbW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHJvbGxiYWNrKHJlZnJlc2g6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3Qgcm9sbGJhY2tTdWNjZXNzOiBib29sZWFuID0gYXdhaXQgdGhpcy5jb25uZWN0b3Iucm9sbGJhY2soKTtcclxuICAgIGlmIChyb2xsYmFja1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5fcmVzZXRMb2NrVHJhbnNhY3Rpb24oKTtcclxuICAgICAgaWYgKHJlZnJlc2ggJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5pZCkge1xyXG4gICAgICAgIHRoaXMuZ2V0UmVmcmVzaGVkVHJhbnNhY3Rpb25Gcm9tRGF0YWJhc2UodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJvbGxiYWNrU3VjY2VzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdDogVHJhbnNhY3Rpb25TZWFyY2hWaWV3UmVxdWVzdCk6IFByb21pc2U8VHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQ+IHtcclxuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rvci5zZWFyY2hUcmFuc2FjdGlvbnMocmVxdWVzdCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbkJ5TnJBbmRLaW5kKHRyYW5zYWN0aW9uTnI6IG51bWJlciwgdHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQodHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5yKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UmVmcmVzaGVkVHJhbnNhY3Rpb25Gcm9tRGF0YWJhc2UodHJhbnNhY3Rpb25JZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZyZXNoZWRUcmFuc2FjdGlvbkZyb21EYXRhYmFzZSh0cmFuc2FjdGlvbklkKTtcclxuICAgIGlmICh0cmFuc2FjdGlvbkluZm9SZXNwb25zZS5pc1N1Y2Nlc3MpIHtcclxuICAgICAgdGhpcy5yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbkluZm9SZXNwb25zZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0V2ViU2Vzc2lvblNhbGVzT3JkZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB0cmFuc2FjdGlvbkluZm9SZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRXZWJTZXNzaW9uU2FsZXNPcmRlcigpO1xyXG4gICAgaWYgKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyB0cnlUb0xvY2tUcmFuc2FjdGlvbihpZDogbnVtYmVyLCB2ZXJzaW9uOiBudW1iZXIsIHNlY29uZEF0dGVtcHQ6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKCFpZCkgeyAvLyBpdCdzIGEgbmV3IHRyYW5zYWN0aW9uLCBubyBuZWVkIHRvIGxvY2tcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9hbHJlYWR5TG9ja2VkKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbG9ja1Jlc3BvbnNlOiBUcmFuc2FjdGlvbkxvY2tSZXN1bHQgPSBhd2FpdCB0aGlzLl9sb2NrVHJhbnNhY3Rpb24oaWQsIHZlcnNpb24pO1xyXG4gICAgaWYgKGxvY2tSZXNwb25zZSkge1xyXG4gICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xvY2tTdWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKHNlY29uZEF0dGVtcHQpIHsgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3IoXCJUUkFOU0FDVElPTl9WRVJTSU9OX01JU01BVENIX0VSUk9SXCIsIHRydWUpO1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWxvY2tSZXNwb25zZS5pc0xhdGVzdFZlcnNpb24pIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93VG9hc3QoXCJUUkFOU0FDVElPTl9WRVJTSU9OX01JU01BVENIXCIsIHRydWUpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5nZXRUcmFuc2FjdGlvbkJ5SWQoaWQpO1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmhpZGVUb2FzdEFmdGVyTXMoMzAwMCk7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy50cnlUb0xvY2tUcmFuc2FjdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQsIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby52ZXJzaW9uLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc3QgbG9ja0RldGFpbHM6IHN0cmluZyA9IGAke3RoaXMuZGljdGlvbmFyeVNlcnZpY2UuZ2V0KFwiQllcIil9OiAke2xvY2tSZXNwb25zZS5sb2NrZWRCeX1cclxuICAgICAgICAgICAgICAgICR7dGhpcy5kaWN0aW9uYXJ5U2VydmljZS5nZXQoXCJTSU5DRVwiLCBmYWxzZSl9ICR7bG9ja1Jlc3BvbnNlLmxvY2tlZFNpbmNlLnRvTG9jYWxlU3RyaW5nKCl9YDtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RXJyb3IoXCJUUkFOU0FDVElPTl9BTFJFQURZX0xPQ0tFRFwiLCB0cnVlLCBsb2NrRGV0YWlscyk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX2FscmVhZHlMb2NrZWQgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb25JbmZvKHRyYW5zSWQ6IG51bWJlciwgbGluZUlkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb0hpc3RvcnlbXT4ge1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uSW5mbyh0cmFuc0lkLCBsaW5lSWQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkOiBudW1iZXIpOiBQcm9taXNlPFJlZlRyYW5zYWN0aW9uW10+IHtcclxuICAgIHJldHVybiBhd2FpdCB0aGlzLmNvbm5lY3Rvci5nZXRSZWZUcmFuc2FjdGlvbnModHJhbnNJZCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0OiBHZXRQdXJjaGFzZVBvcnRhbExpbmUpOiBQcm9taXNlPFB1cmNoYXNlUG9ydGFsTGluZVtdPiB7XHJcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5jb25uZWN0b3IuZ2V0UHVyY2hhc2VQb3J0YWxMaW5lcyhyZXF1ZXN0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb25BbmRDb21taXQocmVzcG9uc2U/OiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgLy8gd2UgY2FuIHNhZmVseSBzYXZlL2NvbW1pdCB0aGUgY2hhbmdlc1xyXG4gICAgY29uc3Qgc2F2ZVRyYW5zYWN0aW9uUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5zYXZlVHJhbnNhY3Rpb24oZmFsc2UpO1xyXG4gICAgaWYgKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlICYmIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlLmlzU3VjY2Vzcykge1xyXG4gICAgICBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgICB0aGlzLnJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlQWZ0ZXJSZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHdlIG5lZWQgdG8gZG8gYW4gZXh0cmEgY29tbWl0IHRvIHJlbGVhc2UgdGhlIGxvY2tcclxuICAgIC8vIGNvbnN0IGNvbW1pdFN1Y2Nlc3M6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLmNvbW1pdCgpO1xyXG4gICAgcmV0dXJuIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlICYmIHNhdmVUcmFuc2FjdGlvblJlc3BvbnNlLmlzU3VjY2VzcyAvKiYmIGNvbW1pdFN1Y2Nlc3MqLztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyByZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih2YWx1ZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuX2hhbmRsZUJlZm9yZVJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHZhbHVlKTtcclxuICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uID0gdmFsdWU7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uS2luZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQ7XHJcbiAgICB0aGlzLmhhc1RyYW5zYWN0aW9uTGluZXMgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTGluZXMubGVuZ3RoID4gMDtcclxuICAgIHRoaXMuX3NldEFtb3VudCgpO1xyXG4gICAgdGhpcy5fY2hlY2tIZWFkZXJTdGF0dXMoKTtcclxuICAgIHRoaXMuY2hlY2tSZWZUcmFuc2FjdGlvbigpOyAvLyB0b2RvOiBnZXQgZnJvbSB0aGUgaGVhZGVyIHN0YXR1c1xyXG4gICAgaWYgKHRoaXMuZ2V0UmVsYXRpb25PblJlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5yZWxhdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICB0aGlzLl9nZXRSZWxhdGlvbih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8ucmVsYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhbnNhY3Rpb25VcGRhdGVkLm5leHQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24pO1xyXG4gICAgdGhpcy50cmFuc2FjdGlvbkV2ZW50U2VydmljZS50cmFuc2FjdGlvblNldC5uZXh0KHRoaXMuY3VycmVudFRyYW5zYWN0aW9uKTtcclxuICAgIGF3YWl0IHRoaXMuX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIF9jaGVja0hlYWRlclN0YXR1cygpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMpIHtcclxuICAgICAgLy9zYWxlcyBvcmRlclxyXG4gICAgICB0aGlzLnB1cmNoYXNlT3JkZXJzQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseU9yZGVyZWQ7XHJcbiAgICAgIHRoaXMuYWxsb2NhdGVHb29kc0NvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlBbGxvY2F0ZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclBpY2tlZENvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlQaWNrZWQ7XHJcbiAgICAgIHRoaXMuc2FsZXNPcmRlclRvQmVQaWNrZWRDb21wbGV0ZWQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5VG9CZVBpY2tlZDtcclxuICAgICAgdGhpcy5kZWxpdmVyeUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlEZWxpdmVyZWQ7XHJcbiAgICAgIHRoaXMuaW52b2ljZUNvbXBsZXRlZCA9IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlJbnZvaWNlZDtcclxuICAgICAgLy8gcHVyY2hhc2VcclxuICAgICAgdGhpcy5wdXJjaGFzZU9yZGVyQ29uZmlybWF0aW9uQ29tcGxldGVkID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmhlYWRlckluZm9TdGF0dXMuaXNGdWxseVB1cmNoYXNlQ29uZmlybWVkO1xyXG4gICAgICB0aGlzLnJlY2VpdmVHb29kc0NvbXBsZXRlZCA9IHRoaXMuaW50ZXJuYWxQYXJhbWV0ZXJQYWtCaW5uZW4gPyB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaGVhZGVySW5mb1N0YXR1cy5pc0Z1bGx5UmVjZWl2ZWRVblByb2Nlc3NlZCA6IHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5oZWFkZXJJbmZvU3RhdHVzLmlzRnVsbHlSZWNlaXZlZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBjaGVja1JlZlRyYW5zYWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3Nob3VsZENoZWNrUmVmVHJhbnNhY3Rpb25zKCkpIHtcclxuICAgICAgY29uc3QgdHJhbnNJZDogbnVtYmVyID0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLmlkO1xyXG4gICAgICBpZiAoIXRyYW5zSWQpIHsgLy8gbmV3IHRyYW5zYWN0aW9uLCBnZXQgb3V0XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGFydGljbGVUcmFuc0xpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcih0ID0+IHQuaXNBcnRpY2xlKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnRpY2xlVHJhbnNMaW5lcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByZWZUcmFuc2FjdGlvbnM6IFRyYW5zYWN0aW9uUmVmVHJhbnNhY3Rpb25bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRyYW5zTGluZTogVHJhbnNhY3Rpb25MaW5lSW5mbyA9IGFydGljbGVUcmFuc0xpbmVzW2ldO1xyXG4gICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMubGVuZ3RoID0gMDtcclxuICAgICAgICB0aGlzLmdldFJlZlRyYW5zYWN0aW9ucyh0cmFuc0lkKS50aGVuKGFzeW5jIChyZWZzOiBSZWZUcmFuc2FjdGlvbltdKSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVmcyAmJiByZWZzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3Qgc2FsZXNPcmRlcnM6IFJlZlRyYW5zYWN0aW9uW10gPSByZWZzLmZpbHRlcihyID0+IHIucmVmVHJhbnNhY3Rpb25UeXBlID09PSBUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlcik7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgc2FsZXNPcmRlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBUcmFuc2FjdGlvblNlYXJjaFZpZXdSZXF1ZXN0ID0gbmV3IFRyYW5zYWN0aW9uU2VhcmNoVmlld1JlcXVlc3QoKTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zYWN0aW9uS2luZCA9IHNhbGVzT3JkZXJzW2pdLnJlZlRyYW5zYWN0aW9uVHlwZTtcclxuICAgICAgICAgICAgICByZXF1ZXN0LnRyYW5zTnIgPSBwYXJzZUludChzYWxlc09yZGVyc1tqXS5yZWZUcmFuc2FjdGlvbk5yKTtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFuc1NlYXJjaFJlc3VsdDogVHJhbnNhY3Rpb25TZWFyY2hSZXN1bHQgPSBhd2FpdCB0aGlzLnNlYXJjaFRyYW5zYWN0aW9ucyhyZXF1ZXN0KTtcclxuICAgICAgICAgICAgICBpZiAodHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zICYmIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICByZWZUcmFuc2FjdGlvbnMucHVzaChuZXcgVHJhbnNhY3Rpb25SZWZUcmFuc2FjdGlvbihcclxuICAgICAgICAgICAgICAgICAgdHJhbnNTZWFyY2hSZXN1bHQudHJhbnNhY3Rpb25zWzBdLnRyYW5zSWQsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc05yLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS50cmFuc2FjdGlvbktpbmQsXHJcbiAgICAgICAgICAgICAgICAgIHRyYW5zU2VhcmNoUmVzdWx0LnRyYW5zYWN0aW9uc1swXS5yZWxhdGlvbk5yLFxyXG4gICAgICAgICAgICAgICAgICB0cmFuc1NlYXJjaFJlc3VsdC50cmFuc2FjdGlvbnNbMF0ucmVsYXRpb25OYW1lKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyYW5zTGluZS5yZWZUcmFuc2FjdGlvbnMgPSByZWZUcmFuc2FjdGlvbnM7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uRXZlbnRTZXJ2aWNlLnRyYW5zYWN0aW9uTGluZVJlZlRyYW5zYWN0aW9uc0NoYW5nZWQubmV4dCh0cmFuc0xpbmUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfaGFuZGxlQmVmb3JlUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgX2hhbmRsZUFmdGVyUmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnJlbGF0aW9uKSB7XHJcbiAgICAgIHRoaXMucmVsYXRpb24gPSBuZXcgQ3VzdG9tZXJGdWxsT2JqZWN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVsYXRpb24ucmVsYXRpb25JZCkge1xyXG4gICAgICBpZiAodGhpcy5yZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFJlbGF0aW9uS2luZC5DdXN0b21lcikge1xyXG4gICAgICAgICh0aGlzLnJlbGF0aW9uIGFzIEN1c3RvbWVyRnVsbE9iamVjdCkucmVsYXRpb25TdGF0dXMgPSBSZWxhdGlvblN0YXR1cy5SZWd1bGFyQ3VzdG9tZXI7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWxhdGlvbi5zdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby5wcmVmZXJyZWREZWxpdmVyeURhdGUyID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPSBcIj1cIjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBfaXNWYWxpZFRyYW5zYWN0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mbyAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8uaWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfcmVzZXRMb2NrVHJhbnNhY3Rpb24oKTogdm9pZCB7XHJcbiAgICB0aGlzLl9hbHJlYWR5TG9ja2VkID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyYW5zYWN0aW9uRGlydHkgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2xvY2tUcmFuc2FjdGlvbih0cmFuc0lkOiBudW1iZXIsIHZlcnNpb246IG51bWJlcik6IFByb21pc2U8VHJhbnNhY3Rpb25Mb2NrUmVzdWx0PiB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0b3IubG9ja1RyYW5zYWN0aW9uQnlJZCh0cmFuc0lkLCB2ZXJzaW9uKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aW9uQ2xhc3ModHJhbnNhY3Rpb25LaW5kOiBUcmFuc2FjdGlvbktpbmQpOiB0eXBlb2YgUmVsYXRpb24ge1xyXG4gICAgaWYgKHRoaXMuX3JlbGF0aW9uQ2xhc3NGcm9tVHJhbnNhY3Rpb25LaW5kLmhhcyh0cmFuc2FjdGlvbktpbmQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9yZWxhdGlvbkNsYXNzRnJvbVRyYW5zYWN0aW9uS2luZC5nZXQodHJhbnNhY3Rpb25LaW5kKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBSZWxhdGlvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldFJlbGF0aW9uKHJlbGF0aW9uOiBSZWxhdGlvblNtYWxsT2JqZWN0KTogdm9pZCB7XHJcbiAgICBpZiAocmVsYXRpb24pIHtcclxuICAgICAgdGhpcy5yZWxhdGlvblNlcnZpY2UuZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb24ucmVsYXRpb25JZCkudGhlbigocmVsYXRpb25Ocjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlbGF0aW9uLnJlbGF0aW9uVHlwZSA9PT0gUmVsYXRpb25LaW5kLkN1c3RvbWVyKSB7XHJcbiAgICAgICAgICB0aGlzLnJlbGF0aW9uU2VydmljZS5nZXRDdXN0b21lckZ1bGxPYmplY3QocGFyc2VJbnQocmVsYXRpb25OciwgMCkpLnRoZW4oKGN1c3RvbWVyOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgaWYgKGN1c3RvbWVyLmFkZHJlc3NlcyAmJiBjdXN0b21lci5hZGRyZXNzZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIGN1c3RvbWVyLmFkZHJlc3Nlcy5zb3J0KChhLCBiKSA9PiBhLnNlcXVlbmNlIDwgYi5zZXF1ZW5jZSA/IC0xIDogMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yZWxhdGlvbiA9IGN1c3RvbWVyO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWxhdGlvbi5yZWxhdGlvblR5cGUgPT09IFJlbGF0aW9uS2luZC5TdXBwbGllcikge1xyXG4gICAgICAgICAgdGhpcy5yZWxhdGlvblNlcnZpY2UuZ2V0U3VwcGxpZXJGdWxsT2JqZWN0KHBhcnNlSW50KHJlbGF0aW9uTnIsIDApKS50aGVuKChzdXBwbGllcjogU3VwcGxpZXJGdWxsT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzdXBwbGllci5hZGRyZXNzZXMgJiYgc3VwcGxpZXIuYWRkcmVzc2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICBzdXBwbGllci5hZGRyZXNzZXMuc29ydCgoYSwgYikgPT4gYS5zZXF1ZW5jZSA8IGIuc2VxdWVuY2UgPyAtMSA6IDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucmVsYXRpb24gPSBzdXBwbGllcjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRBbW91bnQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25MaW5lcykge1xyXG4gICAgICB0aGlzLmFydGljbGVBbW91bnQgPSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzLmZpbHRlcih0ID0+IHQubGluZVR5cGUgPT09IFRyYW5zYWN0aW9uTGluZVR5cGUuQXJ0aWNsZUxpbmUpLmxlbmd0aDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Nob3VsZENoZWNrUmVmVHJhbnNhY3Rpb25zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24gJiYgISF0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkxpbmVzICYmXHJcbiAgICAgICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkluZm8udHJhbnNhY3Rpb25LaW5kID09PSBUcmFuc2FjdGlvbktpbmQuUHVyY2hhc2VPcmRlciB8fFxyXG4gICAgICAgIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uSW5mby50cmFuc2FjdGlvbktpbmQgPT09IFRyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyIHx8XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udHJhbnNhY3Rpb25JbmZvLnRyYW5zYWN0aW9uS2luZCA9PT0gVHJhbnNhY3Rpb25LaW5kLlNhbGVzUXVvdGF0aW9uKTtcclxuICB9XHJcbn1cclxuIl19
|