tnx-shared 5.0.69 → 5.0.70
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/tnx-shared.umd.js +575 -807
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/data-form-base.d.ts +2 -2
- package/classes/base/data-form-base.d.ts.map +1 -1
- package/classes/base/data-list-base.d.ts +1 -3
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/classes/constants.d.ts +0 -4
- package/classes/constants.d.ts.map +1 -1
- package/classes/form-schema.d.ts +4 -38
- package/classes/form-schema.d.ts.map +1 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts +0 -1
- package/components/autocomplete-picker/autocomplete-picker.component.d.ts.map +1 -1
- package/components/common-app-component/common-app-component.d.ts +1 -4
- package/components/common-app-component/common-app-component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/crud/crud-list/crud-list.component.d.ts +1 -6
- package/components/crud/crud-list/crud-list.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.d.ts.map +1 -1
- package/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.d.ts.map +1 -1
- package/components/file-explorer/file-manager/file-manager.component.d.ts +2 -0
- package/components/file-explorer/file-manager/file-manager.component.d.ts.map +1 -1
- package/components/file-explorer/services/download-link.service.d.ts +1 -0
- package/components/file-explorer/services/download-link.service.d.ts.map +1 -1
- package/components/file-explorer/services/file-explorer.service.d.ts +2 -0
- package/components/file-explorer/services/file-explorer.service.d.ts.map +1 -1
- package/components/file-explorer/services/file-object.service.d.ts +1 -0
- package/components/file-explorer/services/file-object.service.d.ts.map +1 -1
- package/components/file-explorer/signature-detail/signature-detail.component.d.ts +8 -0
- package/components/file-explorer/signature-detail/signature-detail.component.d.ts.map +1 -0
- package/components/file-explorer/signature-detail/signature-detail.component.ngfactory.d.ts.map +1 -0
- package/components/file-explorer/signature-detail/signature-detail.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/mask/mask.component.d.ts +0 -2
- package/components/mask/mask.component.d.ts.map +1 -1
- package/configs/component-context.constant.d.ts +0 -1
- package/configs/component-context.constant.d.ts.map +1 -1
- package/esm2015/classes/base/data-form-base.js +5 -5
- package/esm2015/classes/base/data-list-base.js +23 -48
- package/esm2015/classes/constants.js +1 -6
- package/esm2015/classes/form-schema.js +3 -34
- package/esm2015/components/autocomplete-picker/autocomplete-picker.component.js +16 -72
- package/esm2015/components/common-app-component/app.menu.component.js +2 -2
- package/esm2015/components/common-app-component/common-app-component.js +3 -26
- package/esm2015/components/crud/crud-form/crud-form.component.js +2 -9
- package/esm2015/components/crud/crud-list/crud-list.component.js +6 -71
- package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-data/entity-picker-data.component.js +3 -29
- package/esm2015/components/entity-picker/entity-picker-dialog/components/entity-picker-selected/entity-picker-selected.component.js +3 -29
- package/esm2015/components/file-explorer/file-manager/file-manager.component.js +151 -12
- package/esm2015/components/file-explorer/services/download-link.service.js +4 -1
- package/esm2015/components/file-explorer/services/file-explorer.service.js +22 -8
- package/esm2015/components/file-explorer/services/file-object.service.js +15 -1
- package/esm2015/components/file-explorer/signature-detail/signature-detail.component.js +66 -0
- package/esm2015/components/mask/mask.component.js +4 -8
- package/esm2015/components/workflow/services/entity-workflow-history.service.js +3 -3
- package/esm2015/components/workflow/services/entity-workflow-setting.service.js +4 -4
- package/esm2015/configs/component-context.constant.js +2 -3
- package/esm2015/models/grid-info.js +1 -1
- package/esm2015/pipes/tn-date.pipe.js +2 -12
- package/esm2015/public-api.js +7 -3
- package/esm2015/services/base.service.js +1 -16
- package/esm2015/services/common.service.js +1 -9
- package/esm2015/services/crud.service.js +4 -23
- package/esm2015/services/menu.service.js +3 -6
- package/esm2015/services/notifier.service.js +2 -2
- package/esm2015/services/permission.service.js +2 -9
- package/esm2015/services/template-text-v4.service.js +1 -1
- package/esm2015/services/user-v5.service.js +1 -1
- package/esm2015/services/user.service.js +2 -8
- package/esm2015/tnx-shared.js +22 -24
- package/esm2015/tnx-shared.module.js +4 -2
- package/fesm2015/tnx-shared.js +341 -530
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +0 -1
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/pipes/tn-date.pipe.d.ts +0 -2
- package/pipes/tn-date.pipe.d.ts.map +1 -1
- package/public-api.d.ts +6 -2
- package/public-api.d.ts.map +1 -1
- package/services/base.service.d.ts +0 -1
- package/services/base.service.d.ts.map +1 -1
- package/services/common.service.d.ts +0 -4
- package/services/common.service.d.ts.map +1 -1
- package/services/crud.service.d.ts.map +1 -1
- package/services/menu.service.d.ts +1 -1
- package/services/menu.service.d.ts.map +1 -1
- package/services/permission.service.d.ts +0 -1
- package/services/permission.service.d.ts.map +1 -1
- package/services/template-text-v4.service.d.ts.map +1 -1
- package/services/user.service.d.ts.map +1 -1
- package/tnx-shared.d.ts +21 -23
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -2
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
- package/components/file-explorer/models/file-settings.d.ts +0 -46
- package/components/file-explorer/models/file-settings.d.ts.map +0 -1
- package/esm2015/components/file-explorer/models/file-settings.js +0 -60
- package/esm2015/services/organization-base.service.js +0 -57
- package/services/organization-base.service.d.ts +0 -16
- package/services/organization-base.service.d.ts.map +0 -1
- package/services/organization-base.service.ngfactory.d.ts.map +0 -1
|
@@ -564,24 +564,14 @@ export class CrudService {
|
|
|
564
564
|
if (model.hasOwnProperty(sourceField)) {
|
|
565
565
|
valueFilter = model[sourceField];
|
|
566
566
|
if (canAccessSubField(valueFilter)) {
|
|
567
|
-
|
|
568
|
-
valueFilter = valueFilter.map(x => x[subField]);
|
|
569
|
-
}
|
|
570
|
-
else {
|
|
571
|
-
valueFilter = valueFilter[subField];
|
|
572
|
-
}
|
|
567
|
+
valueFilter = valueFilter[subField];
|
|
573
568
|
}
|
|
574
569
|
}
|
|
575
570
|
else if (rootModel) {
|
|
576
571
|
if (rootModel.hasOwnProperty(sourceField)) {
|
|
577
572
|
valueFilter = rootModel[sourceField];
|
|
578
573
|
if (canAccessSubField(valueFilter)) {
|
|
579
|
-
|
|
580
|
-
valueFilter = valueFilter.map(x => x[subField]);
|
|
581
|
-
}
|
|
582
|
-
else {
|
|
583
|
-
valueFilter = valueFilter[subField];
|
|
584
|
-
}
|
|
574
|
+
valueFilter = valueFilter[subField];
|
|
585
575
|
}
|
|
586
576
|
}
|
|
587
577
|
else {
|
|
@@ -597,12 +587,7 @@ export class CrudService {
|
|
|
597
587
|
}
|
|
598
588
|
}
|
|
599
589
|
if (canAccessSubField(temp)) {
|
|
600
|
-
|
|
601
|
-
valueFilter = temp.map(x => x[subField]);
|
|
602
|
-
}
|
|
603
|
-
else {
|
|
604
|
-
valueFilter = temp[subField];
|
|
605
|
-
}
|
|
590
|
+
valueFilter = temp[subField];
|
|
606
591
|
}
|
|
607
592
|
}
|
|
608
593
|
}
|
|
@@ -615,9 +600,6 @@ export class CrudService {
|
|
|
615
600
|
valueFilter = tmpFilter.funcGetValue(valueFilter);
|
|
616
601
|
}
|
|
617
602
|
tmpFilter.value = JSON.stringify(valueFilter);
|
|
618
|
-
if (tmpFilter.modifyValue) {
|
|
619
|
-
valueFilter = tmpFilter.modifyValue(valueFilter);
|
|
620
|
-
}
|
|
621
603
|
tmpFilter.filters = [];
|
|
622
604
|
if (filter.logic && filter.filters) {
|
|
623
605
|
filter.filters.forEach(f => this.deQuyReplaceValue(tmpFilter.filters, f, model, rootModel));
|
|
@@ -722,7 +704,6 @@ export class CrudService {
|
|
|
722
704
|
});
|
|
723
705
|
}
|
|
724
706
|
mergeRefDataToDatasource(dataSource, schema, data) {
|
|
725
|
-
data !== null && data !== void 0 ? data : (data = []);
|
|
726
707
|
const field = schema.field;
|
|
727
708
|
let funcGetLabel = item => item[schema.displayField] || item['label'];
|
|
728
709
|
if (schema.funcGetLabel) {
|
|
@@ -778,4 +759,4 @@ CrudService.ctorParameters = () => [
|
|
|
778
759
|
{ type: DatePipe },
|
|
779
760
|
{ type: NotifierService }
|
|
780
761
|
];
|
|
781
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUF5QixlQUFlLEVBQW9CLFFBQVEsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNZLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyxRQUFrQixFQUNsQixnQkFBaUM7UUFIakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixD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Q047SUFDTCxDQUFDOzs7O1lBL3lCSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWhCb0IsUUFBUTtZQUNwQixnQkFBZ0I7WUFGaEIsUUFBUTtZQWFSLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgVHJlZU5vZGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XHJcbmltcG9ydCB7IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRHJvcGRvd25PcHRpb25zLCBHZXRSZWZEYXRhU2NoZW1hLCBPcGVyYXRvciwgUmVmRmllbGQsIFRyZWVEYXRhT3B0aW9uIH0gZnJvbSAnLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IFZhbGlkYXRpb24gfSBmcm9tICcuLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyB9IGZyb20gJy4uL21vZGVscy93b3JrZmxvdy1jb3JlLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4vY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4vbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4vbm90aWZpZXIuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcnVkU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcclxuICAgICAgICBwcml2YXRlIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZVxyXG4gICAgKSB7IH1cclxuXHJcbiAgICByZW5kZXJEYXRlVGltZShkYXRldGltZSwgZm9ybWF0OiAnbm9ybWFsJyB8ICdmcm9tTm93JyA9ICdmcm9tTm93Jykge1xyXG4gICAgICAgIGlmICghZGF0ZXRpbWUpIHJldHVybiAnJztcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGV0aW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eSBISDptbScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IG1pbGlzZWNvbmQgPSBub3cgLSBkYXRldGltZTtcclxuICAgICAgICBsZXQgdGV4dDEgPSAndHLGsOG7m2MnLCB0ZXh0MiA9ICdIw7RtIHF1YSc7XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAwKSB7XHJcbiAgICAgICAgICAgIHRleHQxID0gJ27hu69hJywgdGV4dDIgPSAnTmfDoHkgbWFpJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMCkge1xyXG4gICAgICAgICAgICAvLyAzMCBnacOieVxyXG4gICAgICAgICAgICByZXR1cm4gYFbDoGkgZ2nDonkgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDkwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIDMwIGdpw6J5IC0gOTAgZ2nDonlcclxuICAgICAgICAgICAgcmV0dXJuIGBN4buZdCBwaMO6dCAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMzAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIDUgcGjDunRcclxuICAgICAgICAgICAgcmV0dXJuIGBWw6BpIHBow7p0ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzNjAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIGTGsOG7m2kgMSB0aeG6v25nXHJcbiAgICAgICAgICAgIHJldHVybiBgJHtNYXRoLmNlaWwobWlsaXNlY29uZCAvIDYwMDAwKX0gcGjDunQgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDE4MDAwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIGTGsOG7m2kgNSB0aeG6v25nXHJcbiAgICAgICAgICAgIHJldHVybiBgVsOgaSBnaeG7nSAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgODY0MDAwMDApIHtcclxuICAgICAgICAgICAgLy8gZMaw4bubaSAxIG5nw6B5XHJcbiAgICAgICAgICAgIGlmIChkYXRldGltZS5nZXREYXRlKCkgPT0gbm93LmdldERhdGUoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke01hdGguY2VpbChtaWxpc2Vjb25kIC8gMzYwMDAwMCl9IGdp4budICR7dGV4dDF9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7dGV4dDJ9IGzDumMgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ0hIOm1tJyl9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRIb3VyQW5kTWludXRlID0gYCBsw7pjICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdISDptbScpfWA7XHJcbiAgICAgICAgaWYgKGRhdGV0aW1lLmdldFllYXIoKSA9PSBub3cuZ2V0WWVhcigpXHJcbiAgICAgICAgICAgICYmIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZURpZmYgPSBub3cuZ2V0RGF0ZSgpIC0gZGF0ZXRpbWUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZURpZmYgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3RleHQyfSR7dGV4dEhvdXJBbmRNaW51dGV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0ZURpZmYgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBIYWkgbmfDoHkgJHt0ZXh0MX0ke3RleHRIb3VyQW5kTWludXRlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGRhdGVEaWZmID09IDMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgQmEgbmfDoHkgJHt0ZXh0MX0ke3RleHRIb3VyQW5kTWludXRlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKFxyXG4gICAgICAgICAgICBkYXRldGltZSxcclxuICAgICAgICAgICAgJ2RkL01NL3l5eXkgSEg6bW0nXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJEYXRlKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ25vcm1hbCcpIHtcclxuICAgICAgICBpZiAoIWRhdGV0aW1lKSByZXR1cm4gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRldGltZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgZGF0ZXRpbWUgPSBuZXcgRGF0ZShkYXRldGltZSArICcnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JtYXQgPT09ICdub3JtYWwnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXknKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5vdzogYW55ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRhdGV0aW1lLmdldE1vbnRoKCkgPT0gbm93LmdldE1vbnRoKClcclxuICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgY29uc3QgZGF5cyA9IGRhdGV0aW1lLmdldERhdGUoKSAtIG5vdy5nZXREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChkYXlzID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSMO0bSBuYXknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdOZ8OgeSBtYWknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSMO0bSBxdWEnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgbuG7r2EnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gLTIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnSGFpIG5nw6B5IHRyxrDhu5tjJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChkYXlzID09IDMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQmEgbmfDoHkgbuG7r2EnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gLTMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQmEgbmfDoHkgdHLGsOG7m2MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ2RkL01NL3l5eXknKTtcclxuICAgIH1cclxuXHJcbiAgICBoaWRlQ29udHJvbEFuZExhYmVsKCkgeyB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKTogRmlsdGVyIHtcclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvciwgdmFsdWUgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJEYXRlKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IERhdGUpOiBGaWx0ZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZTogdGhpcy5nZXREYXRlKHZhbHVlKSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYCR7dmFsdWUuZ2V0RGF0ZSgpfS8ke3ZhbHVlLmdldE1vbnRoKCkgKyAxfS8ke3ZhbHVlLmdldEZ1bGxZZWFyKCl9YDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlckRhdGVJbkxpc3RSYW5nZShmaWVsZDogc3RyaW5nLCBhcnJNaW5NYXg6IERhdGVbXVtdLCBvcGVyYXRvckxlZnQ6IHN0cmluZyA9ICdndGUnLCBvcGVyYXRvclJpZ2h0OiBzdHJpbmcgPSAnbHRlJyk6IEZpbHRlciB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxyXG4gICAgICAgICAgICBmaWx0ZXJzOiBbXVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGFyck1pbk1heC5mb3JFYWNoKG1pbk1heCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0clN0YXJ0ID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzBdKTtcclxuICAgICAgICAgICAgY29uc3Qgc3RyRW5kID0gdGhpcy5nZXRTdHJpbmdEYXRlVmFsdWUobWluTWF4WzFdKTtcclxuICAgICAgICAgICAgcmVzdWx0LmZpbHRlcnMucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ2FuZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkRmlsdGVyKGZpZWxkLCBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsLCBzdHJTdGFydCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLCBzdHJFbmQpXHJcbiAgICAgICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZ0RhdGVWYWx1ZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXRVVENEYXRlKCl9LyR7dmFsdWUuZ2V0VVRDTW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0VVRDRnVsbFllYXIoKX0gJHt2YWx1ZS5nZXRVVENIb3VycygpfToke3ZhbHVlLmdldFVUQ01pbnV0ZXMoKX06JHt2YWx1ZS5nZXRVVENTZWNvbmRzKCl9YDtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZE11bHRpRmlsdGVyQ29udGFpbnMoZmllbGRzOiBzdHJpbmdbXSwgdmFsdWU6IHN0cmluZyk6IEZpbHRlciB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7IGxvZ2ljOiAnb3InLCBmaWx0ZXJzOiBbXSB9KTtcclxuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRGaWx0ZXJDb250YWluTXVsdGlWYWx1ZXMoZmllbGQ6IHN0cmluZywgdmFsdWVzOiBzdHJpbmdbXSk6IEZpbHRlciB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyID0gbmV3IEZpbHRlcih7IGxvZ2ljOiAnb3InLCBmaWx0ZXJzOiBbXSB9KTtcclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0czogc2NoZW1hLnNvcnRzLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNjaGVtYS5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxyXG4gICAgICAgICAgICBwbHVzVXJsOiBzY2hlbWEucGx1c1VybCxcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoLFxyXG4gICAgICAgICAgICAvLyBUT0RPOiBD4bqnbiDEkWnhu4FuIHbDoG8ga2jDtG5nIGPDsyBs4buXaSBraMO0bmcgY2jhuqF5IMSRxrDhu6NjXHJcbiAgICAgICAgICAgIHNlbGVjdENoaWxkSXRlbTogbnVsbCxcclxuICAgICAgICAgICAgcGFnZVNpemU6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRSZWZEYXRhSW5EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWFzOiBHZXRSZWZEYXRhU2NoZW1hW10pIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYXMuZm9yRWFjaChzY2hlbWEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwgJiYgIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5maWVsZFBsdXMgJiYgc2NoZW1hLmZpZWxkUGx1cy5sZW5ndGggPiAwICYmICFzY2hlbWEuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmZpZWxkUGx1cyA9ICcsJyArIHNjaGVtYS5maWVsZFBsdXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIGZpeCB04bqhbSwga2jDtG5nIHRow6wgbOG7l2kga2jDtG5nIGJ1aWxkIMSRxrDhu6NjXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyg8YW55PnNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5pbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyclZhbHVlLnRvU3RyaW5nKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBOYW1OSCBmaXggdOG6oW0sIGtow7RuZyB0aMOsIGzhu5dpIGtow7RuZyBidWlsZCDEkcaw4bujYyBzY2hlbWEgPT4gPGFueT5zY2hlbWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyg8YW55PnNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93OiBGdW5jdGlvbiA9IChyb3dJdGVtLCBkYXRhKSA9PiB7IH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSByZXMuZmluZChpID0+IGkudmFsdWUgPT0gaXRlbURhdGFbZmllbGRdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gcmVmSXRlbS5sYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3BsaXRUb0xpc3ROdW1iZXIoc3RyOiBzdHJpbmcsIHNlcGFyYXRvcjogc3RyaW5nID0gJywnKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHJldHVybiBzdHIuc3BsaXQoc2VwYXJhdG9yKS5tYXAoaXRlbSA9PiBOdW1iZXIoaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hBc2MoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmaWVsZE9yZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGkgKyAxLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hEZXNjKGFycjogYW55W10sIGl0ZW06IGFueSwgZmllbGRPcmRlcjogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRPcmRlcl0gPj0gYXJyW2ldW2ZpZWxkT3JkZXJdKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hBc2NCeUZ1bmMoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmdW5jOiBGdW5jdGlvbik6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuIGFyci5sZW5ndGggLSAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgIGlmIChmdW5jKGl0ZW0pID49IGZ1bmMoYXJyW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnNwbGljZShpICsgMSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaSArIDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnNwbGljZSgwLCAwLCBpdGVtKTtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgIH1cclxuXHJcbiAgICBwdXNoRGVzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKSB7XHJcbiAgICAgICAgaWYgKGFyci5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICBhcnIucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGggLSAxOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGksIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBmaWVsZE9yZGVyOiBzdHJpbmcsXHJcbiAgICAgICAgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9XHJcbiAgICApOiBUcmVlTm9kZVtdIHtcclxuICAgICAgICBjb25zdCByZXN1bHQ6IFRyZWVOb2RlW10gPSBbXTtcclxuICAgICAgICBjb25zdCBmdW5jR2V0VmFsdWVPcmRlciA9IGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXRlbS5kYXRhW2ZpZWxkT3JkZXJdO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBpZiAoZGlyT3JkZXIgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaEFzY0J5RnVuYyhyZXN1bHQsIHJvb3RJdGVtLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hEZXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbVsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKHJvb3RJdGVtLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGRpck9yZGVyLCBmdW5jR2V0VmFsdWVPcmRlciwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlUXV5R2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihub2RlUGFyZW50OiBUcmVlTm9kZSwgZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLFxyXG4gICAgICAgIGRpck9yZGVyOiBudW1iZXIsIGZ1bmNHZXRWYWx1ZU9yZGVyOiBGdW5jdGlvbiwgbGV2ZWxDbG9zZTogbnVtYmVyLCBvcHRpb25zOiBhbnkgPSB7fVxyXG4gICAgKSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKG5vZGVQYXJlbnQuY2hpbGRyZW4sIGl0ZW1DaGlsZHJlbiwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoRGVzY0J5RnVuYyhub2RlUGFyZW50LmNoaWxkcmVuLCBpdGVtQ2hpbGRyZW4sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChpdGVtQ2hpbGRyZW5bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKGl0ZW1DaGlsZHJlbiwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBkaXJPcmRlciwgZnVuY0dldFZhbHVlT3JkZXIsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ2hpbGRyZW4uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUoaXRlbUNoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVUYWJsZURhdGEoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5LCBvcHRpb25zOiBhbnkgPSB7fSk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xyXG4gICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaWYgKGl0ZW1bZmllbGRUcmVlXSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvb3RJdGVtID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocm9vdEl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGEocm9vdEl0ZW0sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW0uY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcm9vdEl0ZW0uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUocm9vdEl0ZW0sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlUXV5R2V0VHJlZVRhYmxlRGF0YShub2RlUGFyZW50OiBUcmVlTm9kZSwgZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9KSB7XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IG5vZGVQYXJlbnQuZGF0YS5pZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbUNoaWxkcmVuID0gPFRyZWVOb2RlPntcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiBub2RlUGFyZW50WydsZXZlbCddICsgMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIG5vZGVQYXJlbnQuY2hpbGRyZW4ucHVzaChpdGVtQ2hpbGRyZW4pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlblsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGEoaXRlbUNoaWxkcmVuLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGxldmVsQ2xvc2UsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlbi5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBpdGVtQ2hpbGRyZW4uY2hpbGRyZW47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5tb2RpZnlUcmVlTm9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubW9kaWZ5VHJlZU5vZGUoaXRlbUNoaWxkcmVuLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRyZWVEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBmaWVsZFRyZWU6IHN0cmluZywgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVUYWJsZURhdGEoZGF0YVNvdXJjZSwgZmllbGRUcmVlLCB2YWx1ZVBhcmVudFJvb3QsIGxldmVsQ2xvc2UsIHtcclxuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmxhYmVsID0gaXRlbURhdGFbb3B0aW9uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBmaWVsZE9yZGVyOiBzdHJpbmcsXHJcbiAgICAgICAgb3B0aW9uOiBUcmVlRGF0YU9wdGlvbiwgdmFsdWVQYXJlbnRSb290OiBhbnkgPSAtMSwgZGlyT3JkZXI6IG51bWJlciA9IDEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTlcclxuICAgICk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBmaWVsZE9yZGVyLCB2YWx1ZVBhcmVudFJvb3QsIGRpck9yZGVyLCBsZXZlbENsb3NlLCB7XHJcbiAgICAgICAgICAgIG1vZGlmeVRyZWVOb2RlOiAoaXRlbVRyZWUsIGl0ZW1EYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5sYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5kaXNwbGF5RmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuc2hvcnRMYWJlbCA9IGl0ZW1EYXRhW29wdGlvbi5zaG9ydERpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5leHBhbmRlZEljb24gPSBvcHRpb24uZXhwYW5kZWRJY29uO1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUuY29sbGFwc2VkSWNvbiA9IG9wdGlvbi5jb2xsYXBzZWRJY29uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlR3VpZCgpIHtcclxuICAgICAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbiAoYykge1xyXG4gICAgICAgICAgICBjb25zdCByID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociAmIDB4MyB8IDB4OCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgxJFp4buBdSBraeG7h24gdMOsbSBraeG6v20gbeG6t2MgxJHhu4tuaCAoQ+G6pXUgaMOsbmggaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sylcclxuICAgIC8vIENo4buJIHPhu60gZOG7pW5nIGNobyBwaOG6p24gbeG7gW0gcXXhuqNuIGzDvSDEkcOgbyB04bqhb1xyXG4gICAgZ2V0RGVmYXVsdFNlYXJjaERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYWxEYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuREVGQVVMVF9EQVRBKTtcclxuICAgICAgICBpZiAobG9jYWxEYXRhICE9IG51bGwgJiYgbG9jYWxEYXRhICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsRGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhKF9jb21wb25lbnQsIGNiKSB7XHJcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaGVEYW9UYW9cclxuICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQubmFtSG9jXHJcbiAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQubW9kZWwucmVhZHlUb0dldERhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcclxuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaGVEYW9UYW9cclxuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcclxuICAgICAgICAgICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5ob2NLeVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKCdC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoaOG7hyDEkcOgbyB04bqhbywgbsSDbSBo4buNYywgaOG7jWMga+G7sykgdHLGsOG7m2MnKTtcclxuICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYikge1xyXG4gICAgICAgICAgICBjYihfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yY2VTZWxlY3REZWZhdWx0RGF0YVdpdGhGaWVsZHMoX2NvbXBvbmVudCwgYXJyRmllbGQsIGFyckZpZWxkTmFtZSwgY2IpIHtcclxuICAgICAgICBpZiAoIWFyckZpZWxkIHx8IGFyckZpZWxkLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgbGV0IGVub3VnaEZpZWxkcyA9IHRydWU7XHJcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdFtmaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIGVub3VnaEZpZWxkcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQubW9kZWwucmVhZHlUb0dldERhdGEgPSBmYWxzZTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULkNPTkZJR19EQVRBX0RFRkFVTFRfQ0xPU0VELCBmID0+IHtcclxuICAgICAgICAgICAgICAgIF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQgPSB0aGlzLmdldERlZmF1bHRTZWFyY2hEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbm91Z2hGaWVsZHMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghZW5vdWdoRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd0Vycm9yKGBC4bqhbiBwaOG6o2kgY+G6pXUgaMOsbmggdGjDtG5nIHRpbiAoJHthcnJGaWVsZE5hbWUudG9TdHJpbmcoKX0pIHRyxrDhu5tjYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY2IpIHtcclxuICAgICAgICAgICAgY2IoX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0RmllbGQobW9kZWwsIGFyckZpZWxkKSB7XHJcbiAgICAgICAgYXJyRmllbGQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgIG1vZGVsLmRhdGFbZmllbGRdID0gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm9jZXNzRXJyb3JSZXNwb25zZShycykge1xyXG4gICAgICAgIHN3aXRjaCAocnMuZXJyb3IpIHtcclxuICAgICAgICAgICAgY2FzZSBWYWxpZGF0aW9uLkVSUl9CVVNJTkVTUzpcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhycy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFZhbGlkYXRpb24uRVJSX1NZU19ERVY6XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgX19fX19fX19fXyBFUlJfU1lTX0RFViBfX19fX19fX19fICA6ICR7cnMubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhhbyB0w6FjIGNoxrBhIHRow6BuaCBjw7RuZy4gVnVpIGzDsm5nIHRo4butIGzhuqFpIHNhdSEnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVSZXNwb25zZShyZXM6IFJlc3BvbnNlUmVzdWx0LCBtZXNzYWdlPzogc3RyaW5nLCBjYWxsQmFjaz86IEZ1bmN0aW9uLCBjYWxsQmFja0Vycm9yPzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZXNzID0gcmVzLmVycm9yO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIG1lc3MgPSByZXMubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKG1lc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjYWxsQmFja0Vycm9yKSBjYWxsQmFja0Vycm9yKHJlcyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjYWxsQmFjaykgY2FsbEJhY2socmVzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRGaWx0ZXJGcm9tVGVtcGxhdGUodGVtcGxhdGVGaWx0ZXI6IEZpbHRlcltdLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0ZW1wbGF0ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIuZm9yRWFjaChmID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCBmLCBtb2RlbCwgcm9vdE1vZGVsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHJlc3VsdCwgdGVtcGxhdGVGaWx0ZXIsIG1vZGVsLCByb290TW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVRdXlSZXBsYWNlVmFsdWUoZmlsdGVyczogRmlsdGVyW10sIGZpbHRlcjogRmlsdGVyLCBtb2RlbDogYW55LCByb290TW9kZWw/OiBhbnkpIHtcclxuICAgICAgICBsZXQgdmFsdWVGaWx0ZXIgPSBudWxsO1xyXG5cclxuICAgICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGZpbHRlci5zb3VyY2VGaWVsZDtcclxuICAgICAgICBjb25zdCBzdWJGaWVsZCA9IGZpbHRlci5zdWJGaWVsZDtcclxuICAgICAgICBjb25zdCBjYW5BY2Nlc3NTdWJGaWVsZCA9ICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc3ViRmllbGQgIT0gbnVsbFxyXG4gICAgICAgICAgICAgICAgJiYgc3ViRmllbGQgIT09ICcnXHJcbiAgICAgICAgICAgICAgICAmJiAoaXNBcnJheSh2YWx1ZSkgfHwgaXNMaXRlcmFsT2JqZWN0KHZhbHVlKSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkoc291cmNlRmllbGQpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gbW9kZWxbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoY2FuQWNjZXNzU3ViRmllbGQodmFsdWVGaWx0ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZUZpbHRlcikgJiYgdHlwZW9mIHN1YkZpZWxkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXIubWFwKHggPT4geFtzdWJGaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpbHRlciA9IHZhbHVlRmlsdGVyW3N1YkZpZWxkXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChyb290TW9kZWwpIHtcclxuICAgICAgICAgICAgaWYgKHJvb3RNb2RlbC5oYXNPd25Qcm9wZXJ0eShzb3VyY2VGaWVsZCkpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gcm9vdE1vZGVsW3NvdXJjZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh2YWx1ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB2YWx1ZUZpbHRlci5tYXAoeCA9PiB4W3N1YkZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB2YWx1ZUZpbHRlcltzdWJGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gc291cmNlRmllbGQuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gcm9vdE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLmhhc093blByb3BlcnR5KGYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wW2ZdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh0ZW1wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHRlbXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdGVtcC5tYXAoeCA9PiB4W3N1YkZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSB0ZW1wW3N1YkZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgPT0gbnVsbCAmJiAodmFsdWVGaWx0ZXIgPT0gbnVsbCB8fCB2YWx1ZUZpbHRlciA9PT0gJycgfHwgdmFsdWVGaWx0ZXIubGVuZ3RoID09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRtcEZpbHRlciA9IG5ldyBGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgICBkZWxldGUgdG1wRmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRtcEZpbHRlci52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKTtcclxuICAgICAgICBpZiAodG1wRmlsdGVyLm1vZGlmeVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLm1vZGlmeVZhbHVlKHZhbHVlRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdG1wRmlsdGVyLmZpbHRlcnMgPSBbXTtcclxuICAgICAgICBpZiAoZmlsdGVyLmxvZ2ljICYmIGZpbHRlci5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzLmZvckVhY2goZiA9PiB0aGlzLmRlUXV5UmVwbGFjZVZhbHVlKHRtcEZpbHRlci5maWx0ZXJzLCBmLCBtb2RlbCwgcm9vdE1vZGVsKSk7XHJcbiAgICAgICAgICAgIGlmICh0bXBGaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVycy5wdXNoKHRtcEZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFdvcmtmbG93Q29yZVN0YXR1c1RleHQod29ya2Zsb3dDb3JlU3RhdHVzVmFsdWU6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzLmZpbmQoeCA9PiB4LmlkID09IHdvcmtmbG93Q29yZVN0YXR1c1ZhbHVlKTtcclxuICAgICAgICBpZiAoIWl0ZW0pIHJldHVybiAnJztcclxuICAgICAgICByZXR1cm4gaXRlbS50ZW47XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYTogUmVmRmllbGQpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogc2NoZW1hLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNjaGVtYS5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2hcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRSZWZEYXRhKGRhdGFTb3VyY2U6IGFueVtdLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBfbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgaWYgKG9wdGlvbnMucmVmRmllbGRzICYmIG9wdGlvbnMucmVmRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyUHJvbWlzZURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygb3B0aW9ucy5yZWZGaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWRzID0gY3VycmVudFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyVmFsdWUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25SZWZGaWVsZChzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW19jb21tb25TZXJ2aWNlLm5ld0ZpbHRlcihzY2hlbWEudmFsdWVGaWVsZCwgT3BlcmF0b3IuaW4sIGFyclZhbHVlKV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyUHJvbWlzZURvbnROZWVkV2FpdC5wdXNoKHByb21pc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LnB1c2goc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2NoZW1hLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ+G6pXUgaMOsbmggUmVmRmllbGQgcGjhuqNpIGPDsyBkYXRhU291cmNlIGhv4bq3YyBiYXNlU2VydmljZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IHNjaGVtYS5kYXRhU291cmNlLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXJyUHJvbWlzZURvbnROZWVkV2FpdCk7XHJcbiAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQuZm9yRWFjaCgoc2NoZW1hLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgYXJyUmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBSZWZGaWVsZCwgZGF0YTogYW55W10pIHtcclxuICAgICAgICBkYXRhID8/PSBbXTtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsID0gc2NoZW1hLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGZ1bmNTZXRWYWx1ZVJvdyA9IChyb3dJdGVtLCBkYXRhKSA9PiB7IH07XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRSZWZEYXRhUm93ID0gKHJlZkl0ZW1zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWZJdGVtcy5tYXAoaXRlbSA9PiBmdW5jR2V0TGFiZWwoaXRlbSkpLmpvaW4oYCR7c2NoZW1hLnNlcGFyYXRvcn0gYCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdykge1xyXG4gICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3cgPSBzY2hlbWEuZnVuY1NldFZhbHVlUm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRSZWZEYXRhUm93ID0gc2NoZW1hLmZ1bmNHZXRSZWZEYXRhUm93O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbURhdGFbZmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaWRzID0gaXRlbURhdGFbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtcyA9IGRhdGEuZmlsdGVyKGkgPT4gaWRzLnNvbWUocSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgcSkpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRSZWZEYXRhUm93KHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbURhdGFbZmllbGRdICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gZGF0YS5maW5kKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGl0ZW1EYXRhW2ZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
762
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL2NydWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDekUsT0FBTyxFQUF5QixlQUFlLEVBQW9CLFFBQVEsRUFBNEIsTUFBTSx3QkFBd0IsQ0FBQztBQUN0SSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7OztBQUtyRCxNQUFNLE9BQU8sV0FBVztJQUNwQixZQUNZLFNBQW1CLEVBQ25CLGlCQUFtQyxFQUNuQyxRQUFrQixFQUNsQixnQkFBaUM7UUFIakMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ25DLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIscUJBQWdCLEdBQWhCLGdCQUFnQixD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RUFBRTtvQkFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZFLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTt3QkFDakIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hELGVBQWUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7cUJBQ3RDO2lCQUNKO1lBRUwsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7Ozs7WUEveEJKLFVBQVUsU0FBQztnQkFDUixVQUFVLEVBQUUsTUFBTTthQUNyQjs7O1lBaEJvQixRQUFRO1lBQ3BCLGdCQUFnQjtZQUZoQixRQUFRO1lBYVIsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IGlzQXJyYXksIGlzTGl0ZXJhbE9iamVjdCB9IGZyb20gJy4uL2NsYXNzZXMvZW52aXJvbm1lbnQtc2NoZW1hJztcclxuaW1wb3J0IHsgRHJvcGRvd25Db250cm9sU2NoZW1hLCBEcm9wZG93bk9wdGlvbnMsIEdldFJlZkRhdGFTY2hlbWEsIE9wZXJhdG9yLCBSZWZGaWVsZCwgVHJlZURhdGFPcHRpb24gfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzL3dvcmtmbG93LWNvcmUtc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi9ub3RpZmllci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIENydWRTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlXHJcbiAgICApIHsgfVxyXG5cclxuICAgIHJlbmRlckRhdGVUaW1lKGRhdGV0aW1lLCBmb3JtYXQ6ICdub3JtYWwnIHwgJ2Zyb21Ob3cnID0gJ2Zyb21Ob3cnKSB7XHJcbiAgICAgICAgaWYgKCFkYXRldGltZSkgcmV0dXJuICcnO1xyXG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZXRpbWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIGRhdGV0aW1lID0gbmV3IERhdGUoZGF0ZXRpbWUgKyAnJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZm9ybWF0ID09PSAnbm9ybWFsJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZXRpbWUsICdkZC9NTS95eXl5IEhIOm1tJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBub3c6IGFueSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgbWlsaXNlY29uZCA9IG5vdyAtIGRhdGV0aW1lO1xyXG4gICAgICAgIGxldCB0ZXh0MSA9ICd0csaw4bubYycsIHRleHQyID0gJ0jDtG0gcXVhJztcclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDApIHtcclxuICAgICAgICAgICAgdGV4dDEgPSAnbuG7r2EnLCB0ZXh0MiA9ICdOZ8OgeSBtYWknO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDMwMDAwKSB7XHJcbiAgICAgICAgICAgIC8vIDMwIGdpw6J5XHJcbiAgICAgICAgICAgIHJldHVybiBgVsOgaSBnacOieSAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgOTAwMDApIHtcclxuICAgICAgICAgICAgLy8gMzAgZ2nDonkgLSA5MCBnacOieVxyXG4gICAgICAgICAgICByZXR1cm4gYE3hu5l0IHBow7p0ICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCAzMDAwMDApIHtcclxuICAgICAgICAgICAgLy8gNSBwaMO6dFxyXG4gICAgICAgICAgICByZXR1cm4gYFbDoGkgcGjDunQgJHt0ZXh0MX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWlsaXNlY29uZCA8IDM2MDAwMDApIHtcclxuICAgICAgICAgICAgLy8gZMaw4bubaSAxIHRp4bq/bmdcclxuICAgICAgICAgICAgcmV0dXJuIGAke01hdGguY2VpbChtaWxpc2Vjb25kIC8gNjAwMDApfSBwaMO6dCAke3RleHQxfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtaWxpc2Vjb25kIDwgMTgwMDAwMDApIHtcclxuICAgICAgICAgICAgLy8gZMaw4bubaSA1IHRp4bq/bmdcclxuICAgICAgICAgICAgcmV0dXJuIGBWw6BpIGdp4budICR7dGV4dDF9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1pbGlzZWNvbmQgPCA4NjQwMDAwMCkge1xyXG4gICAgICAgICAgICAvLyBkxrDhu5tpIDEgbmfDoHlcclxuICAgICAgICAgICAgaWYgKGRhdGV0aW1lLmdldERhdGUoKSA9PSBub3cuZ2V0RGF0ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7TWF0aC5jZWlsKG1pbGlzZWNvbmQgLyAzNjAwMDAwKX0gZ2nhu50gJHt0ZXh0MX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0ZXh0Mn0gbMO6YyAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnSEg6bW0nKX1gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGV4dEhvdXJBbmRNaW51dGUgPSBgIGzDumMgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRldGltZSwgJ0hIOm1tJyl9YDtcclxuICAgICAgICBpZiAoZGF0ZXRpbWUuZ2V0WWVhcigpID09IG5vdy5nZXRZZWFyKClcclxuICAgICAgICAgICAgJiYgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlRGlmZiA9IG5vdy5nZXREYXRlKCkgLSBkYXRldGltZS5nZXREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRlRGlmZiA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dGV4dDJ9JHt0ZXh0SG91ckFuZE1pbnV0ZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRlRGlmZiA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEhhaSBuZ8OgeSAke3RleHQxfSR7dGV4dEhvdXJBbmRNaW51dGV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZGF0ZURpZmYgPT0gMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBCYSBuZ8OgeSAke3RleHQxfSR7dGV4dEhvdXJBbmRNaW51dGV9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oXHJcbiAgICAgICAgICAgIGRhdGV0aW1lLFxyXG4gICAgICAgICAgICAnZGQvTU0veXl5eSBISDptbSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlckRhdGUoZGF0ZXRpbWUsIGZvcm1hdDogJ25vcm1hbCcgfCAnZnJvbU5vdycgPSAnbm9ybWFsJykge1xyXG4gICAgICAgIGlmICghZGF0ZXRpbWUpIHJldHVybiAnJztcclxuICAgICAgICBpZiAodHlwZW9mIGRhdGV0aW1lID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICBkYXRldGltZSA9IG5ldyBEYXRlKGRhdGV0aW1lICsgJycpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ25vcm1hbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93OiBhbnkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZGF0ZXRpbWUuZ2V0TW9udGgoKSA9PSBub3cuZ2V0TW9udGgoKVxyXG4gICAgICAgICAgICAmJiBkYXRldGltZS5nZXRZZWFyKCkgPT0gbm93LmdldFllYXIoKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXlzID0gZGF0ZXRpbWUuZ2V0RGF0ZSgpIC0gbm93LmdldERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKGRheXMgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIw7RtIG5heSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ05nw6B5IG1haSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIw7RtIHF1YSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0hhaSBuZ8OgeSBu4buvYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAtMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdIYWkgbmfDoHkgdHLGsOG7m2MnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGRheXMgPT0gMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSBu4buvYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZGF5cyA9PSAtMykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdCYSBuZ8OgeSB0csaw4bubYyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGV0aW1lLCAnZGQvTU0veXl5eScpO1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVDb250cm9sQW5kTGFiZWwoKSB7IH1cclxuXHJcbiAgICBidWlsZEZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpOiBGaWx0ZXIge1xyXG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yLCB2YWx1ZSB9KTtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlckRhdGUoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogRGF0ZSk6IEZpbHRlciB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3IsIHZhbHVlOiB0aGlzLmdldERhdGUodmFsdWUpIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBgJHt2YWx1ZS5nZXREYXRlKCl9LyR7dmFsdWUuZ2V0TW9udGgoKSArIDF9LyR7dmFsdWUuZ2V0RnVsbFllYXIoKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkRmlsdGVyRGF0ZUluTGlzdFJhbmdlKGZpZWxkOiBzdHJpbmcsIGFyck1pbk1heDogRGF0ZVtdW10sIG9wZXJhdG9yTGVmdDogc3RyaW5nID0gJ2d0ZScsIG9wZXJhdG9yUmlnaHQ6IHN0cmluZyA9ICdsdGUnKTogRmlsdGVyIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IFtdXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXJyTWluTWF4LmZvckVhY2gobWluTWF4ID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RyU3RhcnQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMF0pO1xyXG4gICAgICAgICAgICBjb25zdCBzdHJFbmQgPSB0aGlzLmdldFN0cmluZ0RhdGVWYWx1ZShtaW5NYXhbMV0pO1xyXG4gICAgICAgICAgICByZXN1bHQuZmlsdGVycy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnYW5kJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRGaWx0ZXIoZmllbGQsIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsIHN0clN0YXJ0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZEZpbHRlcihmaWVsZCwgT3BlcmF0b3IubG93ZXJUaGFuRXF1YWwsIHN0ckVuZClcclxuICAgICAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U3RyaW5nRGF0ZVZhbHVlKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGAke3ZhbHVlLmdldFVUQ0RhdGUoKX0vJHt2YWx1ZS5nZXRVVENNb250aCgpICsgMX0vJHt2YWx1ZS5nZXRVVENGdWxsWWVhcigpfSAke3ZhbHVlLmdldFVUQ0hvdXJzKCl9OiR7dmFsdWUuZ2V0VVRDTWludXRlcygpfToke3ZhbHVlLmdldFVUQ1NlY29uZHMoKX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGJ1aWxkTXVsdGlGaWx0ZXJDb250YWlucyhmaWVsZHM6IHN0cmluZ1tdLCB2YWx1ZTogc3RyaW5nKTogRmlsdGVyIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xyXG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBidWlsZEZpbHRlckNvbnRhaW5NdWx0aVZhbHVlcyhmaWVsZDogc3RyaW5nLCB2YWx1ZXM6IHN0cmluZ1tdKTogRmlsdGVyIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSBuZXcgRmlsdGVyKHsgbG9naWM6ICdvcicsIGZpbHRlcnM6IFtdIH0pO1xyXG4gICAgICAgIHZhbHVlcy5mb3JFYWNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMucHVzaChuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZVxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogc2NoZW1hLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRzOiBzY2hlbWEuc29ydHMsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIHBsdXNVcmw6IHNjaGVtYS5wbHVzVXJsLFxyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2gsXHJcbiAgICAgICAgICAgIC8vIFRPRE86IEPhuqduIMSRaeG7gW4gdsOgbyBraMO0bmcgY8OzIGzhu5dpIGtow7RuZyBjaOG6oXkgxJHGsOG7o2NcclxuICAgICAgICAgICAgc2VsZWN0Q2hpbGRJdGVtOiBudWxsLFxyXG4gICAgICAgICAgICBwYWdlU2l6ZTogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFJlZkRhdGFJbkRhdGFzb3VyY2UoZGF0YVNvdXJjZTogYW55W10sIHNjaGVtYXM6IEdldFJlZkRhdGFTY2hlbWFbXSkge1xyXG4gICAgICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hcy5mb3JFYWNoKHNjaGVtYSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCAmJiAhYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChjdXJyZW50VmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyclZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZpZWxkUGx1cyAmJiBzY2hlbWEuZmllbGRQbHVzLmxlbmd0aCA+IDAgJiYgIXNjaGVtYS5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZmllbGRQbHVzID0gJywnICsgc2NoZW1hLmZpZWxkUGx1cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlIGluc3RhbmNlb2YgTWFzdGVyRGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIGFyclZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogTmFtTkggZml4IHThuqFtLCBraMO0bmcgdGjDrCBs4buXaSBraMO0bmcgYnVpbGQgxJHGsOG7o2NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKDxhbnk+c2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXJyVmFsdWUudG9TdHJpbmcoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE5hbU5IIGZpeCB04bqhbSwga2jDtG5nIHRow6wgbOG7l2kga2jDtG5nIGJ1aWxkIMSRxrDhu6NjIHNjaGVtYSA9PiA8YW55PnNjaGVtYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKDxhbnk+c2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4ocmVzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jU2V0VmFsdWVSb3c6IEZ1bmN0aW9uID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IHJlcy5maW5kKGkgPT4gaS52YWx1ZSA9PSBpdGVtRGF0YVtmaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSByZWZJdGVtLmxhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzcGxpdFRvTGlzdE51bWJlcihzdHI6IHN0cmluZywgc2VwYXJhdG9yOiBzdHJpbmcgPSAnLCcpOiBudW1iZXJbXSB7XHJcbiAgICAgICAgcmV0dXJuIHN0ci5zcGxpdChzZXBhcmF0b3IpLm1hcChpdGVtID0+IE51bWJlcihpdGVtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaEFzYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZpZWxkT3JkZXI6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChhcnIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IGFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZE9yZGVyXSA+PSBhcnJbaV1bZmllbGRPcmRlcl0pIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSArIDEsIDAsIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFyci5zcGxpY2UoMCwgMCwgaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaERlc2MoYXJyOiBhbnlbXSwgaXRlbTogYW55LCBmaWVsZE9yZGVyOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZE9yZGVyXSA+PSBhcnJbaV1bZmllbGRPcmRlcl0pIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVzaEFzY0J5RnVuYyhhcnI6IGFueVtdLCBpdGVtOiBhbnksIGZ1bmM6IEZ1bmN0aW9uKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm4gYXJyLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSBhcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgaWYgKGZ1bmMoaXRlbSkgPj0gZnVuYyhhcnJbaV0pKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGkgKyAxLCAwLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpICsgMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBhcnIuc3BsaWNlKDAsIDAsIGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHB1c2hEZXNjQnlGdW5jKGFycjogYW55W10sIGl0ZW06IGFueSwgZnVuYzogRnVuY3Rpb24pIHtcclxuICAgICAgICBpZiAoYXJyLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIGFyci5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aCAtIDE7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZnVuYyhpdGVtKSA+PSBmdW5jKGFycltpXSkpIHtcclxuICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoaSwgMCwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyLnB1c2goaXRlbSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcclxuICAgICAgICB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OSwgb3B0aW9uczogYW55ID0ge31cclxuICAgICk6IFRyZWVOb2RlW10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdDogVHJlZU5vZGVbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZ1bmNHZXRWYWx1ZU9yZGVyID0gaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmRhdGFbZmllbGRPcmRlcl07XHJcbiAgICAgICAgfTtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gdmFsdWVQYXJlbnRSb290KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb290SXRlbSA9IDxUcmVlTm9kZT57XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbSxcclxuICAgICAgICAgICAgICAgICAgICBsZXZlbDogMSxcclxuICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXVxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChkaXJPcmRlciA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoQXNjQnlGdW5jKHJlc3VsdCwgcm9vdEl0ZW0sIGZ1bmNHZXRWYWx1ZU9yZGVyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaERlc2NCeUZ1bmMocmVzdWx0LCByb290SXRlbSwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJvb3RJdGVtWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm9vdEl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIocm9vdEl0ZW0sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgZGlyT3JkZXIsIGZ1bmNHZXRWYWx1ZU9yZGVyLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290SXRlbS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShyb290SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVRdXlHZXRUcmVlVGFibGVEYXRhV2l0aE9yZGVyKG5vZGVQYXJlbnQ6IFRyZWVOb2RlLCBkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsXHJcbiAgICAgICAgZGlyT3JkZXI6IG51bWJlciwgZnVuY0dldFZhbHVlT3JkZXI6IEZ1bmN0aW9uLCBsZXZlbENsb3NlOiBudW1iZXIsIG9wdGlvbnM6IGFueSA9IHt9XHJcbiAgICApIHtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ2hpbGRyZW4gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKGRpck9yZGVyID09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hBc2NCeUZ1bmMobm9kZVBhcmVudC5jaGlsZHJlbiwgaXRlbUNoaWxkcmVuLCBmdW5jR2V0VmFsdWVPcmRlcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hEZXNjQnlGdW5jKG5vZGVQYXJlbnQuY2hpbGRyZW4sIGl0ZW1DaGlsZHJlbiwgZnVuY0dldFZhbHVlT3JkZXIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1DaGlsZHJlblsnbGV2ZWwnXSA+PSBsZXZlbENsb3NlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUNoaWxkcmVuLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eUdldFRyZWVUYWJsZURhdGFXaXRoT3JkZXIoaXRlbUNoaWxkcmVuLCBkYXRhU291cmNlLCBmaWVsZFRyZWUsIGRpck9yZGVyLCBmdW5jR2V0VmFsdWVPcmRlciwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogYW55ID0gLTEsIGxldmVsQ2xvc2U6IG51bWJlciA9IDk5OTksIG9wdGlvbnM6IGFueSA9IHt9KTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0OiBUcmVlTm9kZVtdID0gW107XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbVtmaWVsZFRyZWVdID09IHZhbHVlUGFyZW50Um9vdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9vdEl0ZW0gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChyb290SXRlbSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocm9vdEl0ZW1bJ2xldmVsJ10gPj0gbGV2ZWxDbG9zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvb3RJdGVtLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByb290SXRlbS5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShyb290SXRlbSwgZGF0YVNvdXJjZSwgZmllbGRUcmVlLCBsZXZlbENsb3NlLCBvcHRpb25zKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb290SXRlbS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByb290SXRlbS5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShyb290SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGVRdXlHZXRUcmVlVGFibGVEYXRhKG5vZGVQYXJlbnQ6IFRyZWVOb2RlLCBkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGxldmVsQ2xvc2U6IG51bWJlciwgb3B0aW9uczogYW55ID0ge30pIHtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtW2ZpZWxkVHJlZV0gPT0gbm9kZVBhcmVudC5kYXRhLmlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtQ2hpbGRyZW4gPSA8VHJlZU5vZGU+e1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IG5vZGVQYXJlbnRbJ2xldmVsJ10gKyAxLFxyXG4gICAgICAgICAgICAgICAgICAgIGxlYWY6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgbm9kZVBhcmVudC5jaGlsZHJlbi5wdXNoKGl0ZW1DaGlsZHJlbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuWydsZXZlbCddID49IGxldmVsQ2xvc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtQ2hpbGRyZW4uZXhwYW5kZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1DaGlsZHJlbi5leHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRlUXV5R2V0VHJlZVRhYmxlRGF0YShpdGVtQ2hpbGRyZW4sIGRhdGFTb3VyY2UsIGZpZWxkVHJlZSwgbGV2ZWxDbG9zZSwgb3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbUNoaWxkcmVuLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGl0ZW1DaGlsZHJlbi5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm1vZGlmeVRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tb2RpZnlUcmVlTm9kZShpdGVtQ2hpbGRyZW4sIGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VHJlZURhdGEoZGF0YVNvdXJjZTogYW55W10sIGZpZWxkVHJlZTogc3RyaW5nLCBvcHRpb246IFRyZWVEYXRhT3B0aW9uLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBsZXZlbENsb3NlOiBudW1iZXIgPSA5OTk5KTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YShkYXRhU291cmNlLCBmaWVsZFRyZWUsIHZhbHVlUGFyZW50Um9vdCwgbGV2ZWxDbG9zZSwge1xyXG4gICAgICAgICAgICBtb2RpZnlUcmVlTm9kZTogKGl0ZW1UcmVlLCBpdGVtRGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbVRyZWUubGFiZWwgPSBpdGVtRGF0YVtvcHRpb24uZGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5jb2xsYXBzZWRJY29uID0gb3B0aW9uLmNvbGxhcHNlZEljb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUcmVlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRUcmVlOiBzdHJpbmcsIGZpZWxkT3JkZXI6IHN0cmluZyxcclxuICAgICAgICBvcHRpb246IFRyZWVEYXRhT3B0aW9uLCB2YWx1ZVBhcmVudFJvb3Q6IGFueSA9IC0xLCBkaXJPcmRlcjogbnVtYmVyID0gMSwgbGV2ZWxDbG9zZTogbnVtYmVyID0gOTk5OVxyXG4gICAgKTogVHJlZU5vZGVbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZVRhYmxlRGF0YVdpdGhPcmRlcihkYXRhU291cmNlLCBmaWVsZFRyZWUsIGZpZWxkT3JkZXIsIHZhbHVlUGFyZW50Um9vdCwgZGlyT3JkZXIsIGxldmVsQ2xvc2UsIHtcclxuICAgICAgICAgICAgbW9kaWZ5VHJlZU5vZGU6IChpdGVtVHJlZSwgaXRlbURhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmxhYmVsID0gaXRlbURhdGFbb3B0aW9uLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5zaG9ydExhYmVsID0gaXRlbURhdGFbb3B0aW9uLnNob3J0RGlzcGxheUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGl0ZW1UcmVlLmV4cGFuZGVkSWNvbiA9IG9wdGlvbi5leHBhbmRlZEljb247XHJcbiAgICAgICAgICAgICAgICBpdGVtVHJlZS5jb2xsYXBzZWRJY29uID0gb3B0aW9uLmNvbGxhcHNlZEljb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVHdWlkKCkge1xyXG4gICAgICAgIHJldHVybiAneHh4eHh4eHgteHh4eC00eHh4LXl4eHgteHh4eHh4eHh4eHh4Jy5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHIgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwLCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzIHwgMHg4KTtcclxuICAgICAgICAgICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEdldCDEkWnhu4F1IGtp4buHbiB0w6xtIGtp4bq/bSBt4bq3YyDEkeG7i25oIChD4bqldSBow6xuaCBo4buHIMSRw6BvIHThuqFvLCBuxINtIGjhu41jLCBo4buNYyBr4buzKVxyXG4gICAgLy8gQ2jhu4kgc+G7rSBk4bulbmcgY2hvIHBo4bqnbiBt4buBbSBxdeG6o24gbMO9IMSRw6BvIHThuqFvXHJcbiAgICBnZXREZWZhdWx0U2VhcmNoRGF0YSgpIHtcclxuICAgICAgICBjb25zdCBsb2NhbERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5ERUZBVUxUX0RBVEEpO1xyXG4gICAgICAgIGlmIChsb2NhbERhdGEgIT0gbnVsbCAmJiBsb2NhbERhdGEgIT0gJycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlU2VsZWN0RGVmYXVsdERhdGEoX2NvbXBvbmVudCwgY2IpIHtcclxuICAgICAgICBfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0ID0gdGhpcy5nZXREZWZhdWx0U2VhcmNoRGF0YSgpO1xyXG4gICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xyXG4gICAgICAgICAgICB8fCAhX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5uYW1Ib2NcclxuICAgICAgICAgICAgfHwgIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQuaG9jS3lcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICAgICAgICAgIGlmICghX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdC5oZURhb1Rhb1xyXG4gICAgICAgICAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0Lm5hbUhvY1xyXG4gICAgICAgICAgICAgICAgICAgIHx8ICFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0LmhvY0t5XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoJ0LhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICho4buHIMSRw6BvIHThuqFvLCBuxINtIGjhu41jLCBo4buNYyBr4buzKSB0csaw4bubYycpO1xyXG4gICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1RfVVNNQVJULlNIT1dfQ09ORklHX0RBVEFfREVGQVVMVCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNiKSB7XHJcbiAgICAgICAgICAgIGNiKF9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVNlbGVjdERlZmF1bHREYXRhV2l0aEZpZWxkcyhfY29tcG9uZW50LCBhcnJGaWVsZCwgYXJyRmllbGROYW1lLCBjYikge1xyXG4gICAgICAgIGlmICghYXJyRmllbGQgfHwgYXJyRmllbGQubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICBsZXQgZW5vdWdoRmllbGRzID0gdHJ1ZTtcclxuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgaWYgKCFfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0W2ZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgZW5vdWdoRmllbGRzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKCFlbm91Z2hGaWVsZHMpIHtcclxuICAgICAgICAgICAgX2NvbXBvbmVudC5tb2RlbC5yZWFkeVRvR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuQ09ORklHX0RBVEFfREVGQVVMVF9DTE9TRUQsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgX2NvbXBvbmVudC5kYXRhU2VhcmNoRGVmYXVsdCA9IHRoaXMuZ2V0RGVmYXVsdFNlYXJjaERhdGEoKTtcclxuICAgICAgICAgICAgICAgIGVub3VnaEZpZWxkcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV9jb21wb25lbnQuZGF0YVNlYXJjaERlZmF1bHRbZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVub3VnaEZpZWxkcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlbm91Z2hGaWVsZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93RXJyb3IoYELhuqFuIHBo4bqjaSBj4bqldSBow6xuaCB0aMO0bmcgdGluICgke2FyckZpZWxkTmFtZS50b1N0cmluZygpfSkgdHLGsOG7m2NgKTtcclxuICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50LnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVF9VU01BUlQuU0hPV19DT05GSUdfREFUQV9ERUZBVUxUKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIF9jb21wb25lbnQucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09UX1VTTUFSVC5TSE9XX0NPTkZJR19EQVRBX0RFRkFVTFQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjYikge1xyXG4gICAgICAgICAgICBjYihfY29tcG9uZW50LmRhdGFTZWFyY2hEZWZhdWx0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRGaWVsZChtb2RlbCwgYXJyRmllbGQpIHtcclxuICAgICAgICBhcnJGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgbW9kZWwuZGF0YVtmaWVsZF0gPSBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByb2Nlc3NFcnJvclJlc3BvbnNlKHJzKSB7XHJcbiAgICAgICAgc3dpdGNoIChycy5lcnJvcikge1xyXG4gICAgICAgICAgICBjYXNlIFZhbGlkYXRpb24uRVJSX0JVU0lORVNTOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgVmFsaWRhdGlvbi5FUlJfU1lTX0RFVjpcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBfX19fX19fX19fIEVSUl9TWVNfREVWIF9fX19fX19fX18gIDogJHtycy5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGFvIHTDoWMgY2jGsGEgdGjDoG5oIGPDtG5nLiBWdWkgbMOybmcgdGjhu60gbOG6oWkgc2F1IScpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xyXG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5lcnJvciA9PSBWYWxpZGF0aW9uLkVSUl9TWVNfREVWKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1lc3MgPSByZXMuZXJyb3I7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzLm1lc3NhZ2UgIT0gbnVsbCAmJiByZXMubWVzc2FnZSAhPSAnJykgbWVzcyA9IHJlcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcobWVzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpIGNhbGxCYWNrRXJyb3IocmVzKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNhbGxCYWNrKSBjYWxsQmFjayhyZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbHRlckZyb21UZW1wbGF0ZSh0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10sIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlbXBsYXRlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZVF1eVJlcGxhY2VWYWx1ZShyZXN1bHQsIGYsIG1vZGVsLCByb290TW9kZWwpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUocmVzdWx0LCB0ZW1wbGF0ZUZpbHRlciwgbW9kZWwsIHJvb3RNb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZVF1eVJlcGxhY2VWYWx1ZShmaWx0ZXJzOiBGaWx0ZXJbXSwgZmlsdGVyOiBGaWx0ZXIsIG1vZGVsOiBhbnksIHJvb3RNb2RlbD86IGFueSkge1xyXG4gICAgICAgIGxldCB2YWx1ZUZpbHRlciA9IG51bGw7XHJcblxyXG4gICAgICAgIGNvbnN0IHNvdXJjZUZpZWxkID0gZmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgIGNvbnN0IHN1YkZpZWxkID0gZmlsdGVyLnN1YkZpZWxkO1xyXG4gICAgICAgIGNvbnN0IGNhbkFjY2Vzc1N1YkZpZWxkID0gKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBzdWJGaWVsZCAhPSBudWxsXHJcbiAgICAgICAgICAgICAgICAmJiBzdWJGaWVsZCAhPT0gJydcclxuICAgICAgICAgICAgICAgICYmIChpc0FycmF5KHZhbHVlKSB8fCBpc0xpdGVyYWxPYmplY3QodmFsdWUpKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChtb2RlbC5oYXNPd25Qcm9wZXJ0eShzb3VyY2VGaWVsZCkpIHtcclxuICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSBtb2RlbFtzb3VyY2VGaWVsZF07XHJcbiAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh2YWx1ZUZpbHRlcikpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXJbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHJvb3RNb2RlbCkge1xyXG4gICAgICAgICAgICBpZiAocm9vdE1vZGVsLmhhc093blByb3BlcnR5KHNvdXJjZUZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWx0ZXIgPSByb290TW9kZWxbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhbkFjY2Vzc1N1YkZpZWxkKHZhbHVlRmlsdGVyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdmFsdWVGaWx0ZXJbc3ViRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gc291cmNlRmllbGQuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wID0gcm9vdE1vZGVsO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ZW1wLmhhc093blByb3BlcnR5KGYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSB0ZW1wW2ZdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChjYW5BY2Nlc3NTdWJGaWVsZCh0ZW1wKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdGVtcFtzdWJGaWVsZF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgPT0gbnVsbCAmJiAodmFsdWVGaWx0ZXIgPT0gbnVsbCB8fCB2YWx1ZUZpbHRlciA9PT0gJycgfHwgdmFsdWVGaWx0ZXIubGVuZ3RoID09IDApKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRtcEZpbHRlciA9IG5ldyBGaWx0ZXIoZmlsdGVyKTtcclxuICAgICAgICBkZWxldGUgdG1wRmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXIuZnVuY0dldFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHZhbHVlRmlsdGVyID0gdG1wRmlsdGVyLmZ1bmNHZXRWYWx1ZSh2YWx1ZUZpbHRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRtcEZpbHRlci52YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlRmlsdGVyKTtcclxuICAgICAgICB0bXBGaWx0ZXIuZmlsdGVycyA9IFtdO1xyXG4gICAgICAgIGlmIChmaWx0ZXIubG9naWMgJiYgZmlsdGVyLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMuZm9yRWFjaChmID0+IHRoaXMuZGVRdXlSZXBsYWNlVmFsdWUodG1wRmlsdGVyLmZpbHRlcnMsIGYsIG1vZGVsLCByb290TW9kZWwpKTtcclxuICAgICAgICAgICAgaWYgKHRtcEZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh0bXBGaWx0ZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJzLnB1c2godG1wRmlsdGVyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0V29ya2Zsb3dDb3JlU3RhdHVzVGV4dCh3b3JrZmxvd0NvcmVTdGF0dXNWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbSA9IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMuZmluZCh4ID0+IHguaWQgPT0gd29ya2Zsb3dDb3JlU3RhdHVzVmFsdWUpO1xyXG4gICAgICAgIGlmICghaXRlbSkgcmV0dXJuICcnO1xyXG4gICAgICAgIHJldHVybiBpdGVtLnRlbjtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hOiBSZWZGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRHJvcGRvd25PcHRpb25zKHtcclxuICAgICAgICAgICAgZGlzcGxheUZpZWxkOiBzY2hlbWEuZGlzcGxheUZpZWxkLFxyXG4gICAgICAgICAgICB2YWx1ZUZpZWxkOiBzY2hlbWEudmFsdWVGaWVsZCxcclxuICAgICAgICAgICAgZmllbGRQbHVzOiBzY2hlbWEuZmllbGRQbHVzLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6IHNjaGVtYS5maWVsZFRyZWUsXHJcbiAgICAgICAgICAgIGZpZWxkUGFyZW50VHJlZUl0ZW06IHNjaGVtYS5maWVsZFBhcmVudFRyZWVJdGVtLFxyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWw6IHNjaGVtYS5mdW5jR2V0TGFiZWwsXHJcbiAgICAgICAgICAgIHNvcnRGaWVsZDogc2NoZW1hLnNvcnRGaWVsZCxcclxuICAgICAgICAgICAgc29ydERpcjogc2NoZW1hLnNvcnREaXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrRGF0YUZpbmlzaDogc2NoZW1hLmNhbGxiYWNrRGF0YUZpbmlzaFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFJlZkRhdGEoZGF0YVNvdXJjZTogYW55W10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IF9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCBfY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcclxuICAgICAgICBpZiAob3B0aW9ucy5yZWZGaWVsZHMgJiYgb3B0aW9ucy5yZWZGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBvcHRpb25zLnJlZkZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyVmFsdWUgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBwcm9taXNlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWEuZ3JvdXBDb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvblJlZkZpZWxkKHNjaGVtYSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbX2NvbW1vblNlcnZpY2UubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9uUmVmRmllbGQoc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm9yZGVyICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJTY2hlbWFEb250TmVlZFdhaXQucHVzaChzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2hlbWEuZGF0YVNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdD4bqldSBow6xuaCBSZWZGaWVsZCBwaOG6o2kgY8OzIGRhdGFTb3VyY2UgaG/hurdjIGJhc2VTZXJ2aWNlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0TGFiZWwocmVmSXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYXJyUHJvbWlzZURvbnROZWVkV2FpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJSZXMgPSBhd2FpdCBQcm9taXNlLmFsbChhcnJQcm9taXNlRG9udE5lZWRXYWl0KTtcclxuICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCBhcnJSZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IFJlZkZpZWxkLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -167,13 +167,10 @@ export class MenuService {
|
|
|
167
167
|
}
|
|
168
168
|
});
|
|
169
169
|
}
|
|
170
|
-
renderMenuByAppCode(
|
|
170
|
+
renderMenuByAppCode(appCode) {
|
|
171
171
|
return __awaiter(this, void 0, void 0, function* () {
|
|
172
172
|
this._menuItems = [];
|
|
173
|
-
|
|
174
|
-
if (scopeName) {
|
|
175
|
-
menuUrl = `assets/menus/${scopeName.toLocaleLowerCase()}/${appCode.toLocaleLowerCase()}.json`;
|
|
176
|
-
}
|
|
173
|
+
const menuUrl = `assets/menus/${appCode.toLocaleLowerCase()}.json`;
|
|
177
174
|
fetch(menuUrl).then((rs) => __awaiter(this, void 0, void 0, function* () {
|
|
178
175
|
const menu = JSON.parse(yield rs.text());
|
|
179
176
|
this.setMenuItems(menu);
|
|
@@ -191,4 +188,4 @@ MenuService.ctorParameters = () => [
|
|
|
191
188
|
{ type: CommonService },
|
|
192
189
|
{ type: ApplicationContextService }
|
|
193
190
|
];
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHekQsTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFDWSxvQkFBeUMsRUFDekMsa0JBQXFDLEVBQ3JDLGNBQTZCLEVBQzdCLG1CQUE4QztRQUg5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUEyQjtRQVhsRCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFRN0MsQ0FBQztJQUVELEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBdUI7UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsdUJBQXVC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amVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25Db250ZXh0U2VydmljZSB9IGZyb20gJy4uL2FwcC1jb250ZXh0L2FwcGxpY2F0aW9uLWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuL3Blcm1pc3Npb24uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTWVudVNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBfbWVudUl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBfcm9vdE1lbnU6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSBtYXBwaW5nUm91dGVyTGluayA9IHt9O1xyXG4gICAgcHJpdmF0ZSBtYXBwaW5nUmV2ZXNlUm91dGVyTGluayA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBtZW51Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfYXBwbGljYXRpb25Db250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICB9XHJcblxyXG4gICAgbWFwKHNvdXJjZVJvdXRlckxpbmssIG1hcHBlZFJvdXRlckxpbms6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1hcHBlZFJvdXRlckxpbmspIHtcclxuICAgICAgICAgICAgdGhpcy5tYXBwaW5nUm91dGVyTGlua1tpdGVtXSA9IHNvdXJjZVJvdXRlckxpbms7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW3NvdXJjZVJvdXRlckxpbmtdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW3NvdXJjZVJvdXRlckxpbmtdLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW3NvdXJjZVJvdXRlckxpbmtdID0gW2l0ZW1dO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrTWFwcGluZ1JvdXRlckxpbmsobWVudVJvdXRlckxpbmssIGN1cnJlbnRSb3V0ZXJMaW5rKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwcGluZ1JvdXRlckxpbmtbY3VycmVudFJvdXRlckxpbmtdID09IG1lbnVSb3V0ZXJMaW5rIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW21lbnVSb3V0ZXJMaW5rXSAmJiB0aGlzLm1hcHBpbmdSZXZlc2VSb3V0ZXJMaW5rW21lbnVSb3V0ZXJMaW5rXS5zb21lKHggPT4gY3VycmVudFJvdXRlckxpbmsuc3RhcnRzV2l0aCh4KSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGluaXRNZW51SXRlbXMobWVudXM6IGFueVtdKSB7XHJcbiAgICAvLyAgICAgdGhpcy5fbWVudUl0ZW1zID0gbWVudXM7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaW5pdFJvb3RNZW51KG1lbnU6IGFueSkge1xyXG4gICAgICAgIHRoaXMuX3Jvb3RNZW51ID0gbWVudTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yb290TWVudTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRNZW51SXRlbXMobWVudXM6IGFueVtdLCBjbGVhclByZXZNZW51ID0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNldFZpc2libGVNZW51cyhtZW51cykudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBbXTtcclxuICAgICAgICAgICAgbWVudXMuZm9yRWFjaChtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghbS5pc1Jvb3RNZW51KVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChtKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yb290TWVudS5sYWJlbCA9IG0ubGFiZWw7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBsZXQgb2xkTWVudSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuY2xvbmVPYmplY3QodGhpcy5nZXRNZW51SXRlbXMoKSk7XHJcbiAgICAgICAgICAgIGlmIChjbGVhclByZXZNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBvbGRNZW51ID0gdGVtcDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG9sZE1lbnUucHVzaCguLi50ZW1wKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fbWVudUl0ZW1zLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuX21lbnVJdGVtcy5wdXNoKC4uLnRoaXMucmVjdXJzaXZlT3JkZXJCeShvbGRNZW51KSk7XHJcbiAgICAgICAgICAgIHRoaXMubWVudUNoYW5nZWQubmV4dCh0aGlzLl9tZW51SXRlbXMpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcmVjdXJzaXZlT3JkZXJCeShtZW51czogYW55W10pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudXMpIHtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtLml0ZW1zID0gdGhpcy5yZWN1cnNpdmVPcmRlckJ5KGl0ZW0uaXRlbXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLm9yZGVyQnkobWVudXMsICdvcmRlcicpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1vZHVsZU5hbWUoY29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbTogYW55ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4gKDxhbnk+eCkuY29kZSA9PT0gY29kZSk7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0udGl0bGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TG9uZ01vZHVsZU5hbWUoY29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbTogYW55ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5hcHBNZXRhZGF0YS5hcHBTd2l0Y2hlci5maW5kKHggPT4gKDxhbnk+eCkuY29kZSA9PT0gY29kZSk7XHJcbiAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubG9uZ1RpdGxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGxvb3BHZXRBY3RpdmUobWVudXMsIHJlc3VsdCwgbGFzdExlbmd0aCkge1xyXG4gICAgICAgIG1lbnVzLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmFjdGl2YXRlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IGxhc3RMZW5ndGggJiYgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5pdGVtcyAmJiByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLml0ZW1zLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHRoaXMubG9vcEdldEFjdGl2ZShyZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdLml0ZW1zLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVBY3RpdmVzKCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIHRoaXMubG9vcEdldEFjdGl2ZSh0aGlzLl9tZW51SXRlbXMsIHJlc3VsdCwgcmVzdWx0Lmxlbmd0aCk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXN0TWVudUFjdGl2ZSgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICB0aGlzLmxvb3BHZXRBY3RpdmUodGhpcy5fbWVudUl0ZW1zLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgpO1xyXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbG9vcEdldE1lbnVJdGVtKG1lbnVzLCBpbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVzKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmluc3RhbmNlSWQgPT0gaW5zdGFuY2VJZClcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5sb29wR2V0TWVudUl0ZW0oaXRlbS5pdGVtcywgaW5zdGFuY2VJZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IG51bGwpXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVJdGVtKGluc3RhbmNlSWQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb29wR2V0TWVudUl0ZW0odGhpcy5fbWVudUl0ZW1zLCBpbnN0YW5jZUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51SXRlbXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lbnVJdGVtcztcclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgc2V0VmlzaWJsZU1lbnVzKG1lbnVzKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5hc3luY0ZvckVhY2gobWVudXMsIGFzeW5jIGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFZpc2libGVNZW51KGVsZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2V0VmlzaWJsZU1lbnUoZWxlbWVudCkge1xyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc1Jvb3RNZW51KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50LmlzQ3VzdG9tQXV0aGVuKSB7XHJcbiAgICAgICAgICAgIC8vIGVsZW1lbnQudmlzaWJsZSA9IGVsZW1lbnQudmlzaWJsZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYWxsb3dBbm9ueW1vdXMpIHtcclxuICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5pdGVtcyAmJiBlbGVtZW50Lml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5hc3luY0ZvckVhY2goZWxlbWVudC5pdGVtcywgYXN5bmMgZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldFZpc2libGVNZW51KGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGVsZW1lbnQuaXRlbXMuc29tZSh4ID0+IHgudmlzaWJsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuX2FwcGxpY2F0aW9uQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgICAgICBpZiAocm9vdC5kYXRhLmN1cnJlbnRVc2VyICYmIHJvb3QuZGF0YS5jdXJyZW50VXNlci51c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlcnZpY2UgPSByb290LmRhdGEuY3VycmVudEFwcE1ldGFkYXRhLmNvZGU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gYCR7cm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlfSR7ZWxlbWVudC5yb3V0ZXJMaW5rfWAudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBpc0F1dGhvcml6ZWQgPSBhd2FpdCB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoc2VydmljZSwgcGVybWlzc2lvbik7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBpc0F1dGhvcml6ZWQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVuZGVyTWVudUJ5QXBwQ29kZShzY29wZU5hbWU6IHN0cmluZywgYXBwQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWVudUl0ZW1zID0gW107XHJcbiAgICAgICAgbGV0IG1lbnVVcmwgPSBgYXNzZXRzL21lbnVzLyR7YXBwQ29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpfS5qc29uYDtcclxuICAgICAgICBpZiAoc2NvcGVOYW1lKSB7XHJcbiAgICAgICAgICAgIG1lbnVVcmwgPSBgYXNzZXRzL21lbnVzLyR7c2NvcGVOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCl9LyR7YXBwQ29kZS50b0xvY2FsZUxvd2VyQ2FzZSgpfS5qc29uYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmV0Y2gobWVudVVybCkudGhlbihhc3luYyBycyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1lbnUgPSBKU09OLnBhcnNlKGF3YWl0IHJzLnRleHQoKSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TWVudUl0ZW1zKG1lbnUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi8iLCJzb3VyY2VzIjpbInNlcnZpY2VzL21lbnUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDdkYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7QUFHekQsTUFBTSxPQUFPLFdBQVc7SUFRcEIsWUFDWSxvQkFBeUMsRUFDekMsa0JBQXFDLEVBQ3JDLGNBQTZCLEVBQzdCLG1CQUE4QztRQUg5Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3pDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUFDckMsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUEyQjtRQVhsRCxlQUFVLEdBQVUsRUFBRSxDQUFDO1FBQ3ZCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLDRCQUF1QixHQUFHLEVBQUUsQ0FBQztRQUU5QixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFRN0MsQ0FBQztJQUVELEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBdUI7UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7WUFDaEQsSUFBSSxJQUFJLENBQUMsdUJBQXVC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RCxNQUFNLFVBQVUsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFFN0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDckYsT0FBTyxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUM7aUJBQ2xDO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2lCQUMzQjthQUNKO1FBRUwsQ0FBQztLQUFBO0lBRUssbUJBQW1CLENBQUMsT0FBZTs7WUFDckMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUM7WUFDbkUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFNLEVBQUUsRUFBQyxFQUFFO2dCQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFBLENBQUMsQ0FBQztRQUNQLENBQUM7S0FBQTs7OztZQTVMSixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzs7WUFIekIsbUJBQW1CO1lBQ25CLGlCQUFpQjtZQUZqQixhQUFhO1lBRGIseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgX21lbnVJdGVtczogYW55W10gPSBbXTtcclxuICAgIHByaXZhdGUgX3Jvb3RNZW51OiBhbnkgPSB7fTtcclxuICAgIHByaXZhdGUgbWFwcGluZ1JvdXRlckxpbmsgPSB7fTtcclxuICAgIHByaXZhdGUgbWFwcGluZ1JldmVzZVJvdXRlckxpbmsgPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgbWVudUNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX2FwcGxpY2F0aW9uQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZSxcclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIG1hcChzb3VyY2VSb3V0ZXJMaW5rLCBtYXBwZWRSb3V0ZXJMaW5rOiBhbnlbXSkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtYXBwZWRSb3V0ZXJMaW5rKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcGluZ1JvdXRlckxpbmtbaXRlbV0gPSBzb3VyY2VSb3V0ZXJMaW5rO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1tzb3VyY2VSb3V0ZXJMaW5rXSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1tzb3VyY2VSb3V0ZXJMaW5rXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1tzb3VyY2VSb3V0ZXJMaW5rXSA9IFtpdGVtXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja01hcHBpbmdSb3V0ZXJMaW5rKG1lbnVSb3V0ZXJMaW5rLCBjdXJyZW50Um91dGVyTGluaykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hcHBpbmdSb3V0ZXJMaW5rW2N1cnJlbnRSb3V0ZXJMaW5rXSA9PSBtZW51Um91dGVyTGluayB8fFxyXG4gICAgICAgICAgICAodGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1ttZW51Um91dGVyTGlua10gJiYgdGhpcy5tYXBwaW5nUmV2ZXNlUm91dGVyTGlua1ttZW51Um91dGVyTGlua10uc29tZSh4ID0+IGN1cnJlbnRSb3V0ZXJMaW5rLnN0YXJ0c1dpdGgoeCkpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpbml0TWVudUl0ZW1zKG1lbnVzOiBhbnlbXSkge1xyXG4gICAgLy8gICAgIHRoaXMuX21lbnVJdGVtcyA9IG1lbnVzO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGluaXRSb290TWVudShtZW51OiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9yb290TWVudSA9IG1lbnU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fcm9vdE1lbnU7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TWVudUl0ZW1zKG1lbnVzOiBhbnlbXSwgY2xlYXJQcmV2TWVudSA9IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXRWaXNpYmxlTWVudXMobWVudXMpLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gW107XHJcbiAgICAgICAgICAgIG1lbnVzLmZvckVhY2gobSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW0uaXNSb290TWVudSlcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2gobSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcm9vdE1lbnUubGFiZWwgPSBtLmxhYmVsO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgbGV0IG9sZE1lbnUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMuZ2V0TWVudUl0ZW1zKCkpO1xyXG4gICAgICAgICAgICBpZiAoY2xlYXJQcmV2TWVudSkge1xyXG4gICAgICAgICAgICAgICAgb2xkTWVudSA9IHRlbXA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBvbGRNZW51LnB1c2goLi4udGVtcCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX21lbnVJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgICB0aGlzLl9tZW51SXRlbXMucHVzaCguLi50aGlzLnJlY3Vyc2l2ZU9yZGVyQnkob2xkTWVudSkpO1xyXG4gICAgICAgICAgICB0aGlzLm1lbnVDaGFuZ2VkLm5leHQodGhpcy5fbWVudUl0ZW1zKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJlY3Vyc2l2ZU9yZGVyQnkobWVudXM6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVzKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLml0ZW1zICYmIGl0ZW0uaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5pdGVtcyA9IHRoaXMucmVjdXJzaXZlT3JkZXJCeShpdGVtLml0ZW1zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5vcmRlckJ5KG1lbnVzLCAnb3JkZXInKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb2R1bGVOYW1lKGNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+ICg8YW55PngpLmNvZGUgPT09IGNvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLnRpdGxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExvbmdNb2R1bGVOYW1lKGNvZGU6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW06IGFueSA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGEuYXBwU3dpdGNoZXIuZmluZCh4ID0+ICg8YW55PngpLmNvZGUgPT09IGNvZGUpO1xyXG4gICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtLmxvbmdUaXRsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBsb29wR2V0QWN0aXZlKG1lbnVzLCByZXN1bHQsIGxhc3RMZW5ndGgpIHtcclxuICAgICAgICBtZW51cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5hY3RpdmF0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiBsYXN0TGVuZ3RoICYmIHJlc3VsdFtyZXN1bHQubGVuZ3RoIC0gMV0uaXRlbXMgJiYgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5pdGVtcy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB0aGlzLmxvb3BHZXRBY3RpdmUocmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXS5pdGVtcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51QWN0aXZlcygpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuICAgICAgICB0aGlzLmxvb3BHZXRBY3RpdmUodGhpcy5fbWVudUl0ZW1zLCByZXN1bHQsIHJlc3VsdC5sZW5ndGgpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdE1lbnVBY3RpdmUoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgdGhpcy5sb29wR2V0QWN0aXZlKHRoaXMuX21lbnVJdGVtcywgcmVzdWx0LCByZXN1bHQubGVuZ3RoKTtcclxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGxvb3BHZXRNZW51SXRlbShtZW51cywgaW5zdGFuY2VJZCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBudWxsO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtZW51cykge1xyXG4gICAgICAgICAgICBpZiAoaXRlbS5pbnN0YW5jZUlkID09IGluc3RhbmNlSWQpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICAgICAgZWxzZSBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMubG9vcEdldE1lbnVJdGVtKGl0ZW0uaXRlbXMsIGluc3RhbmNlSWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51SXRlbShpbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9vcEdldE1lbnVJdGVtKHRoaXMuX21lbnVJdGVtcywgaW5zdGFuY2VJZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUl0ZW1zKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tZW51SXRlbXM7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIHNldFZpc2libGVNZW51cyhtZW51cykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuYXN5bmNGb3JFYWNoKG1lbnVzLCBhc3luYyBlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRWaXNpYmxlTWVudShlbGVtZW50KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHNldFZpc2libGVNZW51KGVsZW1lbnQpIHtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNSb290TWVudSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZWxlbWVudC5pc0N1c3RvbUF1dGhlbikge1xyXG4gICAgICAgICAgICAvLyBlbGVtZW50LnZpc2libGUgPSBlbGVtZW50LnZpc2libGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmFsbG93QW5vbnltb3VzKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuaXRlbXMgJiYgZWxlbWVudC5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2NvbW1vblNlcnZpY2UuYXN5bmNGb3JFYWNoKGVsZW1lbnQuaXRlbXMsIGFzeW5jIGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXRWaXNpYmxlTWVudShlbGVtZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBlbGVtZW50Lml0ZW1zLnNvbWUoeCA9PiB4LnZpc2libGUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9hcHBsaWNhdGlvbkNvbnRleHQuZ2V0Um9vdENvbnRleHQoKTtcclxuICAgICAgICAgICAgaWYgKHJvb3QuZGF0YS5jdXJyZW50VXNlciAmJiByb290LmRhdGEuY3VycmVudFVzZXIudXNlcklkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZXJ2aWNlID0gcm9vdC5kYXRhLmN1cnJlbnRBcHBNZXRhZGF0YS5jb2RlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbiA9IGAke3Jvb3QuZGF0YS5jdXJyZW50QXBwTWV0YWRhdGEuY29kZX0ke2VsZW1lbnQucm91dGVyTGlua31gLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNBdXRob3JpemVkID0gYXdhaXQgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuaXNBdXRob3JpemVkKHNlcnZpY2UsIHBlcm1pc3Npb24pO1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gaXNBdXRob3JpemVkO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbmRlck1lbnVCeUFwcENvZGUoYXBwQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fbWVudUl0ZW1zID0gW107XHJcbiAgICAgICAgY29uc3QgbWVudVVybCA9IGBhc3NldHMvbWVudXMvJHthcHBDb2RlLnRvTG9jYWxlTG93ZXJDYXNlKCl9Lmpzb25gO1xyXG4gICAgICAgIGZldGNoKG1lbnVVcmwpLnRoZW4oYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZW51ID0gSlNPTi5wYXJzZShhd2FpdCBycy50ZXh0KCkpO1xyXG4gICAgICAgICAgICB0aGlzLnNldE1lbnVJdGVtcyhtZW51KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=
|