@acorex/components 3.0.23 → 3.0.24

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.
Files changed (34) hide show
  1. package/acorex-components.metadata.json +1 -1
  2. package/bundles/acorex-components.umd.js +13 -13
  3. package/bundles/acorex-components.umd.js.map +1 -1
  4. package/bundles/acorex-components.umd.min.js +1 -1
  5. package/bundles/acorex-components.umd.min.js.map +1 -1
  6. package/esm2015/lib/color-picker/color-picker.component.js +2 -2
  7. package/esm2015/lib/date-picker/date-picker.component.js +2 -2
  8. package/esm2015/lib/form-group/form-group.component.js +2 -2
  9. package/esm2015/lib/number-box/number-box.component.js +2 -2
  10. package/esm2015/lib/password-box/password-box.component.js +2 -2
  11. package/esm2015/lib/searchbox/searchbox.component.js +2 -2
  12. package/esm2015/lib/selectbox/selectbox.component.js +2 -2
  13. package/esm2015/lib/selectbox/selectbox2.component.js +2 -2
  14. package/esm2015/lib/textarea/textarea.component.js +2 -2
  15. package/esm2015/lib/textbox/textbox.component.js +2 -2
  16. package/esm2015/lib/time-picker/time-picker.component.js +2 -2
  17. package/esm2015/lib/tooltip/tooltip.directive.js +3 -3
  18. package/esm5/lib/color-picker/color-picker.component.js +2 -2
  19. package/esm5/lib/date-picker/date-picker.component.js +2 -2
  20. package/esm5/lib/form-group/form-group.component.js +2 -2
  21. package/esm5/lib/number-box/number-box.component.js +2 -2
  22. package/esm5/lib/password-box/password-box.component.js +2 -2
  23. package/esm5/lib/searchbox/searchbox.component.js +2 -2
  24. package/esm5/lib/selectbox/selectbox.component.js +2 -2
  25. package/esm5/lib/selectbox/selectbox2.component.js +2 -2
  26. package/esm5/lib/textarea/textarea.component.js +2 -2
  27. package/esm5/lib/textbox/textbox.component.js +2 -2
  28. package/esm5/lib/time-picker/time-picker.component.js +2 -2
  29. package/esm5/lib/tooltip/tooltip.directive.js +3 -3
  30. package/fesm2015/acorex-components.js +13 -13
  31. package/fesm2015/acorex-components.js.map +1 -1
  32. package/fesm5/acorex-components.js +13 -13
  33. package/fesm5/acorex-components.js.map +1 -1
  34. package/package.json +1 -1
@@ -998,10 +998,10 @@ AXSelectBoxComponent = AXSelectBoxComponent_1 = __decorate([
998
998
  template: "<ax-drop-down [size]=\"size\" [rtl]=\"rtl\" [showDropDownButton]=\"showDropDownButton\" [disabled]=\"disabled\"\r\n [readonly]=\"readonly\" #d (dropdownToggle)=\"dropdownToggleSelecBox($event)\">\r\n <ng-container start>\r\n <ng-content select=\"[start]\">\r\n </ng-content>\r\n </ng-container>\r\n <ng-container header>\r\n <div class=\"ax chips-container\" [horizontalScroll]=\"40\">\r\n <div class=\"chips\" [class.chips-blank]=\"mode === 'single'\" [title]=\"item[textField]\"\r\n *ngFor=\"let item of selectedItems\">\r\n <span class=\"chips-text\">\r\n {{item[textField]}}\r\n </span>\r\n <span class=\"close-icon\" (click)=\"handleItemRemoveClick(item)\"\r\n *ngIf=\"(readonly!=true || itemRemove ==true)&& disabled!=true && (allowNull==true || (selectedItems.length > 1))\">\r\n <i class=\"far fa-times-circle close\"></i>\r\n </span>\r\n </div>\r\n <div class=\"search-wrapper\" (click)=\"onTextBoxClick($event)\">\r\n <ax-text-box #textBoxSelectBox [textAlign]=\"textAlign\"\r\n [placeholder]=\"selectedItems.length == 0 ? placeholder : ''\" [readonly]=\"readonly\"\r\n [disabled]=\"disabled\" (onkey)=\"handleKeyEvent($event)\" [size]=\"size\"\r\n (onFocus)=\"onFocusTextBox($event)\">\r\n </ax-text-box>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-container end>\r\n <ng-content select=\"[end]\">\r\n </ng-content>\r\n </ng-container>\r\n\r\n <ng-container panel>\r\n <div *ngIf=\"allowSearch\" class=\"search-wrapper\" style=\"padding: 0.7em;\">\r\n <ax-search-box #serchBox [(value)]=\"text\" (onkey)=\"handleKeyEventSearch($event)\"\r\n (textChanged)=\"textChanged($event)\" (onButtonClick)=\"textChanged($event)\">\r\n </ax-search-box>\r\n </div>\r\n <div class=\"ax list-container\">\r\n <div #listContainer style=\"max-height: 300px;overflow-y: auto;width: 100%;\" (scroll)=\"scrolled($event)\">\r\n <ng-container *ngIf=\"getItems().length>0; then thenTemplate; else elseTemplate\"></ng-container>\r\n <ng-template #thenTemplate>\r\n <div class=\"list-item\" *ngFor=\"let item of getItems();let i = index\"\r\n [class.focused]=\"i==currentfocusedIndex\" [class.selected]=\"isItemSelected(item)\"\r\n (click)=\"handleItemClick($event,item)\">\r\n <div style=\"display: flex;\">\r\n <ax-check-box *ngIf=\"showCheckBox\" [size]=\"size\" [value]=\"isItemSelected(item)\"\r\n [disabled]=\"!allowNull && selectedItems.length === 1 && isItemSelected(item)\">\r\n </ax-check-box>\r\n <ng-container *ngIf=\"rowTemplate; else elseTemplate\">\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n <ng-container *ngTemplateOutlet=\"rowTemplate; context:{ $implicit: item }\">\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n <ng-template #elseTemplate>\r\n <div style=\"white-space: nowrap;text-overflow: ellipsis;overflow: hidden;\"\r\n [title]=\"item[textField]\"\r\n [ngStyle]=\"(showCheckBox) ? {'padding-inline-start': '0.5rem'}:''\">\r\n {{ item[textField] }}\r\n </div>\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n\r\n </ng-template>\r\n <div *ngIf=\"showLoading\" class=\"ax-pad-sm\" style=\"text-align: center;\">\r\n <i class=\"far fa-spinner-third fa-pulse fa-2x\" style=\"color: var(--ax-primary-color);\"></i>\r\n\r\n </div>\r\n <!-- <ax-loading-indicator ></ax-loading-indicator> -->\r\n <ng-template #elseTemplate>\r\n <ng-container *ngIf=\"showLoading == true; then searchTemplate else noDataTemplate\"></ng-container>\r\n <ng-template #searchTemplate>\r\n <div class=\"list-item\">\r\n {{'common.searching' | trans}}\r\n </div>\r\n </ng-template>\r\n <ng-template #noDataTemplate>\r\n <div class=\"list-item\">\r\n {{'common.noDataFound' | trans}}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n\r\n </div>\r\n\r\n </div>\r\n </ng-container>\r\n\r\n</ax-drop-down>",
999
999
  encapsulation: ViewEncapsulation.None,
1000
1000
  changeDetection: ChangeDetectionStrategy.OnPush,
1001
- host: { style: 'display: contents;' },
1001
+ host: {},
1002
1002
  providers: [{ provide: AXValidatableComponent, useExisting: AXSelectBoxComponent_1 }]
1003
1003
  }),
1004
1004
  __metadata("design:paramtypes", [ChangeDetectorRef, ElementRef, NgZone])
1005
1005
  ], AXSelectBoxComponent);
1006
1006
  export { AXSelectBoxComponent };
1007
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Rib3gvc2VsZWN0Ym94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBK0Qsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsV0FBVztJQUMvRCxZQUFZLFNBQWMsRUFBUyxhQUFvQixFQUFTLGNBQTJC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SyxFQUFFOzt1REFBNEI7QUFDM0I7SUFBUixLQUFLLEVBQUU7O3dEQUE4QjtBQUM3QjtJQUFSLEtBQUssRUFBRTs7a0RBQXdDO0FBRXRDO0lBQVQsTUFBTSxFQUFFOzhCQUFjLFlBQVk7eURBQW9DO0FBRTdEO0lBQVQsTUFBTSxFQUFFOzhCQUFTLFlBQVk7b0RBQWdDO0FBRXBEO0lBQVQsTUFBTSxFQUFFOzhCQUFVLFlBQVk7cURBQWdDO0FBSS9EO0lBREMsS0FBSyxFQUFFOzs7aURBR1A7QUFtQkQ7SUFEQyxNQUFNLEVBQUU7OEJBQ1MsWUFBWTs4REFBMEY7QUFHeEg7SUFEQyxNQUFNLEVBQUU7OEJBQ1ksWUFBWTtpRUFBb0M7QUFJckU7SUFEQyxLQUFLLEVBQUU7Ozt5REFHUDtBQWtLRDtJQURDLE1BQU0sRUFBRTs4QkFDYSxZQUFZO2tFQUFnRDtBQUdsRjtJQURDLEtBQUssRUFBRTs7OzBEQU9QO0FBblRVLG9CQUFvQjtJQVJoQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsZUFBZTtRQUN6QixndktBQXlDO1FBQ3pDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1FBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1FBQy9DLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtRQUNyQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsc0JBQW9CLEVBQUUsQ0FBQztLQUNwRixDQUFDO3FDQXVGeUIsaUJBQWlCLEVBQWUsVUFBVSxFQUFnQixNQUFNO0dBdEY5RSxvQkFBb0IsQ0FrNUJoQztTQWw1Qlksb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgSW5wdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRWxlbWVudFJlZixcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgTmdab25lLFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgVGVtcGxhdGVSZWZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBWFRleHRCb3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhEcm9wZG93bkNvbXBvbmVudCB9IGZyb20gJy4uL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYQmFzZVNpemFibGVDb21wb25lbnQsIEFYQmFzZUlucHV0Q29tcG9uZW50LCBBWEVsZW1lbnRTaXplLCBBWFZhbGlkYXRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vYmFzZS9lbGVtZW50LmNsYXNzJztcclxuaW1wb3J0IHsgQVhEYXRhU291cmNlQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YS1zb3VyY2UvZGF0YXNvdXJjZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWFZhbGlkYXRpb24gfSBmcm9tICcuLi92YWxpZGF0aW9uL3ZhbGlkYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhEYXRhU291cmNlUmVhZFBhcmFtcyB9IGZyb20gJy4uL2RhdGEtc291cmNlL3JlYWQtcGFyYW0nO1xyXG5pbXBvcnQgeyBBWEJhc2VFdmVudCB9IGZyb20gJy4uL2Jhc2UvZXZlbnRzLmNsYXNzJztcclxuaW1wb3J0IHsgQVhTZWFyY2hCb3hDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2hib3gvc2VhcmNoYm94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYQ29uZmlnIH0gZnJvbSAnQGFjb3JleC9jb3JlJztcclxuaW1wb3J0IHsgZGlmZmVyZW5jZUJ5IH0gZnJvbSAnbG9kYXNoJztcclxuZXhwb3J0IGNsYXNzIEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgQVhCYXNlRXZlbnQge1xyXG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudDogYW55LCBwdWJsaWMgc2VsZWN0ZWRJdGVtczogYW55W10sIHB1YmxpYyBzZWxlY3RlZFZhbHVlczogYW55W10gfCBhbnkpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXgtc2VsZWN0LWJveCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdGJveC5jb21wb25lbnQuaHRtbCcsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBob3N0OiB7IHN0eWxlOiAnZGlzcGxheTogY29udGVudHM7JyB9LFxyXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQVhWYWxpZGF0YWJsZUNvbXBvbmVudCwgdXNlRXhpc3Rpbmc6IEFYU2VsZWN0Qm94Q29tcG9uZW50IH1dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBWFNlbGVjdEJveENvbXBvbmVudCBleHRlbmRzIEFYVmFsaWRhdGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBBWEJhc2VTaXphYmxlQ29tcG9uZW50LCBBWEJhc2VJbnB1dENvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgc2hvd0Ryb3BEb3duQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChUZW1wbGF0ZVJlZiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICByb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQElucHV0KClcclxuICByb3dJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoQVhUZXh0Qm94Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHNwYW46IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICB0ZXh0Ym94OiBBWFRleHRCb3hDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2xpc3RDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGxpc3RDb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBAVmlld0NoaWxkKCdzZXJjaEJveCcsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIHNlcmNoQm94OiBBWFNlYXJjaEJveENvbXBvbmVudDtcclxuXHJcbiAgQFZpZXdDaGlsZCgndGV4dEJveFNlbGVjdEJveCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dEJveFNlbGVjdEJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2hlY2tCb3g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBydGw6IGJvb2xlYW4gPSBBWENvbmZpZy5nZXQoJ2xheW91dC5ydGwnKTtcclxuXHJcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuXHJcbiAgQElucHV0KCkgc2l6ZTogQVhFbGVtZW50U2l6ZSA9ICdtZCc7XHJcblxyXG4gIEBJbnB1dCgpIGFsbG93TnVsbDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHRleHRBbGlnbjogJ3JpZ2h0JyB8ICdsZWZ0JyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSBidWZmZXJTaXplOiBudW1iZXIgPSAyMDtcclxuXHJcbiAgQElucHV0KCkgcmVtb3RlT3BlcmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIGRyb3Bkb3duVG9nZ2xlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vIHRoaXMgaW5wdXQgaXMgUHJpdmF0ZSBhbmQgb25seSB1c2UgaW4gTE9WXHJcblxyXG4gIGN1cnJlbnRmb2N1c2VkSW5kZXg6IG51bWJlciA9IC0xO1xyXG4gIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIHNraXA6IG51bWJlciA9IC0xO1xyXG4gIHNlYXJjaFRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIC8vIEBJbnB1dCgpXHJcbiAgLy8gY2hpcHNXaWR0aDogc3RyaW5nID0gJyc7XHJcblxyXG4gIHRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlciA9IDA7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoQVhEYXRhU291cmNlQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHByaXZhdGUgX2NvbnRlbnREYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XHJcblxyXG4gIHByaXZhdGUgX2RhdGFTb3VyY2U6IEFYRGF0YVNvdXJjZUNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGRhdGFTb3VyY2UoKTogQVhEYXRhU291cmNlQ29tcG9uZW50IHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlID8gdGhpcy5fZGF0YVNvdXJjZSA6IHRoaXMuX2NvbnRlbnREYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBkYXRhU291cmNlKHY6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCkge1xyXG4gICAgdGhpcy5fZGF0YVNvdXJjZSA9IHY7XHJcbiAgfVxyXG5cclxuICBAQ29udGVudENoaWxkKEFYVmFsaWRhdGlvbiwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIF9jb250ZW50VmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xyXG5cclxuICBwcml2YXRlIF92YWxpZGF0aW9uOiBBWFZhbGlkYXRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCB2YWxpZGF0aW9uKCk6IEFYVmFsaWRhdGlvbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsaWRhdGlvbiA/IHRoaXMuX3ZhbGlkYXRpb24gOiB0aGlzLl9jb250ZW50VmFsaWRhdGlvbjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdmFsaWRhdGlvbih2OiBBWFZhbGlkYXRpb24pIHtcclxuICAgIHRoaXMuX3ZhbGlkYXRpb24gPSB2O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIHJlZjogRWxlbWVudFJlZiwgcHJpdmF0ZSB6b25lOiBOZ1pvbmUpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdkJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBkcm9wZG93bjogQVhEcm9wZG93bkNvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgYWxsb3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHRleHRGaWVsZDogc3RyaW5nID0gJ3RleHQnO1xyXG4gIEBJbnB1dCgpIHZhbHVlRmllbGQ6IHN0cmluZyA9ICd2YWx1ZSc7XHJcbiAgQElucHV0KCkgbW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XHJcbiAgaXRlbVJlbW92ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZTogRXZlbnRFbWl0dGVyPGFueVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkJsdXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkZvY3VzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBwcml2YXRlIF9pdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaXRlbXMoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGl0ZW1zKHY6IGFueVtdKSB7XHJcbiAgICB0aGlzLl9pdGVtcyA9IHY7XHJcbiAgICBpZiAodGhpcy5pdGVtc0NoYW5nZSkge1xyXG4gICAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQodik7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGVkVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpdGVtc0ZpbHRlcmVkOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyAjZW5kcmVnaW9uXHJcblxyXG4gIGRyb3BEb3duRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0aW9uQ2hhbmdlZDogRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ+KCk7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGVkSXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBzZWxlY3RlZEl0ZW1zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zIHx8IFtdO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IHNlbGVjdGVkSXRlbXModjogYW55W10pIHtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh2KTtcclxuICAgIC8vIGlmICghdikge1xyXG4gICAgLy8gICB2ID0gW107XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgLy8gaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XHJcbiAgICAvLyAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGUgPT0gJ3NpbmdsZScgPyB2LnNsaWNlKDAsIDEpIDogWy4uLm5ldyBTZXQodildOyAvL1suLi5uZXcgU2V0KHZbMF0pXSA6IFsuLi5uZXcgU2V0KHYpXTtcclxuICAgIC8vICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgIC8vICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgIC8vICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIC8vICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAvLyAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSXRlbXMpIHtcclxuICAgIC8vICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkSXRlbXNDaGFuZ2UodjogYW55W10sIG9sZDogYW55W10gPSB0aGlzLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgIGlmICghdikge1xyXG4gICAgICB2ID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uc3Qgb2xkID0gdGhpcy5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgaWYgKEpTT04uc3RyaW5naWZ5KG9sZCkgIT09IEpTT04uc3RyaW5naWZ5KHYpKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGUgPT0gJ3NpbmdsZScgPyB2LnNsaWNlKDAsIDEpIDogWy4uLm5ldyBTZXQodildOyAvL1suLi5uZXcgU2V0KHZbMF0pXSA6IFsuLi5uZXcgU2V0KHYpXTtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChjKSA9PiAoYy5zZWxlY3RlZCA9IHRydWUpKTtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoKGkpID0+IGlbdGhpcy52YWx1ZUZpZWxkXSA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgaWYgKHRoaXMucm93VGVtcGxhdGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnJvd0lucHV0VGVtcGxhdGUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMucm93VGVtcGxhdGUgPSB0aGlzLnJvd0lucHV0VGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ydGwgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJ0bCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2RpcmVjdGlvbicpID09PSAncnRsJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNjcm9sbGVkKGUpIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZW1vdGVPcGVyYXRpb24gJiZcclxuICAgICAgdGhpcy50b3RhbENvdW50ID4gdGhpcy5pdGVtcy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICE9IDAgJiZcclxuICAgICAgdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5saXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wIC0gMzAwIDwgNTBcclxuICAgICkge1xyXG4gICAgICBpZiAodGhpcy5za2lwICE9PSB0aGlzLml0ZW1zLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7IC8vKiAoTWF0aC5mbG9vcih0aGlzLml0ZW1zLmxlbmd0aCAvIHRoaXMuYnVmZmVyU2l6ZSkgKyAxKTtcclxuICAgICAgICBpZiAodGhpcy50ZXh0Ym94KSB7XHJcbiAgICAgICAgICBwYXJhbXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZEl0ZW1zKHY6IGFueVtdLCBpc1VzZXJJbnB1dDogYm9vbGVhbikge1xyXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmIChpc1VzZXJJbnB1dCkge1xyXG4gICAgICBjaGFuZ2VkID0gSlNPTi5zdHJpbmdpZnkodikgIT09IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB2O1xyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XHJcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2VhcmNoQ2hhbmdlT2JzZXJ2ZXI6IGFueTtcclxuXHJcbiAgZGVsYXk6IG51bWJlciA9IDUwMDtcclxuXHJcbiAgdGV4dENoYW5nZWQoZSkge1xyXG4gICAgaWYgKChlLnZhbHVlID09PSBudWxsIHx8IGUudmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlLnZhbHVlID09PSAnJykgJiYgKGUub2xkVmFsdWUgPT09IG51bGwgfHwgZS5vbGRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGUub2xkVmFsdWUgPT09ICcnKSkge1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gLTE7XHJcbiAgICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9IHRoaXMudGV4dDtcclxuICAgICAgICAvLyAgdGhpcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcclxuICAgICAgICAvLyB0aGlzLnRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIC8vIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgICAgICBpZiAodGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcbiAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XHJcbiAgICAgICAgLy8gcGFyYW1zLnNlYXJjaFRleHQgPSBlLnZhbHVlO1xyXG4gICAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgICBwYXJhbXMudGFrZSA9IHRoaXMuYnVmZmVyU2l6ZTtcclxuICAgICAgICB0aGlzLmZldGNoKHBhcmFtcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQnV0dG9uQ2xpY2soZSkge1xyXG4gICAgY29uc29sZS5sb2coJ29uQnV0dG9uQ2xpY2snLCBlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRJbmRleChzaWduOiAtMSB8IDEgfCBudWxsID0gbnVsbCk6IHZvaWQge1xyXG4gICAgaWYgKHNpZ24gPT0gbnVsbCkge1xyXG4gICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtc1xyXG4gICAgICAgICAgLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgICAgICAuaW5kZXhPZih0aGlzLnNlbGVjdGVkSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLml0ZW1zLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNpZ24gPT09IC0xID8gdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4LS0gOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgrKztcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMudGV4dFxyXG4gICAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICAgIDogdGhpcy5pdGVtcztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPVxyXG4gICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPCAwXHJcbiAgICAgICAgPyAwXHJcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPj0gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aFxyXG4gICAgICAgID8gdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCAtIDFcclxuICAgICAgICA6IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleDtcclxuICAgIC8vXHJcbiAgICAvLyBzZXQgc2Nyb2xsXHJcbiAgICBpZiAodGhpcy5saXN0Q29udGFpbmVyKSB7XHJcbiAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaXRlbURpdiA9IHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYC5saXN0LWl0ZW06bnRoLWNoaWxkKCR7dGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4fSlgKTtcclxuICAgICAgICBpZiAoaXRlbURpdikge1xyXG4gICAgICAgICAgaXRlbURpdi5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgc2VsZWN0ZWRWYWx1ZXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXSB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdIHwgYW55PigpO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRWYWx1ZXMoKTogYW55W10gfCBhbnkge1xyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMubWFwKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0pWzBdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXMubWFwKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0pIHx8IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSkge1xyXG4gICAgaWYgKHRoaXMuY29tcGFyZVNlbGVjdGVkVmFsdWVzKHYpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh2ID09IG51bGwpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgaWYgKHYgIT0gW10gJiYgdiAhPSAnJyAmJiB2ICE9IG51bGwpIHtcclxuICAgICAgICAgIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLndhaXRGb3JEYXRhKCgpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PSBjW3RoaXMudmFsdWVGaWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYgPT0gY1t0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IHYubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWRkSWQgPSBbXTtcclxuICAgICAgICAgICAgICAgIHYuZm9yRWFjaCgodklkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGFkZElkLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2SWRcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgbmV3SWQgPSBkaWZmZXJlbmNlQnkoYWRkSWQsIHRoaXMuc2VsZWN0ZWRJdGVtcywgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGxldCB2diA9IFtdO1xyXG4gICAgICAgICAgICAgICAgbmV3SWQuZm9yRWFjaCgocmMpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdnYucHVzaChyY1t0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtc1xyXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKVxyXG4gICAgICAgICAgICAgICAgICAuZm9yRWFjaCgocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2gocmVzKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAvLyAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHZ2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtc0NoYW5nZSh0aGlzLnNlbGVjdGVkSXRlbXMsIHZ2Lmxlbmd0aCA+IDAgPyBbMV0gOiB0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2LmluY2x1ZGVzKGNbdGhpcy52YWx1ZUZpZWxkXSkpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdiA9PT0gY1t0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlc0NoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWRWYWx1ZXMpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29tcGFyZVNlbGVjdGVkVmFsdWVzKG5ld1ZhbHVlOiBhbnlbXSB8IGFueSkge1xyXG4gICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5zZWxlY3RlZFZhbHVlcztcclxuICAgIHJldHVybiAoY3VycmVudFZhbHVlID09IG51bGwgJiYgbmV3VmFsdWUgPT0gbnVsbCkgfHwgSlNPTi5zdHJpbmdpZnkoY3VycmVudFZhbHVlKSA9PT0gSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRTZWxlY3RlZFZhbHVlcyh2OiBhbnlbXSB8IGFueSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGNoYW5nZWQgPSBpc1VzZXJJbnB1dCA/ICF0aGlzLmNvbXBhcmVTZWxlY3RlZFZhbHVlcyh2KSA6IGZhbHNlO1xyXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlcyA9IHY7XHJcbiAgICBpZiAoaXNVc2VySW5wdXQgJiYgY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpIHtcclxuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlZC5lbWl0KG5ldyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudCh0aGlzLCB0aGlzLnNlbGVjdGVkSXRlbXMsIHRoaXMuc2VsZWN0ZWRWYWx1ZXMpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmJ1ZmZlclNpemUgPCAxMCkge1xyXG4gICAgICB0aGlzLmJ1ZmZlclNpemUgPSAxMDtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgdGhpcy5zaG93Q2hlY2tCb3ggPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gfHwgKHRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMuaGFzU2VsZWN0ZWRWYWx1ZSkpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGRyb3Bkb3duVG9nZ2xlU2VsZWNCb3goZSkge1xyXG4gICAgdGhpcy50ZXh0ID0gJyc7XHJcbiAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuICAgIHRoaXMuZHJvcGRvd25Ub2dnbGUuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIC8vIGlmICghdGhpcy5hbGxvd1NlYXJjaCkge1xyXG4gICAgLy8gICAgIGlmICh0aGlzLnJlYWRvbmx5ID09IGZhbHNlKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuaXRlbVJlbW92ZSA9IHRydWU7XHJcbiAgICAvLyAgICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vIH1cclxuICAgIHRoaXMuaW5pdFZhbGlkYXRpb24odGhpcy5yZWYsICdzZWxlY3RlZEl0ZW1zJywgdGhpcy52YWxpZGF0aW9uKTtcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgLy8gaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gZmFsc2UpIHtcclxuICAgICAgLy8gICB0aGlzLmZldGNoKCk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5kYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmRhdGFSZWNlaXZlZChjLmRhdGEucmVzdWx0KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YVJlY2VpdmVkKGRhdGE6IGFueSkge1xyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQgJiYgdGhpcy5zZWFyY2hUZXh0ICE9IG51bGwgJiYgdGhpcy5zZWFyY2hUZXh0ICE9PSAnJykge1xyXG4gICAgICAgIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcclxuICAgICAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGEuaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEuaXRlbXMgPT0gdW5kZWZpbmVkID8gMCA6IGRhdGEuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChkYXRhLml0ZW1zICYmIGRhdGEuaXRlbXMubGVuZ3RoID09PSBkYXRhLnRvdGFsQ291bnQpIHtcclxuICAgICAgICB0aGlzLml0ZW1zID0gZGF0YS5pdGVtcztcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnRvdGFsQ291bnQpIHtcclxuICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGVsbSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGVsbSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLnRvdGFsQ291bnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZGF0YS5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChlbG0pO1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgICAgLy8gICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5sZW5ndGg7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXRlbXMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgLy8gcHJpdmF0ZSBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuXHJcbiAgZmV0Y2gocGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge30pIHtcclxuICAgIC8vICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHBhcmFtcy5za2lwID0gMDtcclxuICAgICAgdGhpcy5za2lwID0gMDtcclxuICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgIC8vIHRoaXMuaXRlbXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xyXG4gICAgICAvLyAgIHRoaXMuaXRlbXMucG9wKCk7XHJcbiAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgdCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IG51bGw7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXMobnVsbCwgdHJ1ZSk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gYyAhPT0gaXRlbSk7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSksXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgICAvLyB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5maWx0ZXIoYyA9PiBjICE9PSBpdGVtKTtcclxuICAgICAgLy8gdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICAgIC8vIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLnRleHQgPSAnJztcclxuICAgIHRoaXMudmFsaWRhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1c1RleHRCb3goZSkge31cclxuXHJcbiAgb25UZXh0Qm94Q2xpY2soZSkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgPT0gZmFsc2UgJiYgdGhpcy5yZWFkb25seSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUl0ZW1DbGljayhlOiBNb3VzZUV2ZW50LCBpdGVtOiBhbnkpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gaXRlbVt0aGlzLnZhbHVlRmllbGRdO1xyXG5cclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZTtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyh2YWx1ZSwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBleGlzdHMgPSB0aGlzLnNlbGVjdGVkVmFsdWVzLnNsaWNlKDApO1xyXG4gICAgICBpZiAoZXhpc3RzLmluY2x1ZGVzKHZhbHVlKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlSXRlbVJlbW92ZUNsaWNrKGl0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBleGlzdHMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlcyA9IGV4aXN0cztcclxuICAgICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKGV4aXN0cywgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG4gICAgLy8gaWYgKGUuc3RvcFByb3BhZ2F0aW9uKCkgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAvLyAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMCk7XHJcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RXZlbnRTZWFyY2goZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9XHJcbiAgICBpZiAoKGUua2V5ID09PSAnQXJyb3dEb3duJyB8fCBlLmtleSA9PT0gJ0Fycm93VXAnKSAmJiB0aGlzLmdldEl0ZW1zKCkubGVuZ3RoID4gMCAmJiBlLnR5cGUgPT09ICdrZXlkb3duJykge1xyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQnlJbmRleCh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGlmIChlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuICYmIHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgLy8gICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgIC8vICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1cygpO1xyXG4gICAgLy8gICAgIH0sIDApO1xyXG4gICAgLy8gfVxyXG4gICAgLy9lLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgLy9lLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICB0aGlzLm1vZGUgPT0gJ211bHRpcGxlJ1xyXG4gICAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fCAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgKGMpID0+XHJcbiAgICAgICAgICAgICAgICBjICE9PVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlID09ICdtdWx0aXBsZScpIHtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGlzQ2hhcihzdHI6IHN0cmluZykge1xyXG4gICAgaWYgKFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1NoaWZ0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdUYWInKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRyb2wnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0FsdCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQ2Fwc0xvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ01ldGEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NvbnRleHRNZW51JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFbnRlcicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQmFja3NwYWNlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQcmludFNjcmVlbicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnU2Nyb2xsTG9jaycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGF1c2UnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0hvbWUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VuZCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnSW5zZXJ0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdQYWdlVXAnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0RlbGV0ZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGFnZURvd24nKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ051bUxvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0VzY2FwZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnQXJyb3cnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ9mRRjEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YyJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMycpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y1JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjcnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y4JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGOScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjEwJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTEnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YxMicpXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlFdmVudChlOiBhbnkpIHtcclxuICAgIC8vIGNvbnN0IE51bWJlck1pbnVzUGF0dGVybiA9IC9bYS16QS1aMC05XFwtXS9nO1xyXG4gICAgLy8gY29uc3QgRmFyc2kgPSAvW9m+2obYrNit2K7Zh9i52LrZgdmC2KvYtdi22LTYs9uM2KjZhNin2KrZhtmF2qnar9mI2KbYr9iw2LHYsti32LjamNik2KXYo9ih2YvZjNmN2Y7Zj9mQ2ZFcXHNdKyQvO1xyXG4gICAgLy8gIGNvbnN0IGlucHV0Q2hhciA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZSk7XHJcbiAgICAvLyBjb25zdCBwYXR0ZXJuRW4gPSAvXlthLXpBLVowLTldKiQvO1xyXG4gICAgLy8gY29uc3QgcGF0dGVybiA9IC9eW1xcdTA2MDAtXFx1MDZGRlxcc10rJC87XHJcbiAgICBjb25zdCBpbnB1dENoYXIgPSBlLmtleTtcclxuICAgIGlmIChcclxuICAgICAgKGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQmFja3NwYWNlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnVGFiJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRW50ZXInICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdFc2NhcGUnICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd0Rvd24nICYmXHJcbiAgICAgICAgaW5wdXRDaGFyICE9ICdBcnJvd1VwJykgfHxcclxuICAgICAgZS5jb2RlID09PSAnU3BhY2UnIHx8XHJcbiAgICAgIGUuY3RybEtleSA9PSB0cnVlXHJcbiAgICApIHtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBlLmtleSA9PT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgZS50eXBlID09PSAna2V5ZG93bicgJiZcclxuICAgICAgKCh0aGlzLmFsbG93TnVsbCA9PT0gdHJ1ZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkgfHwgKHRoaXMuYWxsb3dOdWxsID09PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnBvcCgpO1xyXG4gICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IElOUFVUID0gU3RyaW5nLmZyb21DaGFyQ29kZShlLmtleUNvZGUpO1xyXG4gICAgaWYgKHRoaXMuaXNDaGFyKGUua2V5KSAmJiB0aGlzLmFsbG93U2VhcmNoICYmIGUuY3RybEtleSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICB0aGlzLnRleHQgPSBlLmtleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgIHRoaXMudGV4dCA9IG51bGw7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiYgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICsgKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmRyb3Bkb3duLmlzT3Blbikge1xyXG4gICAgICAgICAgLy8gIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCA9PT0gZmFsc2UpIHtcclxuICAgICAgaWYgKGUudHlwZSA9PT0gJ2tleWRvd24nICYmIGUua2V5ID09ICdFbnRlcicgJiYgdGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGNbdGhpcy52YWx1ZUZpZWxkXSA9PT0gdGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmICh0aGlzLmFsbG93TnVsbCA9PSB0cnVlIHx8ICh0aGlzLmFsbG93TnVsbCA9PSBmYWxzZSAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMSkpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoYykgPT5cclxuICAgICAgICAgICAgICAgICAgYyAhPT1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gIT09IHRoaXMuaXRlbXNbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zRmlsdGVyZWRbMF0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGV4dCAmJiB0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKHRoaXMuaXRlbXNGaWx0ZXJlZCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpOiB2b2lkIHtcclxuICAgIHRoaXMudGV4dGJveC5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICBsZXQgaXRlbSA9IFtdO1xyXG4gICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpO1xyXG5cclxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNGaWx0ZXJlZFtpbmRleF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpdGVtID0gdGhpcy5pdGVtc1tpbmRleF07XHJcbiAgICB9XHJcbiAgICAvL1xyXG4gICAgLy8gIGNvbnN0IGl0ZW0gPSB0aGlzLnRleHQgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpW2luZGV4XSA6IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG4gICAgaWYgKGl0ZW0pIHtcclxuICAgICAgdGhpcy5zZXRTZWxlY3RlZEl0ZW1zKFtpdGVtXSwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KCk7XHJcbiAgfVxyXG5cclxuICBnZXRJdGVtcygpOiBhbnlbXSB7XHJcbiAgICBpZiAodGhpcy5pdGVtcyA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIHJldHVybiAhdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJydcclxuICAgICAgPyB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpXHJcbiAgICAgIDogdGhpcy5pdGVtcztcclxuICB9XHJcblxyXG4gIGlzSXRlbVNlbGVjdGVkKGl0ZW06IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXSkubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXRlbXNTdGF0dXNPYnNlcnZlcjogYW55O1xyXG4gIHByaXZhdGUgd2FpdEZvckRhdGEoY2FsbGJhY2tmbjogKCkgPT4gdm9pZCkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgY2FsbGJhY2tmbigpO1xyXG4gICAgfSBlbHNlIGlmICghdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgIE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlciA9IG9ic2VydmVyO1xyXG4gICAgICB9KVxyXG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoYykgPT4ge1xyXG4gICAgICAgICAgY2FsbGJhY2tmbigpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
1007
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0Ym94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BhY29yZXgvY29tcG9uZW50cy8iLCJzb3VyY2VzIjpbImxpYi9zZWxlY3Rib3gvc2VsZWN0Ym94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLHVCQUF1QixFQUN2QixLQUFLLEVBQ0wsWUFBWSxFQUNaLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFNBQVMsRUFDVCxlQUFlLEVBQ2YsV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBK0Qsc0JBQXNCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN0QyxNQUFNLE9BQU8sZ0NBQWlDLFNBQVEsV0FBVztJQUMvRCxZQUFZLFNBQWMsRUFBUyxhQUFvQixFQUFTLGNBQTJC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SyxFQUFFOzt1REFBNEI7QUFDM0I7SUFBUixLQUFLLEVBQUU7O3dEQUE4QjtBQUM3QjtJQUFSLEtBQUssRUFBRTs7a0RBQXdDO0FBRXRDO0lBQVQsTUFBTSxFQUFFOzhCQUFjLFlBQVk7eURBQW9DO0FBRTdEO0lBQVQsTUFBTSxFQUFFOzhCQUFTLFlBQVk7b0RBQWdDO0FBRXBEO0lBQVQsTUFBTSxFQUFFOzhCQUFVLFlBQVk7cURBQWdDO0FBSS9EO0lBREMsS0FBSyxFQUFFOzs7aURBR1A7QUFtQkQ7SUFEQyxNQUFNLEVBQUU7OEJBQ1MsWUFBWTs4REFBMEY7QUFHeEg7SUFEQyxNQUFNLEVBQUU7OEJBQ1ksWUFBWTtpRUFBb0M7QUFJckU7SUFEQyxLQUFLLEVBQUU7Ozt5REFHUDtBQWtLRDtJQURDLE1BQU0sRUFBRTs4QkFDYSxZQUFZO2tFQUFnRDtBQUdsRjtJQURDLEtBQUssRUFBRTs7OzBEQU9QO0FBblRVLG9CQUFvQjtJQVJoQyxTQUFTLENBQUM7UUFDVCxRQUFRLEVBQUUsZUFBZTtRQUN6QixndktBQXlDO1FBQ3pDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO1FBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO1FBQy9DLElBQUksRUFBRSxFQUFJO1FBQ1YsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLHNCQUFvQixFQUFFLENBQUM7S0FDcEYsQ0FBQztxQ0F1RnlCLGlCQUFpQixFQUFlLFVBQVUsRUFBZ0IsTUFBTTtHQXRGOUUsb0JBQW9CLENBazVCaEM7U0FsNUJZLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIElucHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkLFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIE5nWm9uZSxcclxuICBRdWVyeUxpc3QsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIFRlbXBsYXRlUmVmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQVhUZXh0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi4vdGV4dGJveC90ZXh0Ym94LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWEJhc2VTaXphYmxlQ29tcG9uZW50LCBBWEJhc2VJbnB1dENvbXBvbmVudCwgQVhFbGVtZW50U2l6ZSwgQVhWYWxpZGF0YWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2Jhc2UvZWxlbWVudC5jbGFzcyc7XHJcbmltcG9ydCB7IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGEtc291cmNlL2RhdGFzb3VyY2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQVhWYWxpZGF0aW9uIH0gZnJvbSAnLi4vdmFsaWRhdGlvbi92YWxpZGF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgfSBmcm9tICcuLi9kYXRhLXNvdXJjZS9yZWFkLXBhcmFtJztcclxuaW1wb3J0IHsgQVhCYXNlRXZlbnQgfSBmcm9tICcuLi9iYXNlL2V2ZW50cy5jbGFzcyc7XHJcbmltcG9ydCB7IEFYU2VhcmNoQm94Q29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoYm94L3NlYXJjaGJveC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBWENvbmZpZyB9IGZyb20gJ0BhY29yZXgvY29yZSc7XHJcbmltcG9ydCB7IGRpZmZlcmVuY2VCeSB9IGZyb20gJ2xvZGFzaCc7XHJcbmV4cG9ydCBjbGFzcyBBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudCBleHRlbmRzIEFYQmFzZUV2ZW50IHtcclxuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQ6IGFueSwgcHVibGljIHNlbGVjdGVkSXRlbXM6IGFueVtdLCBwdWJsaWMgc2VsZWN0ZWRWYWx1ZXM6IGFueVtdIHwgYW55KSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2F4LXNlbGVjdC1ib3gnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3Rib3guY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaG9zdDogeyAgfSxcclxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEFYVmFsaWRhdGFibGVDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBBWFNlbGVjdEJveENvbXBvbmVudCB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQVhTZWxlY3RCb3hDb21wb25lbnQgZXh0ZW5kcyBBWFZhbGlkYXRhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQVhCYXNlU2l6YWJsZUNvbXBvbmVudCwgQVhCYXNlSW5wdXRDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIHNob3dEcm9wRG93bkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoVGVtcGxhdGVSZWYsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcm93SW5wdXRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKEFYVGV4dEJveENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBzcGFuOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZChBWFRleHRCb3hDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgdGV4dGJveDogQVhUZXh0Qm94Q29tcG9uZW50O1xyXG5cclxuICBAVmlld0NoaWxkKCdsaXN0Q29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSlcclxuICBsaXN0Q29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnc2VyY2hCb3gnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBzZXJjaEJveDogQVhTZWFyY2hCb3hDb21wb25lbnQ7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3hTZWxlY3RCb3gnLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIHRleHRCb3hTZWxlY3RCb3g6IEFYVGV4dEJveENvbXBvbmVudDtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NoZWNrQm94OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcnRsOiBib29sZWFuID0gQVhDb25maWcuZ2V0KCdsYXlvdXQucnRsJyk7XHJcblxyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIHNpemU6IEFYRWxlbWVudFNpemUgPSAnbWQnO1xyXG5cclxuICBASW5wdXQoKSBhbGxvd051bGw6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0ZXh0QWxpZ246ICdyaWdodCcgfCAnbGVmdCcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgYnVmZmVyU2l6ZTogbnVtYmVyID0gMjA7XHJcblxyXG4gIEBJbnB1dCgpIHJlbW90ZU9wZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBkcm9wZG93blRvZ2dsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyB0aGlzIGlucHV0IGlzIFByaXZhdGUgYW5kIG9ubHkgdXNlIGluIExPVlxyXG5cclxuICBjdXJyZW50Zm9jdXNlZEluZGV4OiBudW1iZXIgPSAtMTtcclxuICBzaG93TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBza2lwOiBudW1iZXIgPSAtMTtcclxuICBzZWFyY2hUZXh0OiBzdHJpbmcgPSAnJztcclxuICAvLyBASW5wdXQoKVxyXG4gIC8vIGNoaXBzV2lkdGg6IHN0cmluZyA9ICcnO1xyXG5cclxuICB0ZXh0OiBzdHJpbmcgPSAnJztcclxuICB0b3RhbENvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuICBAQ29udGVudENoaWxkKEFYRGF0YVNvdXJjZUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwcml2YXRlIF9jb250ZW50RGF0YVNvdXJjZTogQVhEYXRhU291cmNlQ29tcG9uZW50O1xyXG5cclxuICBwcml2YXRlIF9kYXRhU291cmNlOiBBWERhdGFTb3VyY2VDb21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGdldCBkYXRhU291cmNlKCk6IEFYRGF0YVNvdXJjZUNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSA/IHRoaXMuX2RhdGFTb3VyY2UgOiB0aGlzLl9jb250ZW50RGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZGF0YVNvdXJjZSh2OiBBWERhdGFTb3VyY2VDb21wb25lbnQpIHtcclxuICAgIHRoaXMuX2RhdGFTb3VyY2UgPSB2O1xyXG4gIH1cclxuXHJcbiAgQENvbnRlbnRDaGlsZChBWFZhbGlkYXRpb24sIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgcHJpdmF0ZSBfY29udGVudFZhbGlkYXRpb246IEFYVmFsaWRhdGlvbjtcclxuXHJcbiAgcHJpdmF0ZSBfdmFsaWRhdGlvbjogQVhWYWxpZGF0aW9uO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgdmFsaWRhdGlvbigpOiBBWFZhbGlkYXRpb24ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbGlkYXRpb24gPyB0aGlzLl92YWxpZGF0aW9uIDogdGhpcy5fY29udGVudFZhbGlkYXRpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHZhbGlkYXRpb24odjogQVhWYWxpZGF0aW9uKSB7XHJcbiAgICB0aGlzLl92YWxpZGF0aW9uID0gdjtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSByZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgem9uZTogTmdab25lKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgQFZpZXdDaGlsZCgnZCcsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgZHJvcGRvd246IEFYRHJvcGRvd25Db21wb25lbnQ7XHJcblxyXG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB0ZXh0RmllbGQ6IHN0cmluZyA9ICd0ZXh0JztcclxuICBASW5wdXQoKSB2YWx1ZUZpZWxkOiBzdHJpbmcgPSAndmFsdWUnO1xyXG4gIEBJbnB1dCgpIG1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xyXG4gIGl0ZW1SZW1vdmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAT3V0cHV0KCkgaXRlbXNDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnlbXT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25CbHVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25Gb2N1czogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXM6IGFueVtdID0gW107XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IGl0ZW1zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtcztcclxuICB9XHJcbiAgcHVibGljIHNldCBpdGVtcyh2OiBhbnlbXSkge1xyXG4gICAgdGhpcy5faXRlbXMgPSB2O1xyXG4gICAgaWYgKHRoaXMuaXRlbXNDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pdGVtc0NoYW5nZS5lbWl0KHYpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIubmV4dCh0aGlzLml0ZW1zLmxlbmd0aCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYXNTZWxlY3RlZFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXRlbXNGaWx0ZXJlZDogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvblxyXG5cclxuICBkcm9wRG93bkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBWFNlbGVjdEJveFNlbGVjdGlvbkNoYW5nZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFYU2VsZWN0Qm94U2VsZWN0aW9uQ2hhbmdlZEV2ZW50PigpO1xyXG5cclxuICBAT3V0cHV0KClcclxuICBzZWxlY3RlZEl0ZW1zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcyB8fCBbXTtcclxuICB9XHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1zKHY6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2Uodik7XHJcbiAgICAvLyBpZiAoIXYpIHtcclxuICAgIC8vICAgdiA9IFtdO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGNvbnN0IG9sZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcclxuICAgIC8vIGlmIChKU09OLnN0cmluZ2lmeShvbGQpICE9PSBKU09OLnN0cmluZ2lmeSh2KSkge1xyXG4gICAgLy8gICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XHJcbiAgICAvLyAgIHRoaXMuX3NlbGVjdGVkSXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAvLyAgIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAvLyAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xyXG4gICAgLy8gICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAvLyAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb21lKChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdKSkpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZEl0ZW1zQ2hhbmdlKHY6IGFueVtdLCBvbGQ6IGFueVtdID0gdGhpcy5zZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICBpZiAoIXYpIHtcclxuICAgICAgdiA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnN0IG9sZCA9IHRoaXMuc2VsZWN0ZWRJdGVtcztcclxuICAgIGlmIChKU09OLnN0cmluZ2lmeShvbGQpICE9PSBKU09OLnN0cmluZ2lmeSh2KSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlID09ICdzaW5nbGUnID8gdi5zbGljZSgwLCAxKSA6IFsuLi5uZXcgU2V0KHYpXTsgLy9bLi4ubmV3IFNldCh2WzBdKV0gOiBbLi4ubmV3IFNldCh2KV07XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMuZm9yRWFjaCgoYykgPT4gKGMuc2VsZWN0ZWQgPSB0cnVlKSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVmFsdWVzQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZFZhbHVlcyk7XHJcbiAgICAgIHRoaXMuY2xlYXJWYWxpZGF0aW9uU3R5bGUodGhpcy5yZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgIHRoaXMud2FpdEZvckRhdGEoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLmZvckVhY2goKGMpID0+IChjLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWRJdGVtcy5zb21lKChpKSA9PiBpW3RoaXMudmFsdWVGaWVsZF0gPT0gY1t0aGlzLnZhbHVlRmllbGRdKSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLnJvd1RlbXBsYXRlID09PSB1bmRlZmluZWQgJiYgdGhpcy5yb3dJbnB1dFRlbXBsYXRlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnJvd1RlbXBsYXRlID0gdGhpcy5yb3dJbnB1dFRlbXBsYXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucnRsID09IG51bGwpIHtcclxuICAgICAgdGhpcy5ydGwgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdkaXJlY3Rpb24nKSA9PT0gJ3J0bCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY3JvbGxlZChlKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMucmVtb3RlT3BlcmF0aW9uICYmXHJcbiAgICAgIHRoaXMudG90YWxDb3VudCA+IHRoaXMuaXRlbXMubGVuZ3RoICYmXHJcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAhPSAwICYmXHJcbiAgICAgIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAtIHRoaXMubGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCAtIDMwMCA8IDUwXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMuc2tpcCAhPT0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNraXAgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuICAgICAgICBwYXJhbXMuc2tpcCA9IHRoaXMuaXRlbXMubGVuZ3RoO1xyXG4gICAgICAgIHBhcmFtcy50YWtlID0gdGhpcy5idWZmZXJTaXplOyAvLyogKE1hdGguZmxvb3IodGhpcy5pdGVtcy5sZW5ndGggLyB0aGlzLmJ1ZmZlclNpemUpICsgMSk7XHJcbiAgICAgICAgaWYgKHRoaXMudGV4dGJveCkge1xyXG4gICAgICAgICAgcGFyYW1zLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRJdGVtcyh2OiBhbnlbXSwgaXNVc2VySW5wdXQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XHJcbiAgICBpZiAoaXNVc2VySW5wdXQpIHtcclxuICAgICAgY2hhbmdlZCA9IEpTT04uc3RyaW5naWZ5KHYpICE9PSBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdjtcclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xyXG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlYXJjaENoYW5nZU9ic2VydmVyOiBhbnk7XHJcblxyXG4gIGRlbGF5OiBudW1iZXIgPSA1MDA7XHJcblxyXG4gIHRleHRDaGFuZ2VkKGUpIHtcclxuICAgIGlmICgoZS52YWx1ZSA9PT0gbnVsbCB8fCBlLnZhbHVlID09PSB1bmRlZmluZWQgfHwgZS52YWx1ZSA9PT0gJycpICYmIChlLm9sZFZhbHVlID09PSBudWxsIHx8IGUub2xkVmFsdWUgPT09IHVuZGVmaW5lZCB8fCBlLm9sZFZhbHVlID09PSAnJykpIHtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IC0xO1xyXG4gICAgICBpZiAodGhpcy5yZW1vdGVPcGVyYXRpb24pIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFRleHQgPSB0aGlzLnRleHQ7XHJcbiAgICAgICAgLy8gIHRoaXMuc2VhcmNoVGV4dCA9IGUudmFsdWU7XHJcbiAgICAgICAgLy8gdGhpcy50ZXh0ID0gZS52YWx1ZTtcclxuICAgICAgICAvLyB0aGlzLml0ZW1zID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgIGxldCB0ID0gdGhpcy5pdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5pdGVtcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgLy8gICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9O1xyXG4gICAgICAgIHBhcmFtcy5zZWFyY2hUZXh0ID0gdGhpcy50ZXh0O1xyXG4gICAgICAgIC8vIHBhcmFtcy5zZWFyY2hUZXh0ID0gZS52YWx1ZTtcclxuICAgICAgICBwYXJhbXMuc2tpcCA9IDA7XHJcbiAgICAgICAgcGFyYW1zLnRha2UgPSB0aGlzLmJ1ZmZlclNpemU7XHJcbiAgICAgICAgdGhpcy5mZXRjaChwYXJhbXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkJ1dHRvbkNsaWNrKGUpIHtcclxuICAgIGNvbnNvbGUubG9nKCdvbkJ1dHRvbkNsaWNrJywgZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFNlbGVjdGVkSW5kZXgoc2lnbjogLTEgfCAxIHwgbnVsbCA9IG51bGwpOiB2b2lkIHtcclxuICAgIGlmIChzaWduID09IG51bGwpIHtcclxuICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgIHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCA9IHRoaXMuaXRlbXNcclxuICAgICAgICAgIC5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICAgICAgLmluZGV4T2YodGhpcy5zZWxlY3RlZEl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID0gdGhpcy5pdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzaWduID09PSAtMSA/IHRoaXMuY3VycmVudGZvY3VzZWRJbmRleC0tIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4Kys7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucmVtb3RlT3BlcmF0aW9uKSB7XHJcbiAgICAgIHRoaXMuaXRlbXNGaWx0ZXJlZCA9IHRoaXMuaXRlbXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLnRleHRcclxuICAgICAgICA/IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlcclxuICAgICAgICA6IHRoaXMuaXRlbXM7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID1cclxuICAgICAgdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4IDwgMFxyXG4gICAgICAgID8gMFxyXG4gICAgICAgIDogdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ID49IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGhcclxuICAgICAgICA/IHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggLSAxXHJcbiAgICAgICAgOiB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXg7XHJcbiAgICAvL1xyXG4gICAgLy8gc2V0IHNjcm9sbFxyXG4gICAgaWYgKHRoaXMubGlzdENvbnRhaW5lcikge1xyXG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1EaXYgPSB0aGlzLmxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAubGlzdC1pdGVtOm50aC1jaGlsZCgke3RoaXMuY3VycmVudGZvY3VzZWRJbmRleH0pYCk7XHJcbiAgICAgICAgaWYgKGl0ZW1EaXYpIHtcclxuICAgICAgICAgIGl0ZW1EaXYuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHNlbGVjdGVkVmFsdWVzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55W10gfCBhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXSB8IGFueT4oKTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkVmFsdWVzKCk6IGFueVtdIHwgYW55IHtcclxuICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLm1hcCgoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdKVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLm1hcCgoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdKSB8fCBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRWYWx1ZXModjogYW55W10gfCBhbnkpIHtcclxuICAgIGlmICh0aGlzLmNvbXBhcmVTZWxlY3RlZFZhbHVlcyh2KSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodiA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmICh2ICE9IFtdICYmIHYgIT0gJycgJiYgdiAhPSBudWxsKSB7XHJcbiAgICAgICAgICB0aGlzLmhhc1NlbGVjdGVkVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy53YWl0Rm9yRGF0YSgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYgPT0gY1t0aGlzLnZhbHVlRmllbGRdKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2ID09IGNbdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiB2Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFkZElkID0gW107XHJcbiAgICAgICAgICAgICAgICB2LmZvckVhY2goKHZJZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBhZGRJZC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBbdGhpcy52YWx1ZUZpZWxkXTogdklkXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IG5ld0lkID0gZGlmZmVyZW5jZUJ5KGFkZElkLCB0aGlzLnNlbGVjdGVkSXRlbXMsIHRoaXMudmFsdWVGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdnYgPSBbXTtcclxuICAgICAgICAgICAgICAgIG5ld0lkLmZvckVhY2goKHJjKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHZ2LnB1c2gocmNbdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXNcclxuICAgICAgICAgICAgICAgICAgLmZpbHRlcigoYykgPT4gdnYuaW5jbHVkZXMoY1t0aGlzLnZhbHVlRmllbGRdKSlcclxuICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHJlcykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgLy8gIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiB2di5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXNDaGFuZ2UodGhpcy5zZWxlY3RlZEl0ZW1zLCB2di5sZW5ndGggPiAwID8gWzFdIDogdGhpcy5zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gdi5pbmNsdWRlcyhjW3RoaXMudmFsdWVGaWVsZF0pKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IHYgPT09IGNbdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXNDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkVmFsdWVzKTtcclxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVTZWxlY3RlZFZhbHVlcyhuZXdWYWx1ZTogYW55W10gfCBhbnkpIHtcclxuICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWYWx1ZXM7XHJcbiAgICByZXR1cm4gKGN1cnJlbnRWYWx1ZSA9PSBudWxsICYmIG5ld1ZhbHVlID09IG51bGwpIHx8IEpTT04uc3RyaW5naWZ5KGN1cnJlbnRWYWx1ZSkgPT09IEpTT04uc3RyaW5naWZ5KG5ld1ZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXModjogYW55W10gfCBhbnksIGlzVXNlcklucHV0OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBjaGFuZ2VkID0gaXNVc2VySW5wdXQgPyAhdGhpcy5jb21wYXJlU2VsZWN0ZWRWYWx1ZXModikgOiBmYWxzZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSB2O1xyXG4gICAgaWYgKGlzVXNlcklucHV0ICYmIGNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChuZXcgQVhTZWxlY3RCb3hTZWxlY3Rpb25DaGFuZ2VkRXZlbnQodGhpcywgdGhpcy5zZWxlY3RlZEl0ZW1zLCB0aGlzLnNlbGVjdGVkVmFsdWVzKSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5idWZmZXJTaXplIDwgMTApIHtcclxuICAgICAgdGhpcy5idWZmZXJTaXplID0gMTA7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RlID09ICdzaW5nbGUnKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NoZWNrQm94ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMucmVtb3RlT3BlcmF0aW9uIHx8ICh0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLmhhc1NlbGVjdGVkVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBkcm9wZG93blRvZ2dsZVNlbGVjQm94KGUpIHtcclxuICAgIHRoaXMudGV4dCA9ICcnO1xyXG4gICAgaWYgKHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRyb3Bkb3duVG9nZ2xlLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAvLyBpZiAoIXRoaXMuYWxsb3dTZWFyY2gpIHtcclxuICAgIC8vICAgICBpZiAodGhpcy5yZWFkb25seSA9PSBmYWxzZSkge1xyXG4gICAgLy8gICAgICAgICB0aGlzLml0ZW1SZW1vdmUgPSB0cnVlO1xyXG4gICAgLy8gICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICB0aGlzLmluaXRWYWxpZGF0aW9uKHRoaXMucmVmLCAnc2VsZWN0ZWRJdGVtcycsIHRoaXMudmFsaWRhdGlvbik7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIC8vIGlmICh0aGlzLmFsbG93U2VhcmNoID09IGZhbHNlKSB7XHJcbiAgICAgIC8vICAgdGhpcy5mZXRjaCgpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5vbkRhdGFSZWNlaXZlZC5zdWJzY3JpYmUoKGMpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5kYXRhUmVjZWl2ZWQoYy5kYXRhLnJlc3VsdCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRhdGFSZWNlaXZlZChkYXRhOiBhbnkpIHtcclxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hUZXh0ICYmIHRoaXMuc2VhcmNoVGV4dCAhPSBudWxsICYmIHRoaXMuc2VhcmNoVGV4dCAhPT0gJycpIHtcclxuICAgICAgICBpZiAoZGF0YS50b3RhbENvdW50KSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5pdGVtcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAvL3RoaXMuaXRlbXMgPSBkYXRhLml0ZW1zO1xyXG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gaWYgKHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEudG90YWxDb3VudDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhLml0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5pdGVtc1N0YXR1c09ic2VydmVyKSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBkYXRhLml0ZW1zID09IHVuZGVmaW5lZCA/IDAgOiBkYXRhLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5pdGVtcyAmJiBkYXRhLml0ZW1zLmxlbmd0aCA9PT0gZGF0YS50b3RhbENvdW50KSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcyA9IGRhdGEuaXRlbXM7XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS5pdGVtcy5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS50b3RhbENvdW50KSB7XHJcbiAgICAgICAgZGF0YS5pdGVtcy5mb3JFYWNoKChlbG0pID0+IHtcclxuICAgICAgICAgIHRoaXMuaXRlbXMucHVzaChlbG0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAvLyAgIHRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlci5uZXh0KHRoaXMuaXRlbXMubGVuZ3RoKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy50b3RhbENvdW50ID0gZGF0YS50b3RhbENvdW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGRhdGEuZm9yRWFjaCgoZWxtKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goZWxtKTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIpIHtcclxuICAgICAgICAgIC8vICAgdGhpcy5pdGVtc1N0YXR1c09ic2VydmVyLm5leHQodGhpcy5pdGVtcy5sZW5ndGgpO1xyXG4gICAgICAgICAgLy8gfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMudG90YWxDb3VudCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLml0ZW1zID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIHByaXZhdGUgcGFyYW1zOiBBWERhdGFTb3VyY2VSZWFkUGFyYW1zID0ge307XHJcblxyXG4gIGZldGNoKHBhcmFtczogQVhEYXRhU291cmNlUmVhZFBhcmFtcyA9IHt9KSB7XHJcbiAgICAvLyAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmV0Y2gocGFyYW1zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2goKSB7XHJcbiAgICBjb25zdCBwYXJhbXM6IEFYRGF0YVNvdXJjZVJlYWRQYXJhbXMgPSB7fTtcclxuICAgIGlmICh0aGlzLnJlbW90ZU9wZXJhdGlvbikge1xyXG4gICAgICBwYXJhbXMuc2tpcCA9IDA7XHJcbiAgICAgIHRoaXMuc2tpcCA9IDA7XHJcbiAgICAgIHBhcmFtcy50YWtlID0gdGhpcy5idWZmZXJTaXplO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgLy8gdGhpcy5pdGVtcyA9IFtdO1xyXG4gICAgICAvLyB0aGlzLml0ZW1zLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgLy8gICB0aGlzLml0ZW1zLnBvcCgpO1xyXG4gICAgICAvLyB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IHQgPSB0aGlzLml0ZW1zLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHQ7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5pdGVtcy5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmV0Y2gocGFyYW1zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXMgPSBudWxsO1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkVmFsdWVzKG51bGwsIHRydWUpO1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZEl0ZW1zKTtcclxuICAgICAgLy8gdGhpcy5jbGVhclZhbGlkYXRpb25TdHlsZSh0aGlzLnJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IHRoaXMuc2VsZWN0ZWRJdGVtcy5maWx0ZXIoKGMpID0+IGMgIT09IGl0ZW0pO1xyXG4gICAgICB0aGlzLnNldFNlbGVjdGVkSXRlbXMoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgICAgLy8gdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IHRoaXMuX3NlbGVjdGVkSXRlbXMuZmlsdGVyKGMgPT4gYyAhPT0gaXRlbSk7XHJcbiAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG4gICAgICAvLyB0aGlzLmNsZWFyVmFsaWRhdGlvblN0eWxlKHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy50ZXh0ID0gJyc7XHJcbiAgICB0aGlzLnZhbGlkYXRlKCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIG9uRm9jdXNUZXh0Qm94KGUpIHt9XHJcblxyXG4gIG9uVGV4dEJveENsaWNrKGUpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkID09IGZhbHNlICYmIHRoaXMucmVhZG9ubHkgPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVJdGVtQ2xpY2soZTogTW91c2VFdmVudCwgaXRlbTogYW55KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bdGhpcy52YWx1ZUZpZWxkXTtcclxuXHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnc2luZ2xlJykge1xyXG4gICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWVzID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModmFsdWUsIHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5zZWxlY3RlZFZhbHVlcy5zbGljZSgwKTtcclxuICAgICAgaWYgKGV4aXN0cy5pbmNsdWRlcyh2YWx1ZSkpIHtcclxuICAgICAgICBpZiAodGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fCAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUl0ZW1SZW1vdmVDbGljayhpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXhpc3RzLnB1c2godmFsdWUpO1xyXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRWYWx1ZXMgPSBleGlzdHM7XHJcbiAgICAgICAgdGhpcy5zZXRTZWxlY3RlZFZhbHVlcyhleGlzdHMsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICB0aGlzLnRleHQgPSAnJztcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuICAgIC8vIGlmIChlLnN0b3BQcm9wYWdhdGlvbigpID09IHVuZGVmaW5lZCkge1xyXG4gICAgLy8gICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAvLyB9XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuc2VyY2hCb3gpIHtcclxuICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUtleUV2ZW50U2VhcmNoKGU6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5jbG9zZSgpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgdGhpcy50ZXh0ID0gbnVsbDtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfVxyXG4gICAgaWYgKChlLmtleSA9PT0gJ0Fycm93RG93bicgfHwgZS5rZXkgPT09ICdBcnJvd1VwJykgJiYgdGhpcy5nZXRJdGVtcygpLmxlbmd0aCA+IDAgJiYgZS50eXBlID09PSAna2V5ZG93bicpIHtcclxuICAgICAgaWYgKHRoaXMubW9kZSA9PT0gJ3NpbmdsZScpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggKyAoZS5rZXkgPT09ICdBcnJvd0Rvd24nID8gMSA6IC0xKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUJ5SW5kZXgodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW4oKTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VyY2hCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiAoZS5rZXkgPT0gJ0VudGVyJyAmJiB0aGlzLmRyb3Bkb3duLmlzT3BlbiAmJiB0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgIC8vICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAvLyAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXMoKTtcclxuICAgIC8vICAgICB9LCAwKTtcclxuICAgIC8vIH1cclxuICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIC8vZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zLmZpbHRlcigoYykgPT4gKGNbdGhpcy50ZXh0RmllbGRdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnRleHQudG9Mb3dlckNhc2UoKSkpO1xyXG4gICAgICAgIGlmICh0aGlzLml0ZW1zRmlsdGVyZWQubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXggPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLml0ZW1zRmlsdGVyZWQgPSB0aGlzLml0ZW1zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSB0aGlzLml0ZW1zRmlsdGVyZWRbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVt0aGlzLnZhbHVlRmllbGRdKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgdGhpcy5tb2RlID09ICdtdWx0aXBsZSdcclxuICAgICAgKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dOdWxsID09IHRydWUgfHwgKHRoaXMuYWxsb3dOdWxsID09IGZhbHNlICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAxKSkge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgIChjKSA9PlxyXG4gICAgICAgICAgICAgICAgYyAhPT1cclxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSB0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2VkRXZlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlbGVjdGlvbkNoYW5nZWRFdmVudCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXh0ICYmIHRoaXMuaXRlbXNGaWx0ZXJlZD8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyh0aGlzLml0ZW1zRmlsdGVyZWQsIHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubW9kZSA9PSAnc2luZ2xlJykge1xyXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBpc0NoYXIoc3RyOiBzdHJpbmcpIHtcclxuICAgIGlmIChcclxuICAgICAgc3RyLmluY2x1ZGVzKCdTaGlmdCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnVGFiJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdDb250cm9sJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdBbHQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0NhcHNMb2NrJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdNZXRhJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdDb250ZXh0TWVudScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRW50ZXInKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0JhY2tzcGFjZScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUHJpbnRTY3JlZW4nKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1Njcm9sbExvY2snKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhdXNlJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdIb21lJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFbmQnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0luc2VydCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnUGFnZVVwJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdEZWxldGUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ1BhZ2VEb3duJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdOdW1Mb2NrJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdFc2NhcGUnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Fycm93JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCfZkUYxJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMicpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjMnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y0JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGNScpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjYnKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0Y3JykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGOCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjknKSB8fFxyXG4gICAgICBzdHIuaW5jbHVkZXMoJ0YxMCcpIHx8XHJcbiAgICAgIHN0ci5pbmNsdWRlcygnRjExJykgfHxcclxuICAgICAgc3RyLmluY2x1ZGVzKCdGMTInKVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5RXZlbnQoZTogYW55KSB7XHJcbiAgICAvLyBjb25zdCBOdW1iZXJNaW51c1BhdHRlcm4gPSAvW2EtekEtWjAtOVxcLV0vZztcclxuICAgIC8vIGNvbnN0IEZhcnNpID0gL1vZvtqG2KzYrdiu2YfYudi62YHZgtir2LXYtti02LPbjNio2YTYp9iq2YbZhdqp2q/ZiNim2K/YsNix2LLYt9i42pjYpNil2KPYodmL2YzZjdmO2Y/ZkNmRXFxzXSskLztcclxuICAgIC8vICBjb25zdCBpbnB1dENoYXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGUpO1xyXG4gICAgLy8gY29uc3QgcGF0dGVybkVuID0gL15bYS16QS1aMC05XSokLztcclxuICAgIC8vIGNvbnN0IHBhdHRlcm4gPSAvXltcXHUwNjAwLVxcdTA2RkZcXHNdKyQvO1xyXG4gICAgY29uc3QgaW5wdXRDaGFyID0gZS5rZXk7XHJcbiAgICBpZiAoXHJcbiAgICAgIChpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0JhY2tzcGFjZScgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ1RhYicgJiZcclxuICAgICAgICBpbnB1dENoYXIgIT0gJ0VudGVyJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnRXNjYXBlJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQXJyb3dEb3duJyAmJlxyXG4gICAgICAgIGlucHV0Q2hhciAhPSAnQXJyb3dVcCcpIHx8XHJcbiAgICAgIGUuY29kZSA9PT0gJ1NwYWNlJyB8fFxyXG4gICAgICBlLmN0cmxLZXkgPT0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgZS5rZXkgPT09ICdCYWNrc3BhY2UnICYmXHJcbiAgICAgIGUudHlwZSA9PT0gJ2tleWRvd24nICYmXHJcbiAgICAgICgodGhpcy5hbGxvd051bGwgPT09IHRydWUgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHx8ICh0aGlzLmFsbG93TnVsbCA9PT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wb3AoKTtcclxuICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2UoKTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50ZXh0Qm94U2VsZWN0Qm94LmZvY3VzKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBjb25zdCBJTlBVVCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKTtcclxuICAgIGlmICh0aGlzLmlzQ2hhcihlLmtleSkgJiYgdGhpcy5hbGxvd1NlYXJjaCAmJiBlLmN0cmxLZXkgPT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5kcm9wZG93bi5vcGVuKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlcmNoQm94KSB7XHJcbiAgICAgICAgICB0aGlzLnNlcmNoQm94LmZvY3VzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAwKTtcclxuICAgICAgdGhpcy50ZXh0ID0gZS5rZXk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGUua2V5ID09PSAnRXNjYXBlJykge1xyXG4gICAgICB0aGlzLnRleHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudGV4dEJveFNlbGVjdEJveC5mb2N1cygpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH1cclxuICAgIGlmICgoZS5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGUua2V5ID09PSAnQXJyb3dVcCcpICYmIHRoaXMuZ2V0SXRlbXMoKS5sZW5ndGggPiAwICYmIGUudHlwZSA9PT0gJ2tleWRvd24nKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdzaW5nbGUnKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1CeUluZGV4KHRoaXMuY3VycmVudGZvY3VzZWRJbmRleCArIChlLmtleSA9PT0gJ0Fycm93RG93bicgPyAxIDogLTEpKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5pc09wZW4pIHtcclxuICAgICAgICAgIC8vICB0aGlzLnNldFNlbGVjdGVkSW5kZXgoKGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSkpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KGUua2V5ID09PSAnQXJyb3dEb3duJyA/IDEgOiAtMSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbigpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZXJjaEJveCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXJjaEJveC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dTZWFyY2ggPT09IGZhbHNlKSB7XHJcbiAgICAgIGlmIChlLnR5cGUgPT09ICdrZXlkb3duJyAmJiBlLmtleSA9PSAnRW50ZXInICYmIHRoaXMuZHJvcGRvd24uaXNPcGVuKSB7XHJcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKChjKSA9PiBjW3RoaXMudmFsdWVGaWVsZF0gPT09IHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgIHRoaXMubW9kZSA9PSAnbXVsdGlwbGUnXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5hbGxvd051bGwgPT0gdHJ1ZSB8fCAodGhpcy5hbGxvd051bGwgPT0gZmFsc2UgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDEpKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSB0aGlzLnNlbGVjdGVkSXRlbXMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGMpID0+XHJcbiAgICAgICAgICAgICAgICAgIGMgIT09XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuZmlsdGVyKChjKSA9PiAoY1t0aGlzLnRleHRGaWVsZF0gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudGV4dC50b0xvd2VyQ2FzZSgpKSlbdGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4XVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdICE9PSB0aGlzLml0ZW1zW3RoaXMuY3VycmVudGZvY3VzZWRJbmRleF1bdGhpcy52YWx1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ211bHRpcGxlJykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jdXJyZW50Zm9jdXNlZEluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlbW90ZU9wZXJhdGlvbiAmJiB0aGlzLnRleHQgJiYgdGhpcy50ZXh0ICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXRlbXNGaWx0ZXJlZC5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc0ZpbHRlcmVkWzBdKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5wdXNoKHRoaXMuaXRlbXNGaWx0ZXJlZFt0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5pdGVtc1t0aGlzLmN1cnJlbnRmb2N1c2VkSW5kZXhdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgdGhpcy5lbWl0U2VsZWN0aW9uQ2hhbmdlZEV2ZW50KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRleHQgJiYgdGhpcy5pdGVtc0ZpbHRlcmVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyh0aGlzLml0ZW1zRmlsdGVyZWQsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ3NpbmdsZScpIHtcclxuICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NlKCk7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRCb3hTZWxlY3RCb3guZm9jdXMoKTtcclxuICAgICAgICAgICAgICB9LCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnRleHRib3guZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSXRlbUJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xyXG4gICAgbGV0IGl0ZW0gPSBbXTtcclxuICAgIGlmICghdGhpcy5yZW1vdGVPcGVyYXRpb24gJiYgdGhpcy50ZXh0ICYmIHRoaXMudGV4dCAhPT0gJycpIHtcclxuICAgICAgdGhpcy5pdGVtc0ZpbHRlcmVkID0gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKTtcclxuXHJcbiAgICAgIGl0ZW0gPSB0aGlzLml0ZW1zRmlsdGVyZWRbaW5kZXhdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXRlbSA9IHRoaXMuaXRlbXNbaW5kZXhdO1xyXG4gICAgfVxyXG4gICAgLy9cclxuICAgIC8vICBjb25zdCBpdGVtID0gdGhpcy50ZXh0ID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVtpbmRleF0gOiB0aGlzLml0ZW1zW2luZGV4XTtcclxuICAgIGlmIChpdGVtKSB7XHJcbiAgICAgIHRoaXMuc2V0U2VsZWN0ZWRJdGVtcyhbaXRlbV0sIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0ZWRJbmRleCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXMoKTogYW55W10ge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMgPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICByZXR1cm4gIXRoaXMucmVtb3RlT3BlcmF0aW9uICYmIHRoaXMudGV4dCAmJiB0aGlzLnRleHQgIT09ICcnXHJcbiAgICAgID8gdGhpcy5pdGVtcy5maWx0ZXIoKGMpID0+IChjW3RoaXMudGV4dEZpZWxkXSBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy50ZXh0LnRvTG93ZXJDYXNlKCkpKVxyXG4gICAgICA6IHRoaXMuaXRlbXM7XHJcbiAgfVxyXG5cclxuICBpc0l0ZW1TZWxlY3RlZChpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcigoYykgPT4gY1t0aGlzLnZhbHVlRmllbGRdID09PSBpdGVtW3RoaXMudmFsdWVGaWVsZF0pLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGl0ZW1zU3RhdHVzT2JzZXJ2ZXI6IGFueTtcclxuICBwcml2YXRlIHdhaXRGb3JEYXRhKGNhbGxiYWNrZm46ICgpID0+IHZvaWQpIHtcclxuICAgIGlmICh0aGlzLml0ZW1zICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgIGNhbGxiYWNrZm4oKTtcclxuICAgIH0gZWxzZSBpZiAoIXRoaXMuaXRlbXNTdGF0dXNPYnNlcnZlcikge1xyXG4gICAgICBPYnNlcnZhYmxlLmNyZWF0ZSgob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICB0aGlzLml0ZW1zU3RhdHVzT2JzZXJ2ZXIgPSBvYnNlcnZlcjtcclxuICAgICAgfSlcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSlcclxuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGMpID0+IHtcclxuICAgICAgICAgIGNhbGxiYWNrZm4oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19