@universis/ngx-tables 0.6.7 → 0.6.11

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 (27) hide show
  1. package/bundles/universis-ngx-tables.umd.js +252 -84
  2. package/bundles/universis-ngx-tables.umd.js.map +1 -1
  3. package/bundles/universis-ngx-tables.umd.min.js +1 -1
  4. package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/advanced-select/advanced-select.component.js +2 -2
  6. package/esm2015/lib/components/advanced-table/advanced-table-search.component.js +3 -3
  7. package/esm2015/lib/components/advanced-table/advanced-table.component.js +18 -6
  8. package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +4 -2
  9. package/esm2015/lib/components/advanced-table/advanced-table.formatters.js +195 -58
  10. package/esm2015/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +17 -10
  11. package/esm2015/lib/tables.module.js +1 -3
  12. package/esm5/lib/components/advanced-select/advanced-select.component.js +2 -2
  13. package/esm5/lib/components/advanced-table/advanced-table-search.component.js +3 -3
  14. package/esm5/lib/components/advanced-table/advanced-table.component.js +18 -6
  15. package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +4 -2
  16. package/esm5/lib/components/advanced-table/advanced-table.formatters.js +202 -67
  17. package/esm5/lib/components/advanced-table-modal/advanced-table-modal-base.component.js +12 -5
  18. package/esm5/lib/tables.module.js +1 -3
  19. package/fesm2015/universis-ngx-tables.js +233 -77
  20. package/fesm2015/universis-ngx-tables.js.map +1 -1
  21. package/fesm5/universis-ngx-tables.js +233 -81
  22. package/fesm5/universis-ngx-tables.js.map +1 -1
  23. package/lib/components/advanced-table/advanced-table.formatters.d.ts +15 -0
  24. package/lib/components/advanced-table/advanced-table.formatters.interface.d.ts +3 -1
  25. package/lib/components/advanced-table-modal/advanced-table-modal-base.component.d.ts +5 -1
  26. package/package.json +1 -1
  27. package/universis-ngx-tables.metadata.json +1 -1
@@ -29,7 +29,7 @@ AdvancedSelectComponent.decorators = [
29
29
  { type: Component, args: [{
30
30
  // tslint:disable-next-line: component-selector
31
31
  selector: 'app-advanced-select',
32
- template: "<div class=\"modal-header\" *ngIf=\"modalTitle\">\n <h5 class=\"modal-title\">{{modalTitle | translate}}</h5>\n <button [disabled]=\"cancelButtonDisabled\" (click)=\"cancel()\" type=\"button\" class=\"close\" data-dismiss=\"modal\"\n aria-label=\"Cancel\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div>\n <!-- search -->\n <div class=\"row mt-3\">\n <div class=\"col-12 col-lg-3\">\n <div class=\"input-group mb-3\">\n <input spellcheck=\"false\" type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"searchText\"\n class=\"form-control bg-gray-100 border-0\" placeholder=\"{{'Tables.SearchPlaceholder' | translate}}\"\n aria-label=\"Search\" aria-describedby=\"basic-addon2\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-default bg-gray-100 border-0\" type=\"button\">\n <i class=\"fa fa-search text-secondary\"></i>\n </button>\n </div>\n </div>\n </div>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n\n </div>\n </div>\n <div class=\"col-12 col-lg-5\">\n <div class=\"btn-toolbar\">\n <button class=\"btn btn-gray-100\">\n <i class=\"fa fa-sliders-h pr-2 text-secondary\" aria-hidden=\"true\"></i>{{'Tables.Filters' | translate}}\n </button>\n <div class=\"dropdown ml-3\" dropdown>\n <button dropdownToggle class=\"btn btn-gray-100 dropdown-toggle\" type=\"button\" id=\"dropdownDefaultFilters\"\n data-toggle=\"dropdown\">\n {{ this.defaultFilter.name | translate }}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownDefaultFilters\" *dropdownMenu>\n <a class=\"dropdown-item\" *ngFor=\"let filter of defaultFilters\"\n (click)=\"advancedSearch(filter.filter ? filter : '')\">\n {{ filter.name | translate }}\n </a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col text-lg-right mt-3 mt-lg-0\">\n <button [disabled]=\"true\" class=\"btn rounded-pill btn-outline-theme\">\n <span class=\"pr-2 font-lg\">+</span><span [translate]=\"'Tables.AddItem'\"></span>\n </button>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\" [ngClass]=\"{ 'component-loading': loading}\">\n <app-advanced-table #advancedTable (init)=\"onTableInit($event)\" (load)=\"onDataLoad($event)\"\n [autoLoad]=\"true\"\n [selectable]=\"true\" [multipleSelect]=\"true\" [scrollX]=\"false\" [scrollY]=\"320\" [pageLength]=\"pageLength\"\n [scrollable]=\"false\" [showFooter]=\"false\" [showActions]=\"false\" [lengthMenu]=\"lengthMenu\"\n [config]=\"tableConfig\" [configSrc]=\"tableConfigSrc\"></app-advanced-table>\n </div>\n </div>\n <div class=\"row mt-3 table-custom-pager\">\n <div class=\"col-12 d-flex\" *ngIf=\"recordsTotal\">\n <div class=\"mt-2 ml-auto mr-3 text-secondary\" [translate]=\"'Tables.RecordsPerPage'\"></div>\n <div class=\"dropdown mr-3\" dropdown>\n <button dropdownToggle class=\"btn btn-gray-100 dropdown-toggle\" type=\"button\" id=\"dropdownPageSize\"\n data-toggle=\"dropdown\">\n {{pageLength}}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownPageSize\" *dropdownMenu>\n <button (click)=\"setLength(item)\" class=\"dropdown-item dropdown-item-theme\" type=\"button\"\n *ngFor=\"let item of lengthMenu\">{{item}}</button>\n </div>\n </div>\n <div class=\"mt-2 mr-2\" [translate]=\"'Tables.PageInfo'\" [translateParams]=\"pageInfo\"></div>\n <button [disabled]=\"pageInfo && pageInfo.page === 0\" class=\"btn text-nowrap\" (click)=\"firstPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===0\" class=\"btn\" (click)=\"previousPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn\" (click)=\"nextPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn text-nowrap\"\n (click)=\"lastPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer justify-content-end\">\n <button [disabled]=\"okButtonDisabled\" (click)=\"ok()\" type=\"button\" [ngClass]=\"okButtonClass\">\n {{okButtonText | translate}}\n </button>\n <button [disabled]=\"cancelButtonDisabled\" (click)=\"cancel()\" type=\"button\" [ngClass]=\"cancelButtonClass\"\n data-dismiss=\"modal\">\n {{ cancelButtonText | translate}}\n </button>\n</div>\n",
32
+ template: "<div class=\"modal-header\" *ngIf=\"modalTitle\">\n <h5 class=\"modal-title\">{{modalTitle | translate}}</h5>\n <button [disabled]=\"cancelButtonDisabled\" (click)=\"cancel()\" type=\"button\" class=\"close\" data-dismiss=\"modal\"\n aria-label=\"Cancel\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n</div>\n<div class=\"modal-body\">\n <div>\n <!-- search -->\n <div class=\"row mt-3\">\n <div class=\"col-12 col-lg-3\">\n <div class=\"input-group mb-3\">\n <input spellcheck=\"false\" type=\"text\" (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"searchText\"\n class=\"form-control bg-gray-100 border-0\" placeholder=\"{{'Tables.SearchPlaceholder' | translate}}\"\n aria-label=\"Search\" aria-describedby=\"basic-addon2\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-default bg-gray-100 border-0\" type=\"button\">\n <i class=\"fa fa-search text-secondary\"></i>\n </button>\n </div>\n </div>\n </div>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n\n </div>\n </div>\n <div class=\"col-12 col-lg-5\">\n <div class=\"btn-toolbar\">\n <button class=\"btn btn-gray-100\">\n <i class=\"fa fa-sliders-h pr-2 text-secondary\" aria-hidden=\"true\"></i>{{'Tables.Filters' | translate}}\n </button>\n <div class=\"dropdown ml-3\">\n <button dropdownToggle class=\"btn btn-gray-100 dropdown-toggle\" type=\"button\" id=\"dropdownDefaultFilters\"\n data-toggle=\"dropdown\">\n {{ this.defaultFilter.name | translate }}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownDefaultFilters\">\n <a class=\"dropdown-item\" *ngFor=\"let filter of defaultFilters\"\n (click)=\"advancedSearch(filter.filter ? filter : '')\">\n {{ filter.name | translate }}\n </a>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col text-lg-right mt-3 mt-lg-0\">\n <button [disabled]=\"true\" class=\"btn rounded-pill btn-outline-theme\">\n <span class=\"pr-2 font-lg\">+</span><span [translate]=\"'Tables.AddItem'\"></span>\n </button>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\" [ngClass]=\"{ 'component-loading': loading}\">\n <app-advanced-table #advancedTable (init)=\"onTableInit($event)\" (load)=\"onDataLoad($event)\"\n [autoLoad]=\"true\"\n [selectable]=\"true\" [multipleSelect]=\"true\" [scrollX]=\"false\" [scrollY]=\"320\" [pageLength]=\"pageLength\"\n [scrollable]=\"false\" [showFooter]=\"false\" [showActions]=\"false\" [lengthMenu]=\"lengthMenu\"\n [config]=\"tableConfig\" [configSrc]=\"tableConfigSrc\"></app-advanced-table>\n </div>\n </div>\n <div class=\"row mt-3 table-custom-pager\">\n <div class=\"col-12 d-flex\" *ngIf=\"recordsTotal\">\n <div class=\"mt-2 ml-auto mr-3 text-secondary\" [translate]=\"'Tables.RecordsPerPage'\"></div>\n <div class=\"dropdown mr-3\">\n <button dropdownToggle class=\"btn btn-gray-100 dropdown-toggle\" type=\"button\" id=\"dropdownPageSize\"\n data-toggle=\"dropdown\">\n {{pageLength}}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownPageSize\">\n <button (click)=\"setLength(item)\" class=\"dropdown-item dropdown-item-theme\" type=\"button\"\n *ngFor=\"let item of lengthMenu\">{{item}}</button>\n </div>\n </div>\n <div class=\"mt-2 mr-2\" [translate]=\"'Tables.PageInfo'\" [translateParams]=\"pageInfo\"></div>\n <button [disabled]=\"pageInfo && pageInfo.page === 0\" class=\"btn text-nowrap\" (click)=\"firstPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===0\" class=\"btn\" (click)=\"previousPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn\" (click)=\"nextPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn text-nowrap\"\n (click)=\"lastPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n </div>\n </div>\n </div>\n</div>\n<div class=\"modal-footer justify-content-end\">\n <button [disabled]=\"okButtonDisabled\" (click)=\"ok()\" type=\"button\" [ngClass]=\"okButtonClass\">\n {{okButtonText | translate}}\n </button>\n <button [disabled]=\"cancelButtonDisabled\" (click)=\"cancel()\" type=\"button\" [ngClass]=\"cancelButtonClass\"\n data-dismiss=\"modal\">\n {{ cancelButtonText | translate}}\n </button>\n</div>\n",
33
33
  encapsulation: ViewEncapsulation.None,
34
34
  styles: [`
35
35
  .modal-table .dataTables_wrapper {
@@ -49,4 +49,4 @@ AdvancedSelectComponent.ctorParameters = () => [
49
49
  { type: BsModalRef }
50
50
  ];
51
51
 
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM5RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQjNDLE1BQU0sOEJBQStCLFNBQVEsK0JBQStCO0lBSTFFLFlBQVksTUFBYyxFQUNkLGNBQThCLEVBQzlCLE9BQTJCLEVBQzNCLDJCQUF3RCxFQUN4RCxRQUFrQixFQUNWLFNBQXFCO1FBQ3ZDLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUQ1RCxjQUFTLEdBQVQsU0FBUyxDQUFZO1FBUGxDLFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQVN2RCxDQUFDO0lBRVksRUFBRTs7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7S0FBQTtJQUVZLE1BQU07O1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsQ0FBQztLQUFBOzs7WUFuQ0YsU0FBUyxTQUFDO2dCQUNULCtDQUErQztnQkFDL0MsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0Isc3BMQUErQztnQkFTL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7eUJBUG5DOzs7OztLQUtDO2FBR0o7Ozs7WUFwQndCLE1BQU07WUFBdEIsY0FBYztZQUVkLGtCQUFrQjtZQURsQiwyQkFBMkI7WUFJM0IsUUFBUTtZQURSLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAubW9kYWwtdGFibGUgLmRhdGFUYWJsZXNfd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDUwdmg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICBgLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQge1xuXG4gIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBjb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsUmVmOiBCc01vZGFsUmVmKSB7XG4gICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSwgY29udGV4dCwgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLCBkYXRlUGlwZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb2soKSB7XG4gICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdvaycpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG5cbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM5RyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFnQjNDLE1BQU0sOEJBQStCLFNBQVEsK0JBQStCO0lBSTFFLFlBQVksTUFBYyxFQUNkLGNBQThCLEVBQzlCLE9BQTJCLEVBQzNCLDJCQUF3RCxFQUN4RCxRQUFrQixFQUNWLFNBQXFCO1FBQ3ZDLEtBQUssQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUQ1RCxjQUFTLEdBQVQsU0FBUyxDQUFZO1FBUGxDLFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQVN2RCxDQUFDO0lBRVksRUFBRTs7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLENBQUM7S0FBQTtJQUVZLE1BQU07O1lBQ2pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUIsQ0FBQztLQUFBOzs7WUFuQ0YsU0FBUyxTQUFDO2dCQUNULCtDQUErQztnQkFDL0MsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0Isd21MQUErQztnQkFTL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7eUJBUG5DOzs7OztLQUtDO2FBR0o7Ozs7WUFwQndCLE1BQU07WUFBdEIsY0FBYztZQUVkLGtCQUFrQjtZQURsQiwyQkFBMkI7WUFJM0IsUUFBUTtZQURSLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAubW9kYWwtdGFibGUgLmRhdGFUYWJsZXNfd3JhcHBlciB7XG4gICAgICBoZWlnaHQ6IDUwdmg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIH1cbiAgICBgLFxuICBdLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQge1xuXG4gIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBjb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsUmVmOiBCc01vZGFsUmVmKSB7XG4gICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSwgY29udGV4dCwgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLCBkYXRlUGlwZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb2soKSB7XG4gICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdvaycpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG5cbn1cbiJdfQ==
@@ -27,7 +27,7 @@ export class AdvancedTableSearchComponent extends AdvancedTableSearchBaseCompone
27
27
  this.collapsed = true;
28
28
  this.allowSave = true;
29
29
  this.showMore = true;
30
- this.mergeQueryParams = true;
30
+ this.mergeQueryParams = false;
31
31
  this.viewChange = new EventEmitter();
32
32
  this.userSearchList = [];
33
33
  this.selectedList = null;
@@ -490,7 +490,7 @@ AdvancedTableSearchComponent.decorators = [
490
490
  { type: Component, args: [{
491
491
  // tslint:disable-next-line: component-selector
492
492
  selector: 'app-advanced-table-search',
493
- template: "<div class=\"s--list-navbar d-none d-sm-block\">\n\n <div id=\"collapse-header\" [ngClass]=\"{'show':collapsed}\" class=\"collapse multi-collapse\">\n <form class=\"form-inline p-3 col\">\n <div class=\"form-group col-7\" [ngClass]= \"{ 'col-12': !showMore }\">\n <label class=\"pr-3\" for=\"searchText\" [translate]=\"'Tables.Search'\"></label>\n <input (keydown)=\"onSearchKeyDown($event)\" spellcheck=\"false\" type=\"text\" id=\"searchText\" name=\"searchText\"\n class=\"form-control col text-left\" placeholder=\"{{ 'Tables.SearchPlaceholder' | translate }}\" #searchText>\n </div>\n <div *ngIf=\"showMore\" class=\"col-5 text-right text-secondary\" id=\"heading3\">\n <button class=\"d-inline-block btn btn-link collapsed float-right text-secondary text-decoration-none\"\n type=\"button\" (click)=\"toggleView();\">\n <span class=\"d-none d-sm-inline\" [translate]=\"'AdvancedSearch.More'\"></span>\n <i class=\"ml-2 pt-1 fa fa-chevron-down\"></i>\n </button>\n </div>\n </form>\n </div>\n\n <div id=\"collapse3\" [ngClass]=\"{'show':!collapsed}\" class=\"collapse multi-collapse\" aria-labelledby=\"heading3\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <div id=\"advanced-form\">\n <ng-content select=\"advanced-search\"></ng-content>\n <hr class=\"mt-0 mb-0\" width=\"97%\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <div class=\"form-inline pb-3 pt-3 pr-1 pl-1 col\">\n\n <div class=\"form-group col-4\">\n <div class=\"d-flex flex-row w-100\" *ngIf=\"allowSave\">\n <label class=\"pr-3 d-none\" [translate]=\"'AdvancedSearch.SavedSearches'\"></label>\n <select *ngIf=\"userSearchList\" class=\"custom-select text-secondary flex col-12\" (change)=\"onSelectUserSearch($event)\" [(ngModel)]=\"selectedList\">\n <option [ngValue]=\"null\" [translate]=\"'AdvancedSearch.Choose'\"></option>\n <option *ngFor=\"let item of userSearchList\" [ngValue]=\"item\">{{ item.name }}</option>\n </select>\n <select *ngIf=\"!userSearchList\" class=\"custom-select flex col-6\">\n <option [value]=\"null\" [translate]=\"'AdvancedSearch.Choose'\"></option>\n </select>\n </div>\n </div>\n\n <div class=\"col-3 d-flex flex-row w-100\">\n <div class=\"btn-group\" *ngIf=\"allowSave\" dropdown>\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"saveSearch(templateToUse, ( (selectedList && selectedList.readOnly) ? true : false ) )\" [translate]=\"'AdvancedSearch.SaveCurrentSearch'\"></button>\n <button type=\"button\" dropdownToggle class=\"btn btn-sm btn-primary dropdown-toggle dropdown-toggle-split\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span class=\"sr-only\" [translate]=\"'AdvancedSearch.ToggleDropdown'\"></span>\n </button>\n\n <div class=\"dropdown-menu\" *dropdownMenu>\n <a [ngClass]=\"{'disabled': selectedList && selectedList.readOnly}\" class=\"dropdown-item\" (click)=\"saveSearch(templateToUse, false)\" [translate]=\"'AdvancedSearch.Save'\" href=\"javascript:void(0)\"></a>\n <a class=\"dropdown-item\" (click)=\"saveSearch(templateToUse)\" [translate]=\"'AdvancedSearch.SaveAs'\" href=\"javascript:void(0)\"></a>\n <div class=\"dropdown-divider\"></div>\n <a [ngClass]=\"{'disabled': selectedList && selectedList.readOnly}\" class=\"dropdown-item\" (click)=\"deleteItemFromSavedSearchListByObject(selectedList)\" [translate]=\"'AdvancedSearch.Delete'\" href=\"javascript:void(0)\"></a>\n </div>\n </div>\n </div>\n\n <div class=\"col-5 text-right text-secondary\">\n <button type=\"button\" class=\"btn btn-light text-secondary pl-2 pr-2 mr-2\" (click)=\"clear()\">\n <i class=\"fa fa-eraser\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-success pl-4 pr-4 mr-2\" (click)=\"advancedSearch($event);\"\n [translate]=\"'Tables.Search'\"></button>\n <button class=\"d-inline-block btn btn-link collapsed float-right text-secondary text-decoration-none\"\n type=\"button\" (click)=\"toggleView();\">\n <span class=\"d-none d-sm-inline\" [translate]=\"'AdvancedSearch.Less'\"></span>\n <i class=\"ml-2 pt-1 fa fa-chevron-up\"></i>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #templateToUse>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\" [translate]=\"'AdvancedSearch.Modal.Title'\"></h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body mt-0 mb-0 text-center\">\n <div>\n <p class=\"text-secondary text-left\" [translate]=\"'AdvancedSearch.Modal.Help'\"></p>\n </div>\n <form class=\"p-3 text-center\" #newListForm=\"ngForm\" >\n <div [ngVar]=\"{ name: ( selectedList?.name ? ( selectedList?.name + ' (1)' ) : null ) }\" #model=\"ngVar\">\n <input [(ngModel)]=\"model.value.name\" [required]=\"true\" id=\"newListName\" name=\"newListName\" type=\"text\" class=\"form-control\" placeholder=\"{{ 'AdvancedSearch.Modal.SaveNamePlaceholder' | translate }}\"/>\n <div class=\"btn-group mt-4\">\n <button [disabled]=\"newListForm.invalid\" type=\"button\" class=\"btn btn-primary\" (click)=\"confirmModal(model.value.name)\" [translate]=\"'AdvancedSearch.Modal.Accept'\"></button>\n <button type=\"button\" class=\"btn btn-gray-300 text-white\" (click)=\"closeModal()\" [translate]=\"'AdvancedSearch.Modal.Close'\"></button>\n </div>\n </div>\n </form>\n </div>\n </ng-template>\n\n</div>\n",
493
+ template: "<div class=\"s--list-navbar d-none d-sm-block\">\n\n <div id=\"collapse-header\" [ngClass]=\"{'show':collapsed}\" class=\"collapse multi-collapse\">\n <form class=\"form-inline p-3 col\">\n <div class=\"form-group col-7\" [ngClass]= \"{ 'col-12': !showMore }\">\n <label class=\"pr-3\" for=\"searchText\" [translate]=\"'Tables.Search'\"></label>\n <input (keydown)=\"onSearchKeyDown($event)\" spellcheck=\"false\" type=\"text\" id=\"searchText\" name=\"searchText\"\n class=\"form-control col text-left\" placeholder=\"{{ 'Tables.SearchPlaceholder' | translate }}\" #searchText>\n </div>\n <div *ngIf=\"showMore\" class=\"col-5 text-right text-secondary\" id=\"heading3\">\n <button class=\"d-inline-block btn btn-link collapsed float-right text-secondary text-decoration-none\"\n type=\"button\" (click)=\"toggleView();\">\n <span class=\"d-none d-sm-inline\" [translate]=\"'AdvancedSearch.More'\"></span>\n <i class=\"ml-2 pt-1 fa fa-chevron-down\"></i>\n </button>\n </div>\n </form>\n </div>\n\n <div id=\"collapse3\" [ngClass]=\"{'show':!collapsed}\" class=\"collapse multi-collapse\" aria-labelledby=\"heading3\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <div id=\"advanced-form\">\n <ng-content select=\"advanced-search\"></ng-content>\n <hr class=\"mt-0 mb-0\" width=\"97%\">\n <div class=\"row\">\n <div class=\"col-sm-12\">\n <div class=\"form-inline pb-3 pt-3 pr-1 pl-1 col\">\n\n <div class=\"form-group col-4\">\n <div class=\"d-flex flex-row w-100\" *ngIf=\"allowSave\">\n <label class=\"pr-3 d-none\" [translate]=\"'AdvancedSearch.SavedSearches'\"></label>\n <select *ngIf=\"userSearchList\" class=\"custom-select text-secondary flex col-12\" (change)=\"onSelectUserSearch($event)\" [(ngModel)]=\"selectedList\">\n <option [ngValue]=\"null\" [translate]=\"'AdvancedSearch.Choose'\"></option>\n <option *ngFor=\"let item of userSearchList\" [ngValue]=\"item\">{{ item.name }}</option>\n </select>\n <select *ngIf=\"!userSearchList\" class=\"custom-select flex col-6\">\n <option [value]=\"null\" [translate]=\"'AdvancedSearch.Choose'\"></option>\n </select>\n </div>\n </div>\n\n <div class=\"col-3 d-flex flex-row w-100\">\n <div class=\"btn-group\" *ngIf=\"allowSave\">\n <button type=\"button\" class=\"btn btn-sm btn-primary\" (click)=\"saveSearch(templateToUse, ( (selectedList && selectedList.readOnly) ? true : false ) )\" [translate]=\"'AdvancedSearch.SaveCurrentSearch'\"></button>\n <button type=\"button\" dropdownToggle class=\"btn btn-sm btn-primary dropdown-toggle dropdown-toggle-split\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span class=\"sr-only\" [translate]=\"'AdvancedSearch.ToggleDropdown'\"></span>\n </button>\n\n <div class=\"dropdown-menu\">\n <a [ngClass]=\"{'disabled': selectedList && selectedList.readOnly}\" class=\"dropdown-item\" (click)=\"saveSearch(templateToUse, false)\" [translate]=\"'AdvancedSearch.Save'\" href=\"javascript:void(0)\"></a>\n <a class=\"dropdown-item\" (click)=\"saveSearch(templateToUse)\" [translate]=\"'AdvancedSearch.SaveAs'\" href=\"javascript:void(0)\"></a>\n <div class=\"dropdown-divider\"></div>\n <a [ngClass]=\"{'disabled': selectedList && selectedList.readOnly}\" class=\"dropdown-item\" (click)=\"deleteItemFromSavedSearchListByObject(selectedList)\" [translate]=\"'AdvancedSearch.Delete'\" href=\"javascript:void(0)\"></a>\n </div>\n </div>\n </div>\n\n <div class=\"col-5 text-right text-secondary\">\n <button type=\"button\" class=\"btn btn-light text-secondary pl-2 pr-2 mr-2\" (click)=\"clear()\">\n <i class=\"fa fa-eraser\"></i>\n </button>\n <button type=\"button\" class=\"btn btn-success pl-4 pr-4 mr-2\" (click)=\"advancedSearch($event);\"\n [translate]=\"'Tables.Search'\"></button>\n <button class=\"d-inline-block btn btn-link collapsed float-right text-secondary text-decoration-none\"\n type=\"button\" (click)=\"toggleView();\">\n <span class=\"d-none d-sm-inline\" [translate]=\"'AdvancedSearch.Less'\"></span>\n <i class=\"ml-2 pt-1 fa fa-chevron-up\"></i>\n </button>\n </div>\n\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <ng-template #templateToUse>\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\" [translate]=\"'AdvancedSearch.Modal.Title'\"></h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"modalRef.hide()\">\n <span aria-hidden=\"true\">&times;</span>\n </button>\n </div>\n <div class=\"modal-body mt-0 mb-0 text-center\">\n <div>\n <p class=\"text-secondary text-left\" [translate]=\"'AdvancedSearch.Modal.Help'\"></p>\n </div>\n <form class=\"p-3 text-center\" #newListForm=\"ngForm\" >\n <div [ngVar]=\"{ name: ( selectedList?.name ? ( selectedList?.name + ' (1)' ) : null ) }\" #model=\"ngVar\">\n <input [(ngModel)]=\"model.value.name\" [required]=\"true\" id=\"newListName\" name=\"newListName\" type=\"text\" class=\"form-control\" placeholder=\"{{ 'AdvancedSearch.Modal.SaveNamePlaceholder' | translate }}\"/>\n <div class=\"btn-group mt-4\">\n <button [disabled]=\"newListForm.invalid\" type=\"button\" class=\"btn btn-primary\" (click)=\"confirmModal(model.value.name)\" [translate]=\"'AdvancedSearch.Modal.Accept'\"></button>\n <button type=\"button\" class=\"btn btn-gray-300 text-white\" (click)=\"closeModal()\" [translate]=\"'AdvancedSearch.Modal.Close'\"></button>\n </div>\n </div>\n </form>\n </div>\n </ng-template>\n\n</div>\n",
494
494
  encapsulation: ViewEncapsulation.None
495
495
  }] }
496
496
  ];
@@ -517,4 +517,4 @@ AdvancedTableSearchComponent.propDecorators = {
517
517
  viewChange: [{ type: Output, args: ['viewChange',] }]
518
518
  };
519
519
 
520
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQ2pELGlCQUFpQixFQUFFLFlBQVksRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWE1QyxNQUFNLG1DQUFvQyxTQUFRLGdDQUFnQztJQTZCaEYsWUFBdUIsUUFBNEIsRUFDNUIsZUFBK0IsRUFDL0IsUUFBa0IsRUFDcEIsYUFBNkIsRUFD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QUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU87WUFDTCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ1UsVUFBVTs7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDakMsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQUE7OztZQXJmRixTQUFTLFNBQUM7Z0JBQ1QsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyxnME1BQXFEO2dCQUNyRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7OztZQXBCUSxrQkFBa0I7WUFEbEIsY0FBYztZQUVkLFFBQVE7WUFFUixjQUFjO1lBRGQsa0JBQWtCO1lBRWxCLGdCQUFnQjtZQUNqQiwyQkFBMkI7WUFFM0IsWUFBWTtZQVJLLE1BQU07WUFHRixZQUFZOzs7b0JBd0J0QyxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLOytCQUNMLEtBQUs7eUJBQ0wsU0FBUyxTQUFDLFlBQVk7eUJBQ3RCLE1BQU0sU0FBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlclN0b3JhZ2VTZXJ2aWNlLCBNb2RhbFNlcnZpY2UsIERJQUxPR19CVVRUT05TIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZXh0VXRpbHMgfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gIGFkdmFuY2VkVmlldzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95ICB7XG5cbiAgcHJpdmF0ZSBxdWVyeVBhcmFtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xsYXBzZWQgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYWxsb3dTYXZlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHNob3dNb3JlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIG1lcmdlUXVlcnlQYXJhbXMgPSB0cnVlO1xuICBAVmlld0NoaWxkKCdzZWFyY2hUZXh0JykgcHVibGljIHNlYXJjaFRleHQ6IGFueTtcbiAgQE91dHB1dCgndmlld0NoYW5nZScpIHB1YmxpYyB2aWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPigpO1xuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB0ZXh0KCkge1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbW9kYWxSZWY6IEJzTW9kYWxSZWY7XG4gIHB1YmxpYyBzdG9yYWdlS2V5OiBhbnk7XG4gIHB1YmxpYyBzdG9yYWdlVmFsdWU6IGFueTtcbiAgcHVibGljIHVzZXJTZWFyY2hMaXN0OiBhbnkgPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkTGlzdDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvciggcHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgIHByb3RlY3RlZCBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdXNlclN0b3JhZ2U6IFVzZXJTdG9yYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkU2VhcmNoVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMudGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICBpZiAoY29uZmlnID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gbG9hZCB1c2VyIHNlYXJjaGVzXG4gICAgICAgIHRoaXMubG9hZFVzZXJTZWFyY2hMaXN0KCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgLy8gaWYgc2VhcmNoIGNvbXBvbmVudCBtZXJnZXMgcXVlcnkgcGFyYW1zXG4gICAgICAgICAgLy8gKHVzZXMgcXVlcnlQYXJhbXMgdG8gYXBwbHkgZmlsdGVyKVxuICAgICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocXVlcnlQYXJhbXMpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIHF1ZXJ5IGdpdmVuIGJ5IHRoZSBxdWVyeVBhcmFtcyBvZiB0aGUgYWN0aXZhdGVkIHJvdXRlXG4gICAqIEBwYXJhbSBxdWVyeVBhcmFtc1xuICAgKi9cbiAgcHJpdmF0ZSBhcHBseVF1ZXJ5UGFyYW1zKHF1ZXJ5UGFyYW1zOiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdxJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgIC8vIHNlYXJjaCB0ZXh0XG4gICAgICB0aGlzLnRleHQgPSBxdWVyeVBhcmFtcy5xO1xuICAgICAgcmV0dXJuIHRoaXMudGFibGUuc2VhcmNoKHRoaXMudGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dCA9ICcnO1xuICAgIH1cblxuICAgIGxldCBmaWx0ZXJQYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBxdWVyeVBhcmFtcyk7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCAncycpKSB7XG4gICAgICAvLyBzZXQgY29sbGFwc2VkXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgLy8gZmluZCB1c2VyIHNlYXJjaCBieSBuYW1lXG4gICAgICBpZiAodGhpcy51c2VyU2VhcmNoTGlzdCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IHF1ZXJ5UGFyYW1zLnM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QpIHtcbiAgICAgICAgICBmaWx0ZXJQYXJhbXMgPSB0aGlzLnNlbGVjdGVkTGlzdC5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGZpbHRlclBhcmFtcykuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgIC8vIHNlYXJjaCBjcml0ZXJpYVxuICAgICAgaWYgKHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZmlsdGVyUGFyYW1zW2tleV07XG4gICAgICBpZiAoVGV4dFV0aWxzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQoZmlsdGVyUGFyYW1zW2tleV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIC8vIHNldCB2YWx1ZVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbHRlcltrZXldICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGNhbGwgZmlsdGVyQ2hhbmdlIGV2ZW50IHRvIGFwcGx5IGNoYW5nZSB0byBhZHZhbmNlZCBzZWFyY2ggY2hpbGRyZW5cbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAvLyBhcHBseSBxdWVyeVxuICAgIHRoaXMuZ2V0UXVlcnkoKS50aGVuKChxdWVyeSkgPT4ge1xuICAgICAgLy8gaWYgdGFibGUgcXVlcnkgaXMgbnVsbFxuICAgICAgaWYgKHRoaXMudGFibGUucXVlcnkgPT0gbnVsbCkge1xuICAgICAgICAvLyBzZXQgcXVlcnlcbiAgICAgICAgdGhpcy50YWJsZS5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHtcbiAgICAgICAgICBjb25zdCBwYXJhbXMgPSBxdWVyeS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugc2V0IGZpbHRlciBwYXJhbXNcbiAgICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcGFyYW1zLiRmaWx0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYW5kIGZpbmFsbHkgZmV0Y2ggZGF0YVxuICAgICAgdGhpcy50YWJsZS5mZXRjaCh0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcblxuICB9XG5cbiAgcHVibGljIG9uU2VhcmNoS2V5RG93bihldmVudDogYW55KSB7XG4gICAgaWYgKHRoaXMudGFibGUgJiYgZXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIC8vIGdldCBzZWFyY2ggdGV4dFxuICAgICAgY29uc3Qgc2VhcmNoVGV4dCA9ICggZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgLy8gbWVyZ2UgcXVlcnkgcGFyYW1zID9cbiAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7XG4gICAgICAgICAgcTogc2VhcmNoVGV4dCxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMudGFibGUuY29uZmlnICYmIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSB7XG4gICAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHJ5IHRvIGFwcGx5IGZpbHRlciBieSBhcHBlbmRpbmcgcXVlcnkgcGFyYW1zXG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIG90aGVyd2lzZSBkbyBzZWFyY2hcbiAgICAgIHRoaXMudGFibGUuc2VhcmNoKHNlYXJjaFRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0cmFuc2Zvcm1EYXRlKGRhdGUpIHtcbiAgICBkYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ01NL2RkL3l5eXknKTsgLy8gd2hhdGV2ZXIgZm9ybWF0IHlvdSBuZWVkLlxuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgcHVibGljIGNvbnZlcnRUb1N0cmluZyhuYW1lRmlsdGVyKSB7XG4gICAgbGV0IG5hbWUgPSAnJztcbiAgICBpZiAobmFtZUZpbHRlciAhPSBudWxsKSB7XG4gICAgICBuYW1lID0gbmFtZUZpbHRlci50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbiAgfVxuXG4vLyAgTG9hZCBzYXZlZCBjcml0ZXJpYSBzZWFyY2hlcyB1c2VyIGhhcyBzdG9yZWQgYmVmb3JlXG4gIHByaXZhdGUgbG9hZFVzZXJTZWFyY2hMaXN0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc3RvcmFnZUtleSA9ICd0YWJsZXMvJyArIHRoaXMudGFibGUuY29uZmlnLm1vZGVsICsgJy9zZWFyY2hlcyc7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZGF0YS52YWx1ZSB8fCBbXTtcbiAgICAgIC8vIGlmIHRhYmxlIGNvbmZpZ3VyYXRpb24gaGFzIHByZS1kZWZpbmVkIHNlYXJjaGVzXG4gICAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gYWRkIHByZS1kZWZpbmVkIGxpc3RzXG4gICAgICAgIGxpc3QucHVzaC5hcHBseShsaXN0LCB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5tYXAgKCAoeCkgPT4ge1xuICAgICAgICAgIHgucmVhZE9ubHkgPSB0cnVlOyAvLyBhcyByZWFkb25seVxuICAgICAgICAgIHgubmFtZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHgubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCB1c2VyIHNlYXJjaCBsaXN0XG4gICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gbGlzdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBETyBOT1QgVEhST1cgRVJST1JcbiAgICAgIC8vIHRvZG86IG5vdGlmeSBjb21wb25lbnQgZm9yIHRoaXMgZXJyb3IgaW4gb3JkZXIgdG8gZGlzYWJsZSBzb21lIGFjdGlvbnNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdXNlciBzZWFyY2ggbGlzdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0VXNlclNlYXJjaChldmVudDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QpIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUpO1xuICAgICAgaWYgKGxpc3RGb3VuZCkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IHE6IG51bGwsIHM6IHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUgfTtcbiAgICAgICAgICAvLyBjbGVhciBjcml0ZXJpYSBpZiBhbnlcbiAgICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IGxpc3RGb3VuZDtcbiAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLnNlbGVjdGVkTGlzdC5maWx0ZXI7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgczogbnVsbCB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hJbkxpc3RCeU5hbWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIEFycmF5LmlzQXJyYXkodGhpcy51c2VyU2VhcmNoTGlzdCkgKSB7XG4gICAgICBjb25zdCBsaXN0Rm91bmQgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoICh4KSA9PiB4Lm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCBsaXN0Rm91bmQgKSB7XG4gICAgICAgIHJldHVybiBsaXN0Rm91bmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbi8vICBVcGRhdGUgbGlzdCBpdGVtIGNvbnRlbnRzIHdpdGggZ2l2ZW4gY29udGVudCAoU2VhcmNoIGJ5IG9iamVjdCBuYW1lIHByb3BlcnR5KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5TmFtZSggbmFtZTogc3RyaW5nLCBuZXdJdGVtOiBhbnkgKSB7XG4gICAgY29uc3QgaXRlbUluTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSApO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5pbmRleE9mKGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdID0gbmV3SXRlbTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdO1xuICB9XG5cbi8vICBVcGRhdGUgbGlzdCBpdGVtIGNvbnRlbnRzIHdpdGggZ2l2ZW4gY29udGVudCAoU2VhcmNoIGJ5IG9iamVjdClcbiAgcHVibGljIHVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU9iamVjdCggaXRlbUluTGlzdDogYW55LCBuZXdJdGVtOiBhbnkgKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIERlbGV0ZSBsaXN0IGl0ZW0gZnJvbSBsaXN0XG4gIHB1YmxpYyBkZWxldGVJdGVtRnJvbVNhdmVkU2VhcmNoTGlzdEJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnkpIHtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICB9XG5cbi8vICBVc2VyIGNob3NlIHRvIHNhdmUgaXRzIGFkdmFuY2VkIGZvcm0gc2VhcmNoIGNyaXRlcmlhXG4gIHB1YmxpYyBzYXZlU2VhcmNoKCB0ZW1wbGF0ZVRvTG9hZDogVGVtcGxhdGVSZWY8YW55PiwgbmV3TGlzdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAoIHRoaXMudGFibGUuY29uZmlnLm1vZGVsICkge1xuLy8gICAgICBTZXQgdGhlIGNvcnJlc3BvbmRpbmcga2V5IHRvIGl0cyBsaXN0IGFuZCBzaG93IGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbmRvd1xuICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gYHRhYmxlcy8ke3RoaXMudGFibGUuY29uZmlnLm1vZGVsfS9zZWFyY2hlc2A7XG4gICAgICBpZiAodGhpcy5maWx0ZXIgJiYgT2JqZWN0LmtleXModGhpcy5maWx0ZXIpLmxlbmd0aCkge1xuLy8gICAgICBVc2VyIHdhbnRzIHRvIHNhdmUgYW4gZXhpc3RpbmcgbGlzdCBmcm9tIHRoZSBkcm9wZG93blxuICAgICAgICBpZiAoICFuZXdMaXN0ICYmIHRoaXMuc2VsZWN0ZWRMaXN0ICkge1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IG5hbWUgOiAgdGhpcy5zZWxlY3RlZExpc3QubmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgICAgIHRoaXMudXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0ICggdGhpcy5zZWxlY3RlZExpc3QsIG5ld0l0ZW0gKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhIG5ldyBsaXN0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMuX21vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlVG9Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbi8vICAgICAgICBVc2VyIGRpZCBub3QgZGVmaW5lIGFueSBjcml0ZXJpYVxuICAgICAgICB0aGlzLl9tb2RhbC5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGUnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuRW1wdHlDcml0ZXJpYUxpc3QnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5Ob0xpc3REZWZpbmVkJyksXG4gICAgICAgICAgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBBY2NlcHRlZCA9PiBTYXZlIGxpc3QgYW5kIENsb3NlIG1vZGFsXG4gIHB1YmxpYyBjb25maXJtTW9kYWwoIHNhdmVGb3JtTmFtZSApOiB2b2lkIHtcbi8vICAgIG5hbWUgZ2l2ZW4gYW5kIGxpc3QgbmFtZSBpcyB1bmlxdWVcbiAgICBpZiAoIHNhdmVGb3JtTmFtZSAmJiAhKHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHNhdmVGb3JtTmFtZSkpICkge1xuICAgICAgY29uc3QgbmV3SW5zZXJ0ZWRWYWx1ZSA9IHsgbmFtZSA6ICBzYXZlRm9ybU5hbWUsIGZpbHRlciA6IHsgLi4uIHRoaXMuZmlsdGVyIH0gfTtcbiAgICAgIGlmICggdGhpcy51c2VyU2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTZWFyY2hMaXN0Lmxlbmd0aCAhPT0gMCApIHtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdC5wdXNoKG5ld0luc2VydGVkVmFsdWUpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VWYWx1ZSA9IHRoaXMudXNlclNlYXJjaExpc3Q7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbmV3SW5zZXJ0ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gW25ld0luc2VydGVkVmFsdWVdO1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gdGhpcy5zdG9yYWdlVmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbmV3SW5zZXJ0ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xuICAgIH0gZWxzZSBpZiAoIHNhdmVGb3JtTmFtZSAmJiAodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4vLyAgICAgIFVzZXIgc2hvdWxkIGluc2VydCBhIGRpZmZlcmVudCBuYW1lIGNhdXNlIHRoaXMgb25lIGlzIGFscmVhZHkgaW4gdXNlXG4gICAgICBhbGVydCh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZCcpKTtcbiAgICB9IGVsc2Uge1xuLy8gICAgICBVc2VyIGRpZCBub3QgaW5zZXJ0IGFueSB0ZXh0XG4gICAgICBhbGVydCh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGVPblVzZXJFcnJvcicpKTtcbiAgICB9XG4gIH1cblxuLy8gIFVzZXIgZGVjbGluZWQgPT4gQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuLy8gIFVwbG9hZCB1c2VyJ3MgY3JpdGVyaWEgb24gVXNlciBTdG9yYWdlXG4gIHB1YmxpYyB1cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpIHtcbiAgICB0aGlzLl91c2VyU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgdGhpcy51c2VyU2VhcmNoTGlzdC5maWx0ZXIoKHgpID0+IHtcbiAgICAgIHJldHVybiAheC5yZWFkT25seTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgZ29pbmcgdG8gYmUgZGVwcmVjYXRlZC4gVXNlIHNlYXJjaCgpIG1ldGhvZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0geyp9IGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXN5bmNBZHZhbmNlZFNlYXJjaChldmVudD86IGFueSkge1xuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCB0aGlzLmdldFF1ZXJ5KCk7XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgcTogbnVsbCwgczogbnVsbCB9LCB0aGlzLmZpbHRlcik7XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlLnF1ZXJ5KSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGUuZmV0Y2goKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRRdWVyeSgpIHtcbiAgICAvLyBvbiBzaW1wbGUgc2VhcmNoIHJldHVybiBudWxsXG4gICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnICYmIEFycmF5LmlzQXJyYXkodGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9ucyA9IFtdO1xuICAgICAgY29uc3QgdmFsdWVzID0gYXdhaXQgdGhpcy5fYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyLmdldFZhbHVlcygpO1xuICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuZmlsdGVyLCB4Lm5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgbmFtZUZpbHRlciA9IHRoaXMuY29udmVydFRvU3RyaW5nKHRoaXMuZmlsdGVyW3gubmFtZV0pO1xuICAgICAgICAgIGlmIChuYW1lRmlsdGVyLmluY2x1ZGVzKCdHTVQnKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMudHJhbnNmb3JtRGF0ZSh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCB7XG4gICAgICAgICAgICAgIHZhbHVlOiBuZXdEYXRlLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJbeC5uYW1lXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGV4cHJlc3Npb25zLnB1c2godGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHguZmlsdGVyLCBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuZmlsdGVyW3gubmFtZV0sXG4gICAgICAgICAgICB9LCB2YWx1ZXMpKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxldCBxdWVyeTtcbiAgICAgIGlmIChleHByZXNzaW9ucyB8fCBleHByZXNzaW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gY3JlYXRlIGNsaWVudCBxdWVyeVxuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCdmaWx0ZXInLCBleHByZXNzaW9ucy5qb2luKCcgYW5kICcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBxdWVyeTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWR2YW5jZWRTZWFyY2goZXZlbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQpO1xuICB9XG5cbiAgcHVibGljIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogbnVsbCB9O1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgLy8gY2xlYXIgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgICAgLy8gY2xlYXIgbGlzdFxuICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgLy8gcmFpc2UgZmlsdGVyIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpZXcgc3RhdGUgb2Ygc2VhcmNoIGNvbnRyb2xcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld1N0YXRlKCk6IEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkdmFuY2VkVmlldzogIXRoaXMuY29sbGFwc2VkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdmlldyBiZXR3ZWVuIHNpbXBsZSBhbmQgYWR2YW5jZWQgc2VhcmNoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdG9nZ2xlVmlldygpIHtcbiAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDtcbiAgICAvLyBlbWl0IGV2ZW50IGZvciB2aWV3IHN0YXR1cyBjaGFuZ2VcbiAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh0aGlzLnZpZXdTdGF0ZSk7XG4gIH1cbn1cbiJdfQ==
520
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQ2pELGlCQUFpQixFQUFFLFlBQVksRUFBd0MsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRixPQUFPLEVBQUUsY0FBYyxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDckYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWE1QyxNQUFNLG1DQUFvQyxTQUFRLGdDQUFnQztJQTZCaEYsWUFBdUIsUUFBNEIsRUFDNUIsZUFBK0IsRUFDL0IsUUFBa0IsRUFDcEIsYUFBNkIsRUFD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QUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxTQUFTO1FBQ2xCLE9BQU87WUFDTCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUztTQUM5QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ1UsVUFBVTs7WUFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDakMsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN2QyxDQUFDO0tBQUE7OztZQXJmRixTQUFTLFNBQUM7Z0JBQ1QsK0NBQStDO2dCQUMvQyxRQUFRLEVBQUUsMkJBQTJCO2dCQUNyQyx5eU1BQXFEO2dCQUNyRCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7OztZQXBCUSxrQkFBa0I7WUFEbEIsY0FBYztZQUVkLFFBQVE7WUFFUixjQUFjO1lBRGQsa0JBQWtCO1lBRWxCLGdCQUFnQjtZQUNqQiwyQkFBMkI7WUFFM0IsWUFBWTtZQVJLLE1BQU07WUFHRixZQUFZOzs7b0JBd0J0QyxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFDTCxLQUFLOytCQUNMLEtBQUs7eUJBQ0wsU0FBUyxTQUFDLFlBQVk7eUJBQ3RCLE1BQU0sU0FBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvbiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBUZW1wbGF0ZVJlZiwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVXNlclN0b3JhZ2VTZXJ2aWNlLCBNb2RhbFNlcnZpY2UsIERJQUxPR19CVVRUT05TIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBUZXh0VXRpbHMgfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gIGFkdmFuY2VkVmlldzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95ICB7XG5cbiAgcHJpdmF0ZSBxdWVyeVBhcmFtU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoKSBwdWJsaWMgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xsYXBzZWQgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYWxsb3dTYXZlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHNob3dNb3JlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIG1lcmdlUXVlcnlQYXJhbXMgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoVGV4dCcpIHB1YmxpYyBzZWFyY2hUZXh0OiBhbnk7XG4gIEBPdXRwdXQoJ3ZpZXdDaGFuZ2UnKSBwdWJsaWMgdmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cz4oKTtcbiAgcHVibGljIHNldCB0ZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGV4dCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG1vZGFsUmVmOiBCc01vZGFsUmVmO1xuICBwdWJsaWMgc3RvcmFnZUtleTogYW55O1xuICBwdWJsaWMgc3RvcmFnZVZhbHVlOiBhbnk7XG4gIHB1YmxpYyB1c2VyU2VhcmNoTGlzdDogYW55ID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZExpc3Q6IGFueSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3VzZXJTdG9yYWdlOiBVc2VyU3RvcmFnZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9hZHZhbmNlZFNlYXJjaFZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHsgc3VwZXIoKTsgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlLmNvbmZpZ0NoYW5nZXMuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvYWQgdXNlciBzZWFyY2hlc1xuICAgICAgICB0aGlzLmxvYWRVc2VyU2VhcmNoTGlzdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHNlYXJjaCBjb21wb25lbnQgbWVyZ2VzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgIC8vICh1c2VzIHF1ZXJ5UGFyYW1zIHRvIGFwcGx5IGZpbHRlcilcbiAgICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBxdWVyeSBnaXZlbiBieSB0aGUgcXVlcnlQYXJhbXMgb2YgdGhlIGFjdGl2YXRlZCByb3V0ZVxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KSB7XG4gICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCAncScpKSB7XG4gICAgICAvLyBzZXQgY29sbGFwc2VkXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAvLyBzZWFyY2ggdGV4dFxuICAgICAgdGhpcy50ZXh0ID0gcXVlcnlQYXJhbXMucTtcbiAgICAgIHJldHVybiB0aGlzLnRhYmxlLnNlYXJjaCh0aGlzLnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHQgPSAnJztcbiAgICB9XG5cbiAgICBsZXQgZmlsdGVyUGFyYW1zID0gT2JqZWN0LmFzc2lnbih7fSwgcXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgJ3MnKSkge1xuICAgICAgLy8gc2V0IGNvbGxhcHNlZFxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIC8vIGZpbmQgdXNlciBzZWFyY2ggYnkgbmFtZVxuICAgICAgaWYgKHRoaXMudXNlclNlYXJjaExpc3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBxdWVyeVBhcmFtcy5zO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0KSB7XG4gICAgICAgICAgZmlsdGVyUGFyYW1zID0gdGhpcy5zZWxlY3RlZExpc3QuZmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJQYXJhbXMpLmZpbHRlcigoa2V5KSA9PiB7XG4gICAgICAvLyBzZWFyY2ggY3JpdGVyaWFcbiAgICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnICYmIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGZpbHRlclBhcmFtc1trZXldO1xuICAgICAgaWYgKFRleHRVdGlscy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KGZpbHRlclBhcmFtc1trZXldKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbHRlcltrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICAvLyBzZXQgdmFsdWVcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuZmlsdGVyLCBrZXksIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWx0ZXJba2V5XSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBjYWxsIGZpbHRlckNoYW5nZSBldmVudCB0byBhcHBseSBjaGFuZ2UgdG8gYWR2YW5jZWQgc2VhcmNoIGNoaWxkcmVuXG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgLy8gYXBwbHkgcXVlcnlcbiAgICB0aGlzLmdldFF1ZXJ5KCkudGhlbigocXVlcnkpID0+IHtcbiAgICAgIC8vIGlmIHRhYmxlIHF1ZXJ5IGlzIG51bGxcbiAgICAgIGlmICh0aGlzLnRhYmxlLnF1ZXJ5ID09IG51bGwpIHtcbiAgICAgICAgLy8gc2V0IHF1ZXJ5XG4gICAgICAgIHRoaXMudGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChxdWVyeSAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCBmaWx0ZXIgcGFyYW1zXG4gICAgICAgICAgdGhpcy50YWJsZS5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIHBhcmFtcy4kZmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGFuZCBmaW5hbGx5IGZldGNoIGRhdGFcbiAgICAgIHRoaXMudGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaEtleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAvLyBnZXQgc2VhcmNoIHRleHRcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSAoIGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgIC8vIG1lcmdlIHF1ZXJ5IHBhcmFtcyA/XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIHE6IHNlYXJjaFRleHQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmNvbmZpZyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyeSB0byBhcHBseSBmaWx0ZXIgYnkgYXBwZW5kaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBvdGhlcndpc2UgZG8gc2VhcmNoXG4gICAgICB0aGlzLnRhYmxlLnNlYXJjaChzZWFyY2hUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtRGF0ZShkYXRlKSB7XG4gICAgZGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdNTS9kZC95eXl5Jyk7IC8vIHdoYXRldmVyIGZvcm1hdCB5b3UgbmVlZC5cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9TdHJpbmcobmFtZUZpbHRlcikge1xuICAgIGxldCBuYW1lID0gJyc7XG4gICAgaWYgKG5hbWVGaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IG5hbWVGaWx0ZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuLy8gIExvYWQgc2F2ZWQgY3JpdGVyaWEgc2VhcmNoZXMgdXNlciBoYXMgc3RvcmVkIGJlZm9yZVxuICBwcml2YXRlIGxvYWRVc2VyU2VhcmNoTGlzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSAndGFibGVzLycgKyB0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCArICcvc2VhcmNoZXMnO1xuICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGRhdGEudmFsdWUgfHwgW107XG4gICAgICAvLyBpZiB0YWJsZSBjb25maWd1cmF0aW9uIGhhcyBwcmUtZGVmaW5lZCBzZWFyY2hlc1xuICAgICAgaWYgKHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMgJiYgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGFkZCBwcmUtZGVmaW5lZCBsaXN0c1xuICAgICAgICBsaXN0LnB1c2guYXBwbHkobGlzdCwgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMubWFwICggKHgpID0+IHtcbiAgICAgICAgICB4LnJlYWRPbmx5ID0gdHJ1ZTsgLy8gYXMgcmVhZG9ubHlcbiAgICAgICAgICB4Lm5hbWUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh4Lm5hbWUpO1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgdXNlciBzZWFyY2ggbGlzdFxuICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IGxpc3Q7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gRE8gTk9UIFRIUk9XIEVSUk9SXG4gICAgICAvLyB0b2RvOiBub3RpZnkgY29tcG9uZW50IGZvciB0aGlzIGVycm9yIGluIG9yZGVyIHRvIGRpc2FibGUgc29tZSBhY3Rpb25zXG4gICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIHVzZXIgc2VhcmNoIGxpc3QnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFVzZXJTZWFyY2goZXZlbnQ6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0KSB7XG4gICAgICBjb25zdCBsaXN0Rm91bmQgPSB0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZSh0aGlzLnNlbGVjdGVkTGlzdC5uYW1lKTtcbiAgICAgIGlmIChsaXN0Rm91bmQpIHtcbiAgICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0geyBxOiBudWxsLCBzOiB0aGlzLnNlbGVjdGVkTGlzdC5uYW1lIH07XG4gICAgICAgICAgLy8gY2xlYXIgY3JpdGVyaWEgaWYgYW55XG4gICAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IG51bGwgdmFsdWVcbiAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBsaXN0Rm91bmQ7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gdGhpcy5zZWxlY3RlZExpc3QuZmlsdGVyO1xuICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHM6IG51bGwgfSxcbiAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoSW5MaXN0QnlOYW1lKG5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCBBcnJheS5pc0FycmF5KHRoaXMudXNlclNlYXJjaExpc3QpICkge1xuICAgICAgY29uc3QgbGlzdEZvdW5kID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKCAoeCkgPT4geC5uYW1lID09PSBuYW1lKTtcbiAgICAgIGlmICggbGlzdEZvdW5kICkge1xuICAgICAgICByZXR1cm4gbGlzdEZvdW5kO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4vLyAgVXBkYXRlIGxpc3QgaXRlbSBjb250ZW50cyB3aXRoIGdpdmVuIGNvbnRlbnQgKFNlYXJjaCBieSBvYmplY3QgbmFtZSBwcm9wZXJ0eSlcbiAgcHVibGljIHVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU5hbWUoIG5hbWU6IHN0cmluZywgbmV3SXRlbTogYW55ICkge1xuICAgIGNvbnN0IGl0ZW1Jbkxpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoICh4KSA9PiB4Lm5hbWUgPT09IG5hbWUgKTtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlclNlYXJjaExpc3QuaW5kZXhPZihpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XSA9IG5ld0l0ZW07XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XTtcbiAgfVxuXG4vLyAgVXBkYXRlIGxpc3QgaXRlbSBjb250ZW50cyB3aXRoIGdpdmVuIGNvbnRlbnQgKFNlYXJjaCBieSBvYmplY3QpXG4gIHB1YmxpYyB1cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlPYmplY3QoIGl0ZW1Jbkxpc3Q6IGFueSwgbmV3SXRlbTogYW55ICkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5pbmRleE9mKGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdID0gbmV3SXRlbTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdO1xuICB9XG5cbi8vICBEZWxldGUgbGlzdCBpdGVtIGZyb20gbGlzdFxuICBwdWJsaWMgZGVsZXRlSXRlbUZyb21TYXZlZFNlYXJjaExpc3RCeU9iamVjdCggaXRlbUluTGlzdDogYW55KSB7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSBpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoKHRydWUpO1xuICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbiAgfVxuXG4vLyAgVXNlciBjaG9zZSB0byBzYXZlIGl0cyBhZHZhbmNlZCBmb3JtIHNlYXJjaCBjcml0ZXJpYVxuICBwdWJsaWMgc2F2ZVNlYXJjaCggdGVtcGxhdGVUb0xvYWQ6IFRlbXBsYXRlUmVmPGFueT4sIG5ld0xpc3Q6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKCB0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCApIHtcbi8vICAgICAgU2V0IHRoZSBjb3JyZXNwb25kaW5nIGtleSB0byBpdHMgbGlzdCBhbmQgc2hvdyBhIGNvbmZpcm1hdGlvbiBtb2RhbCB3aW5kb3dcbiAgICAgIHRoaXMuc3RvcmFnZUtleSA9IGB0YWJsZXMvJHt0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbH0vc2VhcmNoZXNgO1xuICAgICAgaWYgKHRoaXMuZmlsdGVyICYmIE9iamVjdC5rZXlzKHRoaXMuZmlsdGVyKS5sZW5ndGgpIHtcbi8vICAgICAgVXNlciB3YW50cyB0byBzYXZlIGFuIGV4aXN0aW5nIGxpc3QgZnJvbSB0aGUgZHJvcGRvd25cbiAgICAgICAgaWYgKCAhbmV3TGlzdCAmJiB0aGlzLnNlbGVjdGVkTGlzdCApIHtcbiAgICAgICAgICBjb25zdCBuZXdJdGVtID0geyBuYW1lIDogIHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUsIGZpbHRlciA6IHsgLi4uIHRoaXMuZmlsdGVyIH0gfTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU9iamVjdCAoIHRoaXMuc2VsZWN0ZWRMaXN0LCBuZXdJdGVtICk7XG4gICAgICAgICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuLy8gICAgICBVc2VyIHdhbnRzIHRvIHNhdmUgYSBuZXcgbGlzdFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLl9tb2RhbFNlcnZpY2Uuc2hvdyh0ZW1wbGF0ZVRvTG9hZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4vLyAgICAgICAgVXNlciBkaWQgbm90IGRlZmluZSBhbnkgY3JpdGVyaWFcbiAgICAgICAgdGhpcy5fbW9kYWwuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlJyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLkVtcHR5Q3JpdGVyaWFMaXN0JyksXG4gICAgICAgICAgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9tb2RhbC5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGUnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuTm9MaXN0RGVmaW5lZCcpLFxuICAgICAgICAgIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICB9XG4gIH1cblxuLy8gIFVzZXIgQWNjZXB0ZWQgPT4gU2F2ZSBsaXN0IGFuZCBDbG9zZSBtb2RhbFxuICBwdWJsaWMgY29uZmlybU1vZGFsKCBzYXZlRm9ybU5hbWUgKTogdm9pZCB7XG4vLyAgICBuYW1lIGdpdmVuIGFuZCBsaXN0IG5hbWUgaXMgdW5pcXVlXG4gICAgaWYgKCBzYXZlRm9ybU5hbWUgJiYgISh0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZShzYXZlRm9ybU5hbWUpKSApIHtcbiAgICAgIGNvbnN0IG5ld0luc2VydGVkVmFsdWUgPSB7IG5hbWUgOiAgc2F2ZUZvcm1OYW1lLCBmaWx0ZXIgOiB7IC4uLiB0aGlzLmZpbHRlciB9IH07XG4gICAgICBpZiAoIHRoaXMudXNlclNlYXJjaExpc3QgJiYgdGhpcy51c2VyU2VhcmNoTGlzdC5sZW5ndGggIT09IDAgKSB7XG4gICAgICAgIHRoaXMudXNlclNlYXJjaExpc3QucHVzaChuZXdJbnNlcnRlZFZhbHVlKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlVmFsdWUgPSB0aGlzLnVzZXJTZWFyY2hMaXN0O1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG5ld0luc2VydGVkVmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3JhZ2VWYWx1ZSA9IFtuZXdJbnNlcnRlZFZhbHVlXTtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IHRoaXMuc3RvcmFnZVZhbHVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG5ld0luc2VydGVkVmFsdWU7XG4gICAgICB9XG4gICAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcbiAgICB9IGVsc2UgaWYgKCBzYXZlRm9ybU5hbWUgJiYgKHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHNhdmVGb3JtTmFtZSkpICkge1xuLy8gICAgICBVc2VyIHNob3VsZCBpbnNlcnQgYSBkaWZmZXJlbnQgbmFtZSBjYXVzZSB0aGlzIG9uZSBpcyBhbHJlYWR5IGluIHVzZVxuICAgICAgYWxlcnQodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlT25MaXN0QWxyZWFkeUNyZWF0ZWQnKSk7XG4gICAgfSBlbHNlIHtcbi8vICAgICAgVXNlciBkaWQgbm90IGluc2VydCBhbnkgdGV4dFxuICAgICAgYWxlcnQodGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlT25Vc2VyRXJyb3InKSk7XG4gICAgfVxuICB9XG5cbi8vICBVc2VyIGRlY2xpbmVkID0+IENsb3NlIG1vZGFsXG4gIHB1YmxpYyBjbG9zZU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xuICB9XG5cbi8vICBVcGxvYWQgdXNlcidzIGNyaXRlcmlhIG9uIFVzZXIgU3RvcmFnZVxuICBwdWJsaWMgdXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKSB7XG4gICAgdGhpcy5fdXNlclN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKCh4KSA9PiB7XG4gICAgICByZXR1cm4gIXgucmVhZE9ubHk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQuIFVzZSBzZWFyY2goKSBtZXRob2QgaW5zdGVhZC5cbiAgICogQHBhcmFtIHsqfSBldmVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoIHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgdGhpcy5nZXRRdWVyeSgpO1xuICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7IHE6IG51bGwsIHM6IG51bGwgfSwgdGhpcy5maWx0ZXIpO1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZS5xdWVyeSkge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG4gICAgICB0aGlzLnRhYmxlLmZldGNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlYXJjaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0FkdmFuY2VkU2VhcmNoKCkudGhlbigoKSA9PiB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UXVlcnkoKSB7XG4gICAgLy8gb24gc2ltcGxlIHNlYXJjaCByZXR1cm4gbnVsbFxuICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkU2VhcmNoVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlciwgeC5uYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVGaWx0ZXIgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICBpZiAobmFtZUZpbHRlci5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLnRyYW5zZm9ybURhdGUodGhpcy5maWx0ZXJbeC5uYW1lXSk7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwge1xuICAgICAgICAgICAgICB2YWx1ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyW3gubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclt4Lm5hbWVdLFxuICAgICAgICAgICAgfSwgdmFsdWVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZXhwcmVzc2lvbnMgfHwgZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBjbGllbnQgcXVlcnlcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMudGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0FkdmFuY2VkU2VhcmNoKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IHE6IG51bGwsIHM6IG51bGwgfTtcbiAgICAgICAgLy8gZW51bWVyYXRlIGNyaXRlcmlhXG4gICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gc2V0IG51bGwgdmFsdWVcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICAgIC8vIGNsZWFyIGxpc3RcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgIC8vIHJhaXNlIGZpbHRlciBjaGFuZ2UgZXZlbnRcbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2aWV3IHN0YXRlIG9mIHNlYXJjaCBjb250cm9sXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpZXdTdGF0ZSgpOiBBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXMge1xuICAgIHJldHVybiB7XG4gICAgICBhZHZhbmNlZFZpZXc6ICF0aGlzLmNvbGxhcHNlZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHZpZXcgYmV0d2VlbiBzaW1wbGUgYW5kIGFkdmFuY2VkIHNlYXJjaFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRvZ2dsZVZpZXcoKSB7XG4gICAgdGhpcy5jb2xsYXBzZWQgPSAhdGhpcy5jb2xsYXBzZWQ7XG4gICAgLy8gZW1pdCBldmVudCBmb3IgdmlldyBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy52aWV3Q2hhbmdlLmVtaXQodGhpcy52aWV3U3RhdGUpO1xuICB9XG59XG4iXX0=