@posiwise/resource-module 0.0.130 → 0.0.132

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.
@@ -53,10 +53,10 @@ export class ResourceHubComponent extends AppBaseComponent {
53
53
  const data = res ? JSON.parse(res) : null;
54
54
  this.subscriptionId = data?.subscriptionId;
55
55
  });
56
+ this.userSub = this.userService.getUserInfo().subscribe(data => {
57
+ this.user = data;
58
+ });
56
59
  }
57
- this.userService.getUserInfo().subscribe(data => {
58
- this.user = data;
59
- });
60
60
  });
61
61
  this.masterSubscriptionId = this.appConfig.master_subscription.subscription_id;
62
62
  this.getPostsAndTags();
@@ -170,16 +170,17 @@ export class ResourceHubComponent extends AppBaseComponent {
170
170
  return '';
171
171
  }
172
172
  ngOnDestroy() {
173
+ this.userSub?.unsubscribe();
173
174
  super.ngOnDestroy();
174
175
  }
175
176
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHubComponent, deps: [{ token: i1.ResourceService }, { token: i2.TagService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
176
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceHubComponent, selector: "pw-posts-list", host: { listeners: { "window:scroll": "onWindowScroll()" } }, usesInheritance: true, ngImport: i0, template: "<pw-resource-header></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.SuperAdmin']\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <input type=\"text\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n <div class=\"col-md-3 col-sm-6 mb-4\"\n *ngFor=\"let tag of tags\">\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card\n *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Post List\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Author\"\n class=\"default-user-image\" />\n </a>\n </div>\n\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"javascript:void(0);\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"javascript:void(0);\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n </div>\n\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1\"\n style=\"font-size: 1.2rem;\">...</span>\n </ng-container>\n </div>\n\n\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}body{background:#fff}.edit-card .in-page-edit-icon{margin-top:1rem!important}.blog-listing{border:1px solid rgb(238,238,238);cursor:pointer;box-shadow:0 4px 12px #00000026}.all-posts{margin:2.5em auto 0;max-width:980px;padding:14px 20px;width:100%}.tag-div{height:100%;display:flex;flex-direction:column;justify-content:space-between}ul.tags{display:inline-flex;font-size:16px;font-weight:400}ul.tags li{color:#337ab7;cursor:pointer;font-weight:600;margin-right:20px}ul.tags li:hover{color:#000}.search{position:relative}.search input{border:0;border-bottom:1px solid rgb(213,206,206)}.search i{position:absolute;right:5px}.scroll-container{max-height:70vh;overflow-y:auto}.blog-list .blog-listing h4{color:#000;font:28px/1.3 Roboto,sans-serif;transition:all .5s}.blog-list .blog-listing h4:hover{color:#0045c7}.blog-list .blog-listing p.body{color:#b3b3b3;font:16px/1.4 Roboto,sans-serif;transition:all .5s;min-height:120px!important;word-break:break-word;overflow-wrap:break-word;white-space:normal}.blog-list .blog-listing p.body:hover{color:#0045c7}.blog-list .blog-listing p.body p{color:inherit;font:inherit;transition:inherit}.blog-list .blog-listing p.body p:hover{color:#0045c7}.blog-list .blog-listing .list-blog-image img{padding:7px 25px 25px}.blog-list .blog-listing .author{padding-top:1.5rem}.blog-list .blog-listing .author .avatar-image{border:1px solid rgb(0,0,0);border-radius:50px;height:50px;clip-path:circle(50% at 50% 50%);width:50px}.blog-list .blog-listing .author .avatar-image img{left:50%;position:relative;top:50%;transform:translate(-50%,-50%)}.blog-list .blog-listing .author .avatar-image .default-user-image{width:50px}.blog-list .blog-listing .author .author-name p.name{color:#000;font:14px/1 Roboto,sans-serif;margin:0;transition:all .5s}.blog-list .blog-listing .author .author-name p.name:hover{color:#0045c7}.blog-list .blog-listing .author .author-name p.name i{color:#000}.blog-list .blog-listing .author .author-name ul li{display:inline-block;padding-right:10px;vertical-align:middle}.blog-list .blog-listing .author .author-name ul li a{color:#b3b3b3;font:12px/1 Roboto,sans-serif}.blog-list .blog-listing .author .share-post{flex-grow:3;position:relative;text-align:right}.blog-list .blog-listing .author .share-post i{color:var(--first)}.blog-list .blog-listing .author .share-post .dropdown-menu{border:0 0;box-shadow:0 3px 8px #0003;left:auto!important;right:12px;top:26px!important;transform:translate(0)!important}.blog-list .blog-listing .blog-view{border-top:1px solid rgb(238,238,238)}.blog-list .blog-listing .blog-view ul li{color:#b3b3b3;font:12px/1 Roboto,sans-serif;padding-right:14px}.blog-list .blog-listing .blog-view ul li a{color:inherit;font:inherit;transition:all .5s}.blog-list .blog-listing .blog-view ul li a:hover{color:#0045c7}.blog-list .blog-listing .blog-view ul li:last-child{flex-grow:3;padding-right:0;text-align:right}.blog-list .blog-listing .blog-view ul li:last-child i{color:#e84a43;font-size:14px}@media only screen and (width <= 1024px){.cust-mt{padding:14px 5px}.cust-mt .blog-list .blog-listing h4{font:20px/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body{font:.9rem/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body p{font:inherit}.cust-mt .blog-list .blog-listing .blog-image{height:300px}}@media only screen and (width <= 767px){.blog-list .blog-listing{height:auto;max-height:none;overflow:visible}.blog-list .blog-listing .blog-view{padding-bottom:1rem}}@media (width >= 768px){.blog-view{bottom:0;width:92%}}.post-body-text:hover{color:var(--titles)!important}.resource-card{border:2px dashed #d4d4d4;border-radius:16px;background-color:#fff;transition:box-shadow .3s ease;cursor:pointer;min-height:95px;padding:1.5rem!important}.resource-card:hover{box-shadow:0 0 30px #00000014}.selected{border:4px dashed #d4d4d4;border-color:var(--first)!important}.resource-icon{font-size:2.5rem;color:var(--first)}.resource-text{font-size:1.4rem;font-weight:500;color:var(--text-color);line-height:2rem}.three-dots-wrapper{width:32px;height:32px;display:flex;margin-top:.25rem!important;justify-content:center;cursor:pointer;position:relative;z-index:2}\n", ".top-search-input{color:#000!important;border:3px solid #d4d4d4!important;padding:5px 30px!important;border-radius:29px!important}::placeholder{color:#d4d4d4}.vendors-distributor-wrapper{margin-top:5rem!important}.vendor-icon{max-width:180px;max-height:100%;width:100%!important}.vendor-name{font-size:3rem;line-height:3rem;color:var(--text-color, black)}::ng-deep .customPaginator .p-paginator{border:none!important}::ng-deep .customPaginator .p-paginator button{border:none!important}.int-span{text-transform:uppercase;font-size:2.5rem;color:var(--first)}.boxes{width:100%;min-height:150px;display:flex;align-items:center;justify-content:center;text-align:center;padding:15px;border:1px dashed #ccc;border-radius:8px;word-break:break-word;white-space:normal;height:100%}a.vendor-link{display:inline-block;transition:transform .2s ease}a.vendor-link:hover{transform:scale(1.05);cursor:pointer}.search-wrapper{position:relative;width:300px}.search-input{width:100%;padding:10px 20px 10px 40px;border:2px solid #d4d4d4;border-radius:30px;font-size:1rem;color:#000;background-color:#fff}.search-input::placeholder{color:silver}.search-input:focus{outline:none;border-color:var(--first)}.search-icon{position:absolute;top:50%;left:14px;transform:translateY(-50%);color:#d4d4d4;font-size:1.1rem}@media (width <= 768px){.vendor-icon{width:50!important}.search-container{flex-wrap:wrap!important;gap:2rem}.int-span{font-size:1.75rem}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ResourceHeaderComponent, selector: "pw-resource-header" }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i5.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i8.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i8.LazyImgDirective, selector: "img" }, { kind: "component", type: i9.ResourceEditCardComponent, selector: "pw-resource-edit-card", inputs: ["id", "resourceData"], outputs: ["updated"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i10.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i10.TextTruncatePipe, name: "textTruncate" }], encapsulation: i0.ViewEncapsulation.None }); }
177
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceHubComponent, selector: "pw-posts-list", host: { listeners: { "window:scroll": "onWindowScroll()" } }, usesInheritance: true, ngImport: i0, template: "<pw-resource-header></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.SuperAdmin']\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <input type=\"text\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n <div class=\"col-md-3 col-sm-6 mb-4\"\n *ngFor=\"let tag of tags\">\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card\n *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Post List\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Author\"\n class=\"default-user-image\" />\n </a>\n </div>\n\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"javascript:void(0);\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"javascript:void(0);\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n </div>\n\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1 expand-tags\">...</span>\n </ng-container>\n </div>\n\n\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}body{background:#fff}.edit-card .in-page-edit-icon{margin-top:1rem!important}.blog-listing{border:1px solid rgb(238,238,238);cursor:pointer;box-shadow:0 4px 12px #00000026}.all-posts{margin:2.5em auto 0;max-width:980px;padding:14px 20px;width:100%}.tag-div{height:100%;display:flex;flex-direction:column;justify-content:space-between}ul.tags{display:inline-flex;font-size:16px;font-weight:400}ul.tags li{color:#337ab7;cursor:pointer;font-weight:600;margin-right:20px}ul.tags li:hover{color:#000}.search{position:relative}.search input{border:0;border-bottom:1px solid rgb(213,206,206)}.search i{position:absolute;right:5px}.scroll-container{max-height:70vh;overflow-y:auto}.blog-list .blog-listing h4{color:#000;font:28px/1.3 Roboto,sans-serif;transition:all .5s}.blog-list .blog-listing h4:hover{color:#0045c7}.blog-list .blog-listing p.body{color:#b3b3b3;font:16px/1.4 Roboto,sans-serif;transition:all .5s;min-height:120px!important;word-break:break-word;overflow-wrap:break-word;white-space:normal}.blog-list .blog-listing p.body:hover{color:#0045c7}.blog-list .blog-listing p.body p{color:inherit;font:inherit;transition:inherit}.blog-list .blog-listing p.body p:hover{color:#0045c7}.blog-list .blog-listing .list-blog-image img{padding:7px 25px 25px}.blog-list .blog-listing .author{padding-top:1.5rem}.blog-list .blog-listing .author .avatar-image{border:1px solid rgb(0,0,0);border-radius:50px;height:50px;clip-path:circle(50% at 50% 50%);width:50px}.blog-list .blog-listing .author .avatar-image img{left:50%;position:relative;top:50%;transform:translate(-50%,-50%)}.blog-list .blog-listing .author .avatar-image .default-user-image{width:50px}.blog-list .blog-listing .author .author-name p.name{color:#000;font:14px/1 Roboto,sans-serif;margin:0;transition:all .5s}.blog-list .blog-listing .author .author-name p.name:hover{color:#0045c7}.blog-list .blog-listing .author .author-name p.name i{color:#000}.blog-list .blog-listing .author .author-name ul li{display:inline-block;padding-right:10px;vertical-align:middle}.blog-list .blog-listing .author .author-name ul li a{color:#b3b3b3;font:12px/1 Roboto,sans-serif}.blog-list .blog-listing .author .share-post{flex-grow:3;position:relative;text-align:right}.blog-list .blog-listing .author .share-post i{color:var(--first)}.blog-list .blog-listing .author .share-post .dropdown-menu{border:0 0;box-shadow:0 3px 8px #0003;left:auto!important;right:12px;top:26px!important;transform:translate(0)!important}.blog-list .blog-listing .blog-view{border-top:1px solid rgb(238,238,238)}.blog-list .blog-listing .blog-view ul li{color:#b3b3b3;font:12px/1 Roboto,sans-serif;padding-right:14px}.blog-list .blog-listing .blog-view ul li a{color:inherit;font:inherit;transition:all .5s}.blog-list .blog-listing .blog-view ul li a:hover{color:#0045c7}.blog-list .blog-listing .blog-view ul li:last-child{flex-grow:3;padding-right:0;text-align:right}.blog-list .blog-listing .blog-view ul li:last-child i{color:#e84a43;font-size:14px}@media only screen and (width <= 1024px){.cust-mt{padding:14px 5px}.cust-mt .blog-list .blog-listing h4{font:20px/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body{font:.9rem/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body p{font:inherit}.cust-mt .blog-list .blog-listing .blog-image{height:300px}}@media only screen and (width <= 767px){.blog-list .blog-listing{height:auto;max-height:none;overflow:visible}.blog-list .blog-listing .blog-view{padding-bottom:1rem}}@media (width >= 768px){.blog-view{bottom:0;width:92%}}.post-body-text:hover{color:var(--titles)!important}.resource-card{border:2px dashed #d4d4d4;border-radius:16px;background-color:#fff;transition:box-shadow .3s ease;cursor:pointer;min-height:95px;padding:1.5rem!important}.resource-card:hover{box-shadow:0 0 30px #00000014}.selected{border:4px dashed #d4d4d4;border-color:var(--first)!important}.resource-icon{font-size:2.5rem;color:var(--first)}.resource-text{font-size:1.4rem;font-weight:500;color:var(--text-color);line-height:2rem}.three-dots-wrapper{width:32px;height:32px;display:flex;margin-top:.25rem!important;justify-content:center;cursor:pointer;position:relative;z-index:2}.expand-tags{font-size:1.2rem}\n", ".top-search-input{color:#000!important;border:3px solid #d4d4d4!important;padding:5px 30px!important;border-radius:29px!important}::placeholder{color:#d4d4d4}.vendors-distributor-wrapper{margin-top:5rem!important}.vendor-icon{max-width:180px;max-height:100%;width:100%!important}.vendor-name{font-size:3rem;line-height:3rem;color:var(--text-color, black)}::ng-deep .customPaginator .p-paginator{border:none!important}::ng-deep .customPaginator .p-paginator button{border:none!important}.int-span{text-transform:uppercase;font-size:2.5rem;color:var(--first)}.boxes{width:100%;min-height:150px;display:flex;align-items:center;justify-content:center;text-align:center;padding:15px;border:1px dashed #ccc;border-radius:8px;word-break:break-word;white-space:normal;height:100%}a.vendor-link{display:inline-block;transition:transform .2s ease}a.vendor-link:hover{transform:scale(1.05);cursor:pointer}.search-wrapper{position:relative;width:300px}.search-input{width:100%;padding:10px 20px 10px 40px;border:2px solid #d4d4d4;border-radius:30px;font-size:1rem;color:#000;background-color:#fff}.search-input::placeholder{color:silver}.search-input:focus{outline:none;border-color:var(--first)}.search-icon{position:absolute;top:50%;left:14px;transform:translateY(-50%);color:#d4d4d4;font-size:1.1rem}@media (width <= 768px){.vendor-icon{width:50!important}.search-container{flex-wrap:wrap!important;gap:2rem}.int-span{font-size:1.75rem}}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.ResourceHeaderComponent, selector: "pw-resource-header" }, { kind: "directive", type: i6.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i7.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i5.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i8.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color", "colorByName", "dataName"] }, { kind: "directive", type: i8.LazyImgDirective, selector: "img" }, { kind: "component", type: i9.ResourceEditCardComponent, selector: "pw-resource-edit-card", inputs: ["id", "resourceData"], outputs: ["updated"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i10.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i10.TextTruncatePipe, name: "textTruncate" }], encapsulation: i0.ViewEncapsulation.None }); }
177
178
  }
178
179
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceHubComponent, decorators: [{
179
180
  type: Component,
180
- args: [{ selector: 'pw-posts-list', encapsulation: ViewEncapsulation.None, template: "<pw-resource-header></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.SuperAdmin']\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <input type=\"text\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n <div class=\"col-md-3 col-sm-6 mb-4\"\n *ngFor=\"let tag of tags\">\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card\n *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Post List\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Author\"\n class=\"default-user-image\" />\n </a>\n </div>\n\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"javascript:void(0);\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"javascript:void(0);\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n </div>\n\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1\"\n style=\"font-size: 1.2rem;\">...</span>\n </ng-container>\n </div>\n\n\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}body{background:#fff}.edit-card .in-page-edit-icon{margin-top:1rem!important}.blog-listing{border:1px solid rgb(238,238,238);cursor:pointer;box-shadow:0 4px 12px #00000026}.all-posts{margin:2.5em auto 0;max-width:980px;padding:14px 20px;width:100%}.tag-div{height:100%;display:flex;flex-direction:column;justify-content:space-between}ul.tags{display:inline-flex;font-size:16px;font-weight:400}ul.tags li{color:#337ab7;cursor:pointer;font-weight:600;margin-right:20px}ul.tags li:hover{color:#000}.search{position:relative}.search input{border:0;border-bottom:1px solid rgb(213,206,206)}.search i{position:absolute;right:5px}.scroll-container{max-height:70vh;overflow-y:auto}.blog-list .blog-listing h4{color:#000;font:28px/1.3 Roboto,sans-serif;transition:all .5s}.blog-list .blog-listing h4:hover{color:#0045c7}.blog-list .blog-listing p.body{color:#b3b3b3;font:16px/1.4 Roboto,sans-serif;transition:all .5s;min-height:120px!important;word-break:break-word;overflow-wrap:break-word;white-space:normal}.blog-list .blog-listing p.body:hover{color:#0045c7}.blog-list .blog-listing p.body p{color:inherit;font:inherit;transition:inherit}.blog-list .blog-listing p.body p:hover{color:#0045c7}.blog-list .blog-listing .list-blog-image img{padding:7px 25px 25px}.blog-list .blog-listing .author{padding-top:1.5rem}.blog-list .blog-listing .author .avatar-image{border:1px solid rgb(0,0,0);border-radius:50px;height:50px;clip-path:circle(50% at 50% 50%);width:50px}.blog-list .blog-listing .author .avatar-image img{left:50%;position:relative;top:50%;transform:translate(-50%,-50%)}.blog-list .blog-listing .author .avatar-image .default-user-image{width:50px}.blog-list .blog-listing .author .author-name p.name{color:#000;font:14px/1 Roboto,sans-serif;margin:0;transition:all .5s}.blog-list .blog-listing .author .author-name p.name:hover{color:#0045c7}.blog-list .blog-listing .author .author-name p.name i{color:#000}.blog-list .blog-listing .author .author-name ul li{display:inline-block;padding-right:10px;vertical-align:middle}.blog-list .blog-listing .author .author-name ul li a{color:#b3b3b3;font:12px/1 Roboto,sans-serif}.blog-list .blog-listing .author .share-post{flex-grow:3;position:relative;text-align:right}.blog-list .blog-listing .author .share-post i{color:var(--first)}.blog-list .blog-listing .author .share-post .dropdown-menu{border:0 0;box-shadow:0 3px 8px #0003;left:auto!important;right:12px;top:26px!important;transform:translate(0)!important}.blog-list .blog-listing .blog-view{border-top:1px solid rgb(238,238,238)}.blog-list .blog-listing .blog-view ul li{color:#b3b3b3;font:12px/1 Roboto,sans-serif;padding-right:14px}.blog-list .blog-listing .blog-view ul li a{color:inherit;font:inherit;transition:all .5s}.blog-list .blog-listing .blog-view ul li a:hover{color:#0045c7}.blog-list .blog-listing .blog-view ul li:last-child{flex-grow:3;padding-right:0;text-align:right}.blog-list .blog-listing .blog-view ul li:last-child i{color:#e84a43;font-size:14px}@media only screen and (width <= 1024px){.cust-mt{padding:14px 5px}.cust-mt .blog-list .blog-listing h4{font:20px/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body{font:.9rem/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body p{font:inherit}.cust-mt .blog-list .blog-listing .blog-image{height:300px}}@media only screen and (width <= 767px){.blog-list .blog-listing{height:auto;max-height:none;overflow:visible}.blog-list .blog-listing .blog-view{padding-bottom:1rem}}@media (width >= 768px){.blog-view{bottom:0;width:92%}}.post-body-text:hover{color:var(--titles)!important}.resource-card{border:2px dashed #d4d4d4;border-radius:16px;background-color:#fff;transition:box-shadow .3s ease;cursor:pointer;min-height:95px;padding:1.5rem!important}.resource-card:hover{box-shadow:0 0 30px #00000014}.selected{border:4px dashed #d4d4d4;border-color:var(--first)!important}.resource-icon{font-size:2.5rem;color:var(--first)}.resource-text{font-size:1.4rem;font-weight:500;color:var(--text-color);line-height:2rem}.three-dots-wrapper{width:32px;height:32px;display:flex;margin-top:.25rem!important;justify-content:center;cursor:pointer;position:relative;z-index:2}\n", ".top-search-input{color:#000!important;border:3px solid #d4d4d4!important;padding:5px 30px!important;border-radius:29px!important}::placeholder{color:#d4d4d4}.vendors-distributor-wrapper{margin-top:5rem!important}.vendor-icon{max-width:180px;max-height:100%;width:100%!important}.vendor-name{font-size:3rem;line-height:3rem;color:var(--text-color, black)}::ng-deep .customPaginator .p-paginator{border:none!important}::ng-deep .customPaginator .p-paginator button{border:none!important}.int-span{text-transform:uppercase;font-size:2.5rem;color:var(--first)}.boxes{width:100%;min-height:150px;display:flex;align-items:center;justify-content:center;text-align:center;padding:15px;border:1px dashed #ccc;border-radius:8px;word-break:break-word;white-space:normal;height:100%}a.vendor-link{display:inline-block;transition:transform .2s ease}a.vendor-link:hover{transform:scale(1.05);cursor:pointer}.search-wrapper{position:relative;width:300px}.search-input{width:100%;padding:10px 20px 10px 40px;border:2px solid #d4d4d4;border-radius:30px;font-size:1rem;color:#000;background-color:#fff}.search-input::placeholder{color:silver}.search-input:focus{outline:none;border-color:var(--first)}.search-icon{position:absolute;top:50%;left:14px;transform:translateY(-50%);color:#d4d4d4;font-size:1.1rem}@media (width <= 768px){.vendor-icon{width:50!important}.search-container{flex-wrap:wrap!important;gap:2rem}.int-span{font-size:1.75rem}}\n"] }]
181
+ args: [{ selector: 'pw-posts-list', encapsulation: ViewEncapsulation.None, template: "<pw-resource-header></pw-resource-header>\n<div class=\"all-posts py-5\">\n\n <div class=\"row mt-1 mb-4 px-2\">\n <div class=\"col-md-8\">\n </div>\n <div class=\"col-md-4\">\n <div class=\"text-end mt-0 mt-sm-3 d-flex\">\n <i *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.SuperAdmin']\"\n class=\"fa fa-edit in-page-edit-icon cursor-pointer mt-2 me-3\"\n (click)=\"navigateToTagList()\"\n title=\"Edit Logo\"></i>\n <div class=\"search-wrapper position-relative\">\n <i class=\"fa fa-search search-icon\"></i>\n <input type=\"text\" [(ngModel)]=\"searchTextItems\" pInputText size=\"50\" placeholder=\"Search resources...\"\n (input)=\"onSearch(1)\"\n class=\"search-input top-search-input\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"row resource-row\">\n <!-- All Resources Card -->\n <div class=\"col-md-3 col-sm-6 mb-4\">\n <div class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"getPosts(1, 20, true)\"\n [ngClass]=\"{ 'selected': selectedTags.length === 0 }\"\n (click)=\"getPosts(1, 20, true)\">\n <i class=\"fa fa-layer-group resource-icon me-3\"></i>\n <span class=\"resource-text\">All Resources</span>\n </div>\n </div>\n\n <!-- Dynamic Tags -->\n <div class=\"col-md-3 col-sm-6 mb-4\"\n *ngFor=\"let tag of tags\">\n <div\n class=\"resource-card d-flex align-items-center p-3\"\n (keydown.enter)=\"tagPost(tag)\"\n [ngClass]=\"{ 'selected': isSelected(tag.id) }\"\n (click)=\"tagPost(tag)\">\n <i *ngIf=\"tag?.icon_name\" class=\"fa\" [ngClass]=\"tag.icon_name + ' resource-icon me-3'\"></i>\n <span class=\"resource-text\">{{ tag.name }}</span>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"loading && !loaded\">\n <div class=\"w-100 text-center mt-3\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n </ng-container>\n <ng-container *ngIf=\"posts?.length && !loading\">\n <div>\n <div class=\"blog-list\">\n <div class=\"row mt-4 mb-5 ms-1 me-1 blog-listing\"\n *ngFor=\"let post of data\">\n <div class=\"col-md-6 col-sm-12 col-xs-12 my-auto\">\n <pw-resource-edit-card\n *ngIf=\"userLoggedIn && user?.auth?.granted['Pages.Admin']\"\n [id]=\"post?.id\"\n [resourceData]=\"post\"\n (updated)=\"getPosts(1, pageSize)\">\n </pw-resource-edit-card>\n <div class=\"list-blog-image\" [routerLink]=\"['/resources/view', post.slug]\">\n <img [src]=\"post.picture?.url\"\n alt=\"Post List\"\n class=\"img-fluid\" />\n </div>\n </div>\n <div class=\"col-md-6 col-sm-12 col-xs-12 px-4 position-relative\">\n <div class=\"tag-div\">\n <div class=\"author d-flex\">\n <div class=\"avatar-image\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\">\n <img *ngIf=\"post.author?.avatar\"\n [src]=\"post.author?.avatar[0]?.url\"\n alt=\"Author\" />\n <img *ngIf=\"!post.author?.avatar\"\n src=\"/assets/img/icons/male.png\"\n alt=\"Author\"\n class=\"default-user-image\" />\n </a>\n </div>\n\n <div class=\"author-name ps-2\">\n <a [attr.disabled]=\"!userLoggedIn\"\n [routerLink]=\"['/members', post?.author?.slug]\"\n class=\"name\">\n {{ post.author.first_name }}\n <i class=\"fas fa-crown\" aria-hidden=\"true\"></i></a>\n <ul>\n <li>\n <a href=\"javascript:void(0);\">\n {{ post.published_at | date: 'dd/MM/yyyy' }}\n </a>\n </li>\n <li>.</li>\n <li>\n <a href=\"javascript:void(0);\">{{ thisPostReadingTime(post.body) }}\n </a>\n </li>\n </ul>\n </div>\n <div class=\"share-post\">\n <div class=\"dropdown position-relative d-flex justify-content-end\" (clickOutside)=\"post.showDropdown = false\">\n <div class=\"three-dots-wrapper\" (keydown.enter)=\"toggleDropdown($event, post)\" (click)=\"toggleDropdown($event, post)\">\n <i class=\"fas fa-ellipsis-v\"></i>\n </div>\n\n <div class=\"dropdown-menu show\"\n *ngIf=\"post.showDropdown\">\n <a class=\"dropdown-item\"\n href=\"http://www.facebook.com/\"\n rel=\"noopener noreferrer\"\n target=\"_blank\">\n <i class=\"fas fa-share\"></i> Share Post\n </a>\n </div>\n </div>\n\n </div>\n </div>\n <h4 [routerLink]=\"['/resources/view', post.slug]\"\n class=\"title my-3\">{{ post.title }}</h4>\n <p [routerLink]=\"['/resources/view', post.slug]\"\n class=\"body mb-3 pb-3 post-body-text\">\n {{ post.body | removeHtml: 'quill' | textTruncate: 200 }}\n </p>\n <div class=\"d-flex flex-wrap align-items-center gap-2 mt-auto mb-3\">\n <ng-container *ngIf=\"post?.tags?.length\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(0, 4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n\n <ng-container *ngIf=\"post.expandedTags\">\n <ng-container *ngFor=\"let tag of post?.tags?.slice(4)\">\n <span class=\"badge m-1\"\n [appDynamicBadge]=\"{ itemsArray: post?.tags, item: tag }\"\n [colorByName]=\"true\"\n [dataName]=\"tag.name\"\n color=\"blue-grey\">\n {{ tag.name }}\n </span>\n </ng-container>\n </ng-container>\n\n <span *ngIf=\"post?.tags?.length > 4\"\n (click)=\"post.expandedTags = !post.expandedTags\"\n (keydown.enter)=\"post.expandedTags = !post.expandedTags\"\n class=\"fw-bold cursor-pointer m-1 expand-tags\">...</span>\n </ng-container>\n </div>\n\n\n <div class=\"blog-view py-3 blog-list-write-view\">\n <ul class=\"d-flex\">\n <li>{{ post.view !== null ? post.view : '0' }} View</li>\n <li><a [routerLink]=\"['/resources/view', post.slug]\">Write Comment</a></li>\n <li>\n <a [routerLink]=\"['/resources/view', post.slug]\" aria-label=\"Blog\"><i class=\"far fa-heart\" aria-hidden=\"true\"></i></a>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!posts?.length && loaded\">\n <pw-no-data [withImage]=\"true\" message=\"We couldn't find any resources.\" > </pw-no-data>\n </ng-container>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_sub_bg: rgb(70, 136, 236);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}body{background:#fff}.edit-card .in-page-edit-icon{margin-top:1rem!important}.blog-listing{border:1px solid rgb(238,238,238);cursor:pointer;box-shadow:0 4px 12px #00000026}.all-posts{margin:2.5em auto 0;max-width:980px;padding:14px 20px;width:100%}.tag-div{height:100%;display:flex;flex-direction:column;justify-content:space-between}ul.tags{display:inline-flex;font-size:16px;font-weight:400}ul.tags li{color:#337ab7;cursor:pointer;font-weight:600;margin-right:20px}ul.tags li:hover{color:#000}.search{position:relative}.search input{border:0;border-bottom:1px solid rgb(213,206,206)}.search i{position:absolute;right:5px}.scroll-container{max-height:70vh;overflow-y:auto}.blog-list .blog-listing h4{color:#000;font:28px/1.3 Roboto,sans-serif;transition:all .5s}.blog-list .blog-listing h4:hover{color:#0045c7}.blog-list .blog-listing p.body{color:#b3b3b3;font:16px/1.4 Roboto,sans-serif;transition:all .5s;min-height:120px!important;word-break:break-word;overflow-wrap:break-word;white-space:normal}.blog-list .blog-listing p.body:hover{color:#0045c7}.blog-list .blog-listing p.body p{color:inherit;font:inherit;transition:inherit}.blog-list .blog-listing p.body p:hover{color:#0045c7}.blog-list .blog-listing .list-blog-image img{padding:7px 25px 25px}.blog-list .blog-listing .author{padding-top:1.5rem}.blog-list .blog-listing .author .avatar-image{border:1px solid rgb(0,0,0);border-radius:50px;height:50px;clip-path:circle(50% at 50% 50%);width:50px}.blog-list .blog-listing .author .avatar-image img{left:50%;position:relative;top:50%;transform:translate(-50%,-50%)}.blog-list .blog-listing .author .avatar-image .default-user-image{width:50px}.blog-list .blog-listing .author .author-name p.name{color:#000;font:14px/1 Roboto,sans-serif;margin:0;transition:all .5s}.blog-list .blog-listing .author .author-name p.name:hover{color:#0045c7}.blog-list .blog-listing .author .author-name p.name i{color:#000}.blog-list .blog-listing .author .author-name ul li{display:inline-block;padding-right:10px;vertical-align:middle}.blog-list .blog-listing .author .author-name ul li a{color:#b3b3b3;font:12px/1 Roboto,sans-serif}.blog-list .blog-listing .author .share-post{flex-grow:3;position:relative;text-align:right}.blog-list .blog-listing .author .share-post i{color:var(--first)}.blog-list .blog-listing .author .share-post .dropdown-menu{border:0 0;box-shadow:0 3px 8px #0003;left:auto!important;right:12px;top:26px!important;transform:translate(0)!important}.blog-list .blog-listing .blog-view{border-top:1px solid rgb(238,238,238)}.blog-list .blog-listing .blog-view ul li{color:#b3b3b3;font:12px/1 Roboto,sans-serif;padding-right:14px}.blog-list .blog-listing .blog-view ul li a{color:inherit;font:inherit;transition:all .5s}.blog-list .blog-listing .blog-view ul li a:hover{color:#0045c7}.blog-list .blog-listing .blog-view ul li:last-child{flex-grow:3;padding-right:0;text-align:right}.blog-list .blog-listing .blog-view ul li:last-child i{color:#e84a43;font-size:14px}@media only screen and (width <= 1024px){.cust-mt{padding:14px 5px}.cust-mt .blog-list .blog-listing h4{font:20px/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body{font:.9rem/1.3 Roboto,sans-serif}.cust-mt .blog-list .blog-listing p.body p{font:inherit}.cust-mt .blog-list .blog-listing .blog-image{height:300px}}@media only screen and (width <= 767px){.blog-list .blog-listing{height:auto;max-height:none;overflow:visible}.blog-list .blog-listing .blog-view{padding-bottom:1rem}}@media (width >= 768px){.blog-view{bottom:0;width:92%}}.post-body-text:hover{color:var(--titles)!important}.resource-card{border:2px dashed #d4d4d4;border-radius:16px;background-color:#fff;transition:box-shadow .3s ease;cursor:pointer;min-height:95px;padding:1.5rem!important}.resource-card:hover{box-shadow:0 0 30px #00000014}.selected{border:4px dashed #d4d4d4;border-color:var(--first)!important}.resource-icon{font-size:2.5rem;color:var(--first)}.resource-text{font-size:1.4rem;font-weight:500;color:var(--text-color);line-height:2rem}.three-dots-wrapper{width:32px;height:32px;display:flex;margin-top:.25rem!important;justify-content:center;cursor:pointer;position:relative;z-index:2}.expand-tags{font-size:1.2rem}\n", ".top-search-input{color:#000!important;border:3px solid #d4d4d4!important;padding:5px 30px!important;border-radius:29px!important}::placeholder{color:#d4d4d4}.vendors-distributor-wrapper{margin-top:5rem!important}.vendor-icon{max-width:180px;max-height:100%;width:100%!important}.vendor-name{font-size:3rem;line-height:3rem;color:var(--text-color, black)}::ng-deep .customPaginator .p-paginator{border:none!important}::ng-deep .customPaginator .p-paginator button{border:none!important}.int-span{text-transform:uppercase;font-size:2.5rem;color:var(--first)}.boxes{width:100%;min-height:150px;display:flex;align-items:center;justify-content:center;text-align:center;padding:15px;border:1px dashed #ccc;border-radius:8px;word-break:break-word;white-space:normal;height:100%}a.vendor-link{display:inline-block;transition:transform .2s ease}a.vendor-link:hover{transform:scale(1.05);cursor:pointer}.search-wrapper{position:relative;width:300px}.search-input{width:100%;padding:10px 20px 10px 40px;border:2px solid #d4d4d4;border-radius:30px;font-size:1rem;color:#000;background-color:#fff}.search-input::placeholder{color:silver}.search-input:focus{outline:none;border-color:var(--first)}.search-icon{position:absolute;top:50%;left:14px;transform:translateY(-50%);color:#d4d4d4;font-size:1.1rem}@media (width <= 768px){.vendor-icon{width:50!important}.search-container{flex-wrap:wrap!important;gap:2rem}.int-span{font-size:1.75rem}}\n"] }]
181
182
  }], ctorParameters: () => [{ type: i1.ResourceService }, { type: i2.TagService }, { type: i0.Injector }], propDecorators: { onWindowScroll: [{
182
183
  type: HostListener,
183
184
  args: ['window:scroll', []]
184
185
  }] } });
185
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLWh1Yi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL3Jlc291cmNlcy1odWIvcmVzb3VyY2VzLWh1Yi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL3Jlc291cmNlcy1odWIvcmVzb3VyY2VzLWh1Yi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBR1IsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQWlCLFNBQVMsRUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBVzVELE1BQU0sT0FBTyxvQkFBcUIsU0FBUSxnQkFBZ0I7SUEwQ3RELFlBQ3FCLGVBQWdDLEVBQ2hDLFVBQXNCLEVBQ3ZDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUpDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBM0NuQyxpQkFBWSxHQUF5QyxJQUFJLENBQUM7UUFFbEUsU0FBSSxHQUFHLEVBQUUsQ0FBQztRQUVWLFVBQUss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QUFvQjtrQkFUaEMsU0FBUzsrQkFDSSxlQUFlLGlCQU1WLGlCQUFpQixDQUFDLElBQUk7b0lBZ0tyQyxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBIb3N0TGlzdGVuZXIsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFnU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuaW1wb3J0IHsgUmVzb3VyY2UsIFRhZywgVE9LRU5fS0VZLCBVc2VyIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5cbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXBvc3RzLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZXMtaHViLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vcmVzb3VyY2VzLWh1Yi5jb21wb25lbnQuc2NzcycsXG4gICAgICAgICcuLi9yZXNvdXJjZS1jb21wYW55LWNhcmQvcmVzb3VyY2UtY29tcGFueS1jYXJkLmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUh1YkNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBkZWxheVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBkYXRhID0gW107XG5cbiAgICBwb3N0czogUmVzb3VyY2VbXSA9IFtdO1xuICAgIHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgICBzZWxlY3RlZFRhZ3MgPSBbXTtcblxuICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICBwYWdlU2l6ZSA9IDIwO1xuICAgIG9iamVjdENvdW50ID0gMDtcblxuICAgIHNlYXJjaFRleHRJdGVtcyA9ICcnO1xuICAgIHNlYXJjaElucHV0ID0gZmFsc2U7XG5cbiAgICByZWFkaW5nVGltZTogbnVtYmVyO1xuXG4gICAgdG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBsb2FkZWQgPSBmYWxzZTtcblxuICAgIG1hc3RlclN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgc3Vic2NyaXB0aW9uSWQ7XG4gICAgdXNlckxvZ2dlZEluOiBib29sZWFuO1xuXG4gICAgc2Nyb2xsTG9ja2VkID0gZmFsc2U7XG5cbiAgICBpY29uQ2xhc3Nlczogc3RyaW5nW10gPSBbXG4gICAgICAgICdmYS1saWdodGJ1bGInLFxuICAgICAgICAnZmEtcm9ja2V0JyxcbiAgICAgICAgJ2ZhLWZpbGUtYWx0JyxcbiAgICAgICAgJ2ZhLXVzZXJzJyxcbiAgICAgICAgJ2ZhLXZpZGVvJyxcbiAgICAgICAgJ2ZhLXBlbmNpbC1hbHQnLFxuICAgICAgICAnZmEtYm9vay1vcGVuJyxcbiAgICAgICAgJ2ZhLWNvZ3MnXG4gICAgXTtcbiAgICB1c2VyOiBVc2VyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VTZXJ2aWNlOiBSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFnU2VydmljZTogVGFnU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoVE9LRU5fS0VZKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlckxvZ2dlZEluID0gISFyZXM7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJCgncHJvZHVjdCcpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8gSlNPTi5wYXJzZShyZXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IGRhdGE/LnN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldFVzZXJJbmZvKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IGRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uSWQgPSB0aGlzLmFwcENvbmZpZy5tYXN0ZXJfc3Vic2NyaXB0aW9uLnN1YnNjcmlwdGlvbl9pZDtcbiAgICAgICAgdGhpcy5nZXRQb3N0c0FuZFRhZ3MoKTtcbiAgICAgICAgdGhpcy5yZWFkaW5nVGltZSA9IDA7XG4gICAgfVxuXG4gICAgZ2V0UG9zdHNBbmRUYWdzKCkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICBmb3JrSm9pbih7XG4gICAgICAgICAgICByZXNQb3N0czogdGhpcy5yZXNvdXJjZVNlcnZpY2UuZ2V0UHVibGljUG9zdHMoXG4gICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0SXRlbXNcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICByZXNUYWdzOiB0aGlzLnRhZ1NlcnZpY2UuZ2V0VGFnc0J5VHlwZShcbiAgICAgICAgICAgICAgICAncG9zdF9jYXRlZ29yaWVzJyxcbiAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID8/IHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIClcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RzID0gcmVzPy5yZXNQb3N0cz8ucG9zdHM7XG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RDb3VudCA9IHJlcz8ucmVzUG9zdHMub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlcz8ucmVzUG9zdHM/LnBvc3RzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlcz8ucmVzUG9zdHM/LnBvc3RzLm1hcChwb3N0ID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnBvc3QsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkVGFnczogZmFsc2VcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHMgPSB0aGlzLnBvc3RzPy5sZW5ndGg7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRhZ3MgPSByZXM/LnJlc1RhZ3M/LnRhZ3M/LmZpbHRlcih0YWcgPT4gdGFnLnZpc2libGVfaW5fcmVzb3VyY2VzKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhZ3MgPSB0aGlzLnRhZ3MubWFwKHRhZyA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi50YWdcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkZWQgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50LCBwb3N0KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBwb3N0LnNob3dEcm9wZG93biA9ICFwb3N0LnNob3dEcm9wZG93bjtcbiAgICB9XG5cbiAgICBnZXRQb3N0cyhwYWdlOiBudW1iZXIsIHBhZ2VTaXplOiBudW1iZXIsIGZldGNoQWxsID0gZmFsc2UsIGFwcGVuZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChmZXRjaEFsbCkgdGhpcy5zZWxlY3RlZFRhZ3MgPSBbXTtcblxuICAgICAgICBpZiAoIWFwcGVuZCkge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubG9hZGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0YWdDYXRlZ29yeVBhcmFtID0gdGhpcy5zZWxlY3RlZFRhZ3MubWFwKHRhZyA9PiB0YWcudGFnX2NhdGVnb3J5X2lkKS5qb2luKCcsJyk7XG5cbiAgICAgICAgdGhpcy5yZXNvdXJjZVNlcnZpY2VcbiAgICAgICAgICAgIC5nZXRQdWJsaWNQb3N0cyhcbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlclN1YnNjcmlwdGlvbklkLFxuICAgICAgICAgICAgICAgIHBhZ2UsXG4gICAgICAgICAgICAgICAgYXBwZW5kID8gMTAgOiBwYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFRleHRJdGVtcyxcbiAgICAgICAgICAgICAgICB0YWdDYXRlZ29yeVBhcmFtXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9iamVjdENvdW50ID0gcmVzcG9uc2Uub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgICAgIHRoaXMucG9zdHMgPSBhcHBlbmQgPyBbLi4udGhpcy5wb3N0cywgLi4ucmVzcG9uc2UucG9zdHNdIDogcmVzcG9uc2UucG9zdHM7XG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gWy4uLnRoaXMucG9zdHNdO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wb3N0cz8ubGVuZ3RoO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU2VhcmNoKHNlY29uZHM6IG51bWJlcikge1xuICAgICAgICBsZXQgZGVsYXkgPSAwO1xuICAgICAgICBkZWxheSA9IHNlY29uZHMgKiAxMDAwO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWxheVRpbWVvdXQpO1xuICAgICAgICBjb25zdCBkZWxheVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5nZXRQb3N0cygxLCB0aGlzLnBhZ2VTaXplKTtcbiAgICAgICAgfSwgZGVsYXkpO1xuXG4gICAgICAgIHRoaXMuZGVsYXlUaW1lb3V0ID0gZGVsYXlUaW1lb3V0O1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9UYWdMaXN0KCk6IHZvaWQge1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLm5hdmlnYXRlVG9UYWdMaXN0KCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICAgIG9uV2luZG93U2Nyb2xsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHdpbmRvdy5zY3JvbGxZICsgd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICBjb25zdCBwYWdlSGVpZ2h0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodDtcblxuICAgICAgICBjb25zdCBuZWFyQm90dG9tID0gc2Nyb2xsUG9zaXRpb24gPj0gcGFnZUhlaWdodCAtIDEwMDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBuZWFyQm90dG9tICYmXG4gICAgICAgICAgICB0aGlzLnBvc3RzLmxlbmd0aCA8IHRoaXMub2JqZWN0Q291bnQgJiZcbiAgICAgICAgICAgICF0aGlzLmxvYWRpbmcgJiZcbiAgICAgICAgICAgICF0aGlzLnNjcm9sbExvY2tlZFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsTG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgKz0gMTtcblxuICAgICAgICAgICAgdGhpcy5nZXRQb3N0cyh0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLnBhZ2VTaXplLCBmYWxzZSwgdHJ1ZSk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTZWxlY3RlZCh0YWdJZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkVGFncy5tYXAodGFnID0+IHRhZy5pZCkuaW5jbHVkZXModGFnSWQpO1xuICAgIH1cblxuICAgIHRhZ1Bvc3Qoc2VsZWN0ZWRUYWcpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnNlbGVjdGVkVGFncy5maW5kSW5kZXgoXG4gICAgICAgICAgICB0YWcgPT4gdGFnLnRhZ19jYXRlZ29yeV9pZCA9PT0gc2VsZWN0ZWRUYWc/LnRhZ19jYXRlZ29yeV9pZCAmJiB0YWcuaWQgPT09IHNlbGVjdGVkVGFnLmlkXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhZ3MucHVzaCh7XG4gICAgICAgICAgICAgICAgdGFnX2NhdGVnb3J5X2lkOiBzZWxlY3RlZFRhZz8udGFnX2NhdGVnb3J5X2lkLFxuICAgICAgICAgICAgICAgIGlkOiBzZWxlY3RlZFRhZy5pZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkVGFncy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0UG9zdHMoMSwgdGhpcy5wYWdlU2l6ZSk7XG4gICAgfVxuXG4gICAgdGhpc1Bvc3RSZWFkaW5nVGltZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgY29uc3Qgd29yZHNQZXJNaW51dGUgPSAyMDA7XG4gICAgICAgICAgICBjb25zdCBub09mV29yZHMgPSB0ZXh0LnNwbGl0KC9cXHMvZykubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3QgbWludXRlcyA9IG5vT2ZXb3JkcyAvIHdvcmRzUGVyTWludXRlO1xuICAgICAgICAgICAgY29uc3QgcmVhZFRpbWUgPSBNYXRoLmNlaWwobWludXRlcyk7XG5cbiAgICAgICAgICAgIHJldHVybiBgJHtyZWFkVGltZX0gbWludXRlIHJlYWRgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxwdy1yZXNvdXJjZS1oZWFkZXI+PC9wdy1yZXNvdXJjZS1oZWFkZXI+XG48ZGl2IGNsYXNzPVwiYWxsLXBvc3RzIHB5LTVcIj5cblxuICA8ZGl2IGNsYXNzPVwicm93IG10LTEgbWItNCBweC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgbXQtMCBtdC1zbS0zIGQtZmxleFwiPlxuICAgICAgICA8aSAqbmdJZj1cInVzZXJMb2dnZWRJbiAmJiB1c2VyPy5hdXRoPy5ncmFudGVkWydQYWdlcy5TdXBlckFkbWluJ11cIlxuICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGN1cnNvci1wb2ludGVyIG10LTIgbWUtM1wiXG4gICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1RhZ0xpc3QoKVwiXG4gICAgICB0aXRsZT1cIkVkaXQgTG9nb1wiPjwvaT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggc2VhcmNoLWljb25cIj48L2k+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0SXRlbXNcIiBwSW5wdXRUZXh0IHNpemU9XCI1MFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHJlc291cmNlcy4uLlwiXG4gICAgICAgIChpbnB1dCk9XCJvblNlYXJjaCgxKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dCB0b3Atc2VhcmNoLWlucHV0XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJyb3cgcmVzb3VyY2Utcm93XCI+XG4gICAgPCEtLSBBbGwgUmVzb3VyY2VzIENhcmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS02IG1iLTRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZXNvdXJjZS1jYXJkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0zXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZ2V0UG9zdHMoMSwgMjAsIHRydWUpXCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQnOiBzZWxlY3RlZFRhZ3MubGVuZ3RoID09PSAwIH1cIlxuICAgICAgICAgICAoY2xpY2spPVwiZ2V0UG9zdHMoMSwgMjAsIHRydWUpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGF5ZXItZ3JvdXAgcmVzb3VyY2UtaWNvbiBtZS0zXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJlc291cmNlLXRleHRcIj5BbGwgUmVzb3VyY2VzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIER5bmFtaWMgVGFncyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTYgbWItNFwiXG4gICAgICAgICAqbmdGb3I9XCJsZXQgdGFnIG9mIHRhZ3NcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZS1jYXJkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0zXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidGFnUG9zdCh0YWcpXCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQnOiBpc1NlbGVjdGVkKHRhZy5pZCkgfVwiXG4gICAgICAgICAgIChjbGljayk9XCJ0YWdQb3N0KHRhZylcIj5cbiAgICAgICAgICAgPGkgKm5nSWY9XCJ0YWc/Lmljb25fbmFtZVwiIGNsYXNzPVwiZmFcIiBbbmdDbGFzc109XCJ0YWcuaWNvbl9uYW1lICsgJyByZXNvdXJjZS1pY29uIG1lLTMnXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJlc291cmNlLXRleHRcIj57eyB0YWcubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcgJiYgIWxvYWRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicG9zdHM/Lmxlbmd0aCAmJiAhbG9hZGluZ1wiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYmxvZy1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNCBtYi01IG1zLTEgbWUtMSBibG9nLWxpc3RpbmdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwb3N0IG9mIGRhdGFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTEyIGNvbC14cy0xMiBteS1hdXRvXCI+XG4gICAgICAgICAgICA8cHctcmVzb3VyY2UtZWRpdC1jYXJkXG4gICAgICAgICAgICAgICpuZ0lmPVwidXNlckxvZ2dlZEluICYmIHVzZXI/LmF1dGg/LmdyYW50ZWRbJ1BhZ2VzLkFkbWluJ11cIlxuICAgICAgICAgICAgICBbaWRdPVwicG9zdD8uaWRcIlxuICAgICAgICAgICAgICBbcmVzb3VyY2VEYXRhXT1cInBvc3RcIlxuICAgICAgICAgICAgICAodXBkYXRlZCk9XCJnZXRQb3N0cygxLCBwYWdlU2l6ZSlcIj5cbiAgICAgICAgICAgIDwvcHctcmVzb3VyY2UtZWRpdC1jYXJkPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtYmxvZy1pbWFnZVwiIFtyb3V0ZXJMaW5rXT1cIlsnL3Jlc291cmNlcy92aWV3JywgcG9zdC5zbHVnXVwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicG9zdC5waWN0dXJlPy51cmxcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlBvc3QgTGlzdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS0xMiBjb2wteHMtMTIgcHgtNCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1kaXZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dGhvciBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWltYWdlXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbYXR0ci5kaXNhYmxlZF09XCIhdXNlckxvZ2dlZEluXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIHBvc3Q/LmF1dGhvcj8uc2x1Z11cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInBvc3QuYXV0aG9yPy5hdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicG9zdC5hdXRob3I/LmF2YXRhclswXT8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJBdXRob3JcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiIXBvc3QuYXV0aG9yPy5hdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi9hc3NldHMvaW1nL2ljb25zL21hbGUucG5nXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJBdXRob3JcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVmYXVsdC11c2VyLWltYWdlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRob3ItbmFtZSBwcy0yXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbYXR0ci5kaXNhYmxlZF09XCIhdXNlckxvZ2dlZEluXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIHBvc3Q/LmF1dGhvcj8uc2x1Z11cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcG9zdC5hdXRob3IuZmlyc3RfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jcm93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcG9zdC5wdWJsaXNoZWRfYXQgfCBkYXRlOiAnZGQvTU0veXl5eScgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaT4uPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCI+e3sgdGhpc1Bvc3RSZWFkaW5nVGltZShwb3N0LmJvZHkpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhcmUtcG9zdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKGNsaWNrT3V0c2lkZSk9XCJwb3N0LnNob3dEcm9wZG93biA9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHJlZS1kb3RzLXdyYXBwZXJcIiAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50LCBwb3N0KVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQsIHBvc3QpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWxsaXBzaXMtdlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgc2hvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb3N0LnNob3dEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHA6Ly93d3cuZmFjZWJvb2suY29tL1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2hhcmVcIj48L2k+IFNoYXJlIFBvc3RcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoNCBbcm91dGVyTGlua109XCJbJy9yZXNvdXJjZXMvdmlldycsIHBvc3Quc2x1Z11cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGl0bGUgbXktM1wiPnt7IHBvc3QudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICA8cCBbcm91dGVyTGlua109XCJbJy9yZXNvdXJjZXMvdmlldycsIHBvc3Quc2x1Z11cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9keSBtYi0zIHBiLTMgcG9zdC1ib2R5LXRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyBwb3N0LmJvZHkgfCByZW1vdmVIdG1sOiAncXVpbGwnIHwgdGV4dFRydW5jYXRlOiAyMDAgfX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXQtYXV0byBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvc3Q/LnRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvc3Q/LnRhZ3M/LnNsaWNlKDAsIDQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgbS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IHBvc3Q/LnRhZ3MsIGl0ZW06IHRhZyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yQnlOYW1lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YU5hbWVdPVwidGFnLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImJsdWUtZ3JleVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHRhZy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicG9zdC5leHBhbmRlZFRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvc3Q/LnRhZ3M/LnNsaWNlKDQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBtLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBwb3N0Py50YWdzLCBpdGVtOiB0YWcgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yQnlOYW1lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhTmFtZV09XCJ0YWcubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJibHVlLWdyZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRhZy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvc3Q/LnRhZ3M/Lmxlbmd0aCA+IDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvc3QuZXhwYW5kZWRUYWdzID0gIXBvc3QuZXhwYW5kZWRUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInBvc3QuZXhwYW5kZWRUYWdzID0gIXBvc3QuZXhwYW5kZWRUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCBjdXJzb3ItcG9pbnRlciBtLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJmb250LXNpemU6IDEuMnJlbTtcIj4uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2ctdmlldyBweS0zIGJsb2ctbGlzdC13cml0ZS12aWV3XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bGk+e3sgcG9zdC52aWV3ICE9PSBudWxsID8gcG9zdC52aWV3IDogJzAnIH19IFZpZXc8L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpPjxhIFtyb3V0ZXJMaW5rXT1cIlsnL3Jlc291cmNlcy92aWV3JywgcG9zdC5zbHVnXVwiPldyaXRlIENvbW1lbnQ8L2E+PC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvcmVzb3VyY2VzL3ZpZXcnLCBwb3N0LnNsdWddXCIgYXJpYS1sYWJlbD1cIkJsb2dcIj48aSBjbGFzcz1cImZhciBmYS1oZWFydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcG9zdHM/Lmxlbmd0aCAmJiBsb2FkZWRcIj5cbiAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBtZXNzYWdlPVwiV2UgY291bGRuJ3QgZmluZCBhbnkgcmVzb3VyY2VzLlwiID4gPC9wdy1uby1kYXRhPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLWh1Yi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL3Jlc291cmNlcy1odWIvcmVzb3VyY2VzLWh1Yi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Jlc291cmNlLW1vZHVsZS9zcmMvbGliL3B1YmxpYy9jb21wb25lbnRzL3Jlc291cmNlcy1odWIvcmVzb3VyY2VzLWh1Yi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULFlBQVksRUFDWixRQUFRLEVBR1IsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQWlCLFNBQVMsRUFBUSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV6RCxPQUFPLEVBQUUsUUFBUSxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7OztBQVc1RCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZ0JBQWdCO0lBMkN0RCxZQUNxQixlQUFnQyxFQUNoQyxVQUFzQixFQUN2QyxRQUFrQjtRQUVsQixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFKQyxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQTVDbkMsaUJBQVksR0FBeUMsSUFBSSxDQUFDO1FBR2xFLFNBQUksR0FBRyxFQUFFLENBQUM7UUFFVixVQUFL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QUN4QixDQUFDOytHQTNOUSxvQkFBb0I7bUdBQXBCLG9CQUFvQiwwSUMzQmpDLDgzUEFxTEE7OzRGRDFKYSxvQkFBb0I7a0JBVGhDLFNBQVM7K0JBQ0ksZUFBZSxpQkFNVixpQkFBaUIsQ0FBQyxJQUFJO29JQWdLckMsY0FBYztzQkFEYixZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdG9yLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFRhZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IFJlc291cmNlLCBUYWcsIFRPS0VOX0tFWSwgVXNlciB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuXG5pbXBvcnQgeyBmb3JrSm9pbiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFJlc291cmNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3Jlc291cmNlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LXBvc3RzLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZXMtaHViLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFtcbiAgICAgICAgJy4vcmVzb3VyY2VzLWh1Yi5jb21wb25lbnQuc2NzcycsXG4gICAgICAgICcuLi9yZXNvdXJjZS1jb21wYW55LWNhcmQvcmVzb3VyY2UtY29tcGFueS1jYXJkLmNvbXBvbmVudC5zY3NzJ1xuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUh1YkNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSBkZWxheVRpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gICAgcHJpdmF0ZSB1c2VyU3ViOiBTdWJzY3JpcHRpb247XG5cbiAgICBkYXRhID0gW107XG5cbiAgICBwb3N0czogUmVzb3VyY2VbXSA9IFtdO1xuICAgIHRhZ3M6IFRhZ1tdID0gW107XG5cbiAgICBzZWxlY3RlZFRhZ3MgPSBbXTtcblxuICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICBwYWdlU2l6ZSA9IDIwO1xuICAgIG9iamVjdENvdW50ID0gMDtcblxuICAgIHNlYXJjaFRleHRJdGVtcyA9ICcnO1xuICAgIHNlYXJjaElucHV0ID0gZmFsc2U7XG5cbiAgICByZWFkaW5nVGltZTogbnVtYmVyO1xuXG4gICAgdG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBsb2FkaW5nID0gdHJ1ZTtcbiAgICBsb2FkZWQgPSBmYWxzZTtcblxuICAgIG1hc3RlclN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG4gICAgc3Vic2NyaXB0aW9uSWQ7XG4gICAgdXNlckxvZ2dlZEluOiBib29sZWFuO1xuXG4gICAgc2Nyb2xsTG9ja2VkID0gZmFsc2U7XG5cbiAgICBpY29uQ2xhc3Nlczogc3RyaW5nW10gPSBbXG4gICAgICAgICdmYS1saWdodGJ1bGInLFxuICAgICAgICAnZmEtcm9ja2V0JyxcbiAgICAgICAgJ2ZhLWZpbGUtYWx0JyxcbiAgICAgICAgJ2ZhLXVzZXJzJyxcbiAgICAgICAgJ2ZhLXZpZGVvJyxcbiAgICAgICAgJ2ZhLXBlbmNpbC1hbHQnLFxuICAgICAgICAnZmEtYm9vay1vcGVuJyxcbiAgICAgICAgJ2ZhLWNvZ3MnXG4gICAgXTtcbiAgICB1c2VyOiBVc2VyO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VTZXJ2aWNlOiBSZXNvdXJjZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdGFnU2VydmljZTogVGFnU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSQoVE9LRU5fS0VZKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlckxvZ2dlZEluID0gISFyZXM7XG4gICAgICAgICAgICBpZiAodGhpcy51c2VyTG9nZ2VkSW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsU3RvcmFnZS5nZXRJdGVtJCgncHJvZHVjdCcpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzID8gSlNPTi5wYXJzZShyZXMpIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IGRhdGE/LnN1YnNjcmlwdGlvbklkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlclN1YiA9IHRoaXMudXNlclNlcnZpY2UuZ2V0VXNlckluZm8oKS5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlciA9IGRhdGE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1hc3RlclN1YnNjcmlwdGlvbklkID0gdGhpcy5hcHBDb25maWcubWFzdGVyX3N1YnNjcmlwdGlvbi5zdWJzY3JpcHRpb25faWQ7XG4gICAgICAgIHRoaXMuZ2V0UG9zdHNBbmRUYWdzKCk7XG4gICAgICAgIHRoaXMucmVhZGluZ1RpbWUgPSAwO1xuICAgIH1cblxuICAgIGdldFBvc3RzQW5kVGFncygpIHtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5sb2FkZWQgPSBmYWxzZTtcbiAgICAgICAgZm9ya0pvaW4oe1xuICAgICAgICAgICAgcmVzUG9zdHM6IHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFB1YmxpY1Bvc3RzKFxuICAgICAgICAgICAgICAgIHRoaXMubWFzdGVyU3Vic2NyaXB0aW9uSWQsXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgICAgICAgICAgICB0aGlzLnBhZ2VTaXplLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGV4dEl0ZW1zXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgcmVzVGFnczogdGhpcy50YWdTZXJ2aWNlLmdldFRhZ3NCeVR5cGUoXG4gICAgICAgICAgICAgICAgJ3Bvc3RfY2F0ZWdvcmllcycsXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA/PyB0aGlzLm1hc3RlclN1YnNjcmlwdGlvbklkXG4gICAgICAgICAgICApXG4gICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0cyA9IHJlcz8ucmVzUG9zdHM/LnBvc3RzO1xuICAgICAgICAgICAgICAgIHRoaXMub2JqZWN0Q291bnQgPSByZXM/LnJlc1Bvc3RzLm9iamVjdF9jb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXM/LnJlc1Bvc3RzPy5wb3N0cztcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEgPSByZXM/LnJlc1Bvc3RzPy5wb3N0cy5tYXAocG9zdCA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAuLi5wb3N0LFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRlZFRhZ3M6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5wb3N0cz8ubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgdGhpcy50YWdzID0gcmVzPy5yZXNUYWdzPy50YWdzPy5maWx0ZXIodGFnID0+IHRhZy52aXNpYmxlX2luX3Jlc291cmNlcyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWdzID0gdGhpcy50YWdzLm1hcCh0YWcgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgLi4udGFnXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvZ2dsZURyb3Bkb3duKGV2ZW50OiBFdmVudCwgcG9zdCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcG9zdC5zaG93RHJvcGRvd24gPSAhcG9zdC5zaG93RHJvcGRvd247XG4gICAgfVxuXG4gICAgZ2V0UG9zdHMocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyLCBmZXRjaEFsbCA9IGZhbHNlLCBhcHBlbmQgPSBmYWxzZSkge1xuICAgICAgICBpZiAoZmV0Y2hBbGwpIHRoaXMuc2VsZWN0ZWRUYWdzID0gW107XG5cbiAgICAgICAgaWYgKCFhcHBlbmQpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmxvYWRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFnQ2F0ZWdvcnlQYXJhbSA9IHRoaXMuc2VsZWN0ZWRUYWdzLm1hcCh0YWcgPT4gdGFnLnRhZ19jYXRlZ29yeV9pZCkuam9pbignLCcpO1xuXG4gICAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHVibGljUG9zdHMoXG4gICAgICAgICAgICAgICAgdGhpcy5tYXN0ZXJTdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICAgIGFwcGVuZCA/IDEwIDogcGFnZVNpemUsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXh0SXRlbXMsXG4gICAgICAgICAgICAgICAgdGFnQ2F0ZWdvcnlQYXJhbVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYmplY3RDb3VudCA9IHJlc3BvbnNlLm9iamVjdF9jb3VudDtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RzID0gYXBwZW5kID8gWy4uLnRoaXMucG9zdHMsIC4uLnJlc3BvbnNlLnBvc3RzXSA6IHJlc3BvbnNlLnBvc3RzO1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IFsuLi50aGlzLnBvc3RzXTtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMucG9zdHM/Lmxlbmd0aDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblNlYXJjaChzZWNvbmRzOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGRlbGF5ID0gMDtcbiAgICAgICAgZGVsYXkgPSBzZWNvbmRzICogMTAwMDtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVsYXlUaW1lb3V0KTtcbiAgICAgICAgY29uc3QgZGVsYXlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMuZ2V0UG9zdHMoMSwgdGhpcy5wYWdlU2l6ZSk7XG4gICAgICAgIH0sIGRlbGF5KTtcblxuICAgICAgICB0aGlzLmRlbGF5VGltZW91dCA9IGRlbGF5VGltZW91dDtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZVRvVGFnTGlzdCgpOiB2b2lkIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5uYXZpZ2F0ZVRvVGFnTGlzdCgpO1xuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSlcbiAgICBvbldpbmRvd1Njcm9sbCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsUG9zaXRpb24gPSB3aW5kb3cuc2Nyb2xsWSArIHdpbmRvdy5pbm5lckhlaWdodDtcbiAgICAgICAgY29uc3QgcGFnZUhlaWdodCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQ7XG5cbiAgICAgICAgY29uc3QgbmVhckJvdHRvbSA9IHNjcm9sbFBvc2l0aW9uID49IHBhZ2VIZWlnaHQgLSAxMDA7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbmVhckJvdHRvbSAmJlxuICAgICAgICAgICAgdGhpcy5wb3N0cy5sZW5ndGggPCB0aGlzLm9iamVjdENvdW50ICYmXG4gICAgICAgICAgICAhdGhpcy5sb2FkaW5nICYmXG4gICAgICAgICAgICAhdGhpcy5zY3JvbGxMb2NrZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbExvY2tlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlICs9IDE7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0UG9zdHModGhpcy5jdXJyZW50UGFnZSwgdGhpcy5wYWdlU2l6ZSwgZmFsc2UsIHRydWUpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbExvY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQodGFnSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFRhZ3MubWFwKHRhZyA9PiB0YWcuaWQpLmluY2x1ZGVzKHRhZ0lkKTtcbiAgICB9XG5cbiAgICB0YWdQb3N0KHNlbGVjdGVkVGFnKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5zZWxlY3RlZFRhZ3MuZmluZEluZGV4KFxuICAgICAgICAgICAgdGFnID0+IHRhZy50YWdfY2F0ZWdvcnlfaWQgPT09IHNlbGVjdGVkVGFnPy50YWdfY2F0ZWdvcnlfaWQgJiYgdGFnLmlkID09PSBzZWxlY3RlZFRhZy5pZFxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRhZ19jYXRlZ29yeV9pZDogc2VsZWN0ZWRUYWc/LnRhZ19jYXRlZ29yeV9pZCxcbiAgICAgICAgICAgICAgICBpZDogc2VsZWN0ZWRUYWcuaWRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmdldFBvc3RzKDEsIHRoaXMucGFnZVNpemUpO1xuICAgIH1cblxuICAgIHRoaXNQb3N0UmVhZGluZ1RpbWUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzUGVyTWludXRlID0gMjAwO1xuICAgICAgICAgICAgY29uc3Qgbm9PZldvcmRzID0gdGV4dC5zcGxpdCgvXFxzL2cpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBub09mV29yZHMgLyB3b3Jkc1Blck1pbnV0ZTtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRUaW1lID0gTWF0aC5jZWlsKG1pbnV0ZXMpO1xuXG4gICAgICAgICAgICByZXR1cm4gYCR7cmVhZFRpbWV9IG1pbnV0ZSByZWFkYDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51c2VyU3ViPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxwdy1yZXNvdXJjZS1oZWFkZXI+PC9wdy1yZXNvdXJjZS1oZWFkZXI+XG48ZGl2IGNsYXNzPVwiYWxsLXBvc3RzIHB5LTVcIj5cblxuICA8ZGl2IGNsYXNzPVwicm93IG10LTEgbWItNCBweC0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmQgbXQtMCBtdC1zbS0zIGQtZmxleFwiPlxuICAgICAgICA8aSAqbmdJZj1cInVzZXJMb2dnZWRJbiAmJiB1c2VyPy5hdXRoPy5ncmFudGVkWydQYWdlcy5TdXBlckFkbWluJ11cIlxuICAgICAgY2xhc3M9XCJmYSBmYS1lZGl0IGluLXBhZ2UtZWRpdC1pY29uIGN1cnNvci1wb2ludGVyIG10LTIgbWUtM1wiXG4gICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1RhZ0xpc3QoKVwiXG4gICAgICB0aXRsZT1cIkVkaXQgTG9nb1wiPjwvaT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggc2VhcmNoLWljb25cIj48L2k+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0SXRlbXNcIiBwSW5wdXRUZXh0IHNpemU9XCI1MFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIHJlc291cmNlcy4uLlwiXG4gICAgICAgIChpbnB1dCk9XCJvblNlYXJjaCgxKVwiXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dCB0b3Atc2VhcmNoLWlucHV0XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJyb3cgcmVzb3VyY2Utcm93XCI+XG4gICAgPCEtLSBBbGwgUmVzb3VyY2VzIENhcmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS02IG1iLTRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZXNvdXJjZS1jYXJkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0zXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZ2V0UG9zdHMoMSwgMjAsIHRydWUpXCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQnOiBzZWxlY3RlZFRhZ3MubGVuZ3RoID09PSAwIH1cIlxuICAgICAgICAgICAoY2xpY2spPVwiZ2V0UG9zdHMoMSwgMjAsIHRydWUpXCI+XG4gICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGF5ZXItZ3JvdXAgcmVzb3VyY2UtaWNvbiBtZS0zXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJlc291cmNlLXRleHRcIj5BbGwgUmVzb3VyY2VzPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIER5bmFtaWMgVGFncyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTYgbWItNFwiXG4gICAgICAgICAqbmdGb3I9XCJsZXQgdGFnIG9mIHRhZ3NcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgICAgY2xhc3M9XCJyZXNvdXJjZS1jYXJkIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgcC0zXCJcbiAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidGFnUG9zdCh0YWcpXCJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnc2VsZWN0ZWQnOiBpc1NlbGVjdGVkKHRhZy5pZCkgfVwiXG4gICAgICAgICAgIChjbGljayk9XCJ0YWdQb3N0KHRhZylcIj5cbiAgICAgICAgICAgPGkgKm5nSWY9XCJ0YWc/Lmljb25fbmFtZVwiIGNsYXNzPVwiZmFcIiBbbmdDbGFzc109XCJ0YWcuaWNvbl9uYW1lICsgJyByZXNvdXJjZS1pY29uIG1lLTMnXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInJlc291cmNlLXRleHRcIj57eyB0YWcubmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImxvYWRpbmcgJiYgIWxvYWRlZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCI+XG4gICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3Ryb2tlV2lkdGg9XCIyXCI+IDwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwicG9zdHM/Lmxlbmd0aCAmJiAhbG9hZGluZ1wiPlxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiYmxvZy1saXN0XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtNCBtYi01IG1zLTEgbWUtMSBibG9nLWxpc3RpbmdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBwb3N0IG9mIGRhdGFcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTEyIGNvbC14cy0xMiBteS1hdXRvXCI+XG4gICAgICAgICAgICA8cHctcmVzb3VyY2UtZWRpdC1jYXJkXG4gICAgICAgICAgICAgICpuZ0lmPVwidXNlckxvZ2dlZEluICYmIHVzZXI/LmF1dGg/LmdyYW50ZWRbJ1BhZ2VzLkFkbWluJ11cIlxuICAgICAgICAgICAgICBbaWRdPVwicG9zdD8uaWRcIlxuICAgICAgICAgICAgICBbcmVzb3VyY2VEYXRhXT1cInBvc3RcIlxuICAgICAgICAgICAgICAodXBkYXRlZCk9XCJnZXRQb3N0cygxLCBwYWdlU2l6ZSlcIj5cbiAgICAgICAgICAgIDwvcHctcmVzb3VyY2UtZWRpdC1jYXJkPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtYmxvZy1pbWFnZVwiIFtyb3V0ZXJMaW5rXT1cIlsnL3Jlc291cmNlcy92aWV3JywgcG9zdC5zbHVnXVwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwicG9zdC5waWN0dXJlPy51cmxcIlxuICAgICAgICAgICAgICAgIGFsdD1cIlBvc3QgTGlzdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctZmx1aWRcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS0xMiBjb2wteHMtMTIgcHgtNCBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhZy1kaXZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dGhvciBkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWltYWdlXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbYXR0ci5kaXNhYmxlZF09XCIhdXNlckxvZ2dlZEluXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIHBvc3Q/LmF1dGhvcj8uc2x1Z11cIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cInBvc3QuYXV0aG9yPy5hdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicG9zdC5hdXRob3I/LmF2YXRhclswXT8udXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJBdXRob3JcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiIXBvc3QuYXV0aG9yPy5hdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIHNyYz1cIi9hc3NldHMvaW1nL2ljb25zL21hbGUucG5nXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJBdXRob3JcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVmYXVsdC11c2VyLWltYWdlXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRob3ItbmFtZSBwcy0yXCI+XG4gICAgICAgICAgICAgICAgICA8YSBbYXR0ci5kaXNhYmxlZF09XCIhdXNlckxvZ2dlZEluXCJcbiAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWVtYmVycycsIHBvc3Q/LmF1dGhvcj8uc2x1Z11cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgcG9zdC5hdXRob3IuZmlyc3RfbmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jcm93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgICA8dWw+XG4gICAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcG9zdC5wdWJsaXNoZWRfYXQgfCBkYXRlOiAnZGQvTU0veXl5eScgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgICAgIDxsaT4uPC9saT5cbiAgICAgICAgICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCI+e3sgdGhpc1Bvc3RSZWFkaW5nVGltZShwb3N0LmJvZHkpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hhcmUtcG9zdFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duIHBvc2l0aW9uLXJlbGF0aXZlIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCIgKGNsaWNrT3V0c2lkZSk9XCJwb3N0LnNob3dEcm9wZG93biA9IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHJlZS1kb3RzLXdyYXBwZXJcIiAgKGtleWRvd24uZW50ZXIpPVwidG9nZ2xlRHJvcGRvd24oJGV2ZW50LCBwb3N0KVwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQsIHBvc3QpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZWxsaXBzaXMtdlwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgc2hvd1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwb3N0LnNob3dEcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHA6Ly93d3cuZmFjZWJvb2suY29tL1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgcmVsPVwibm9vcGVuZXIgbm9yZWZlcnJlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2hhcmVcIj48L2k+IFNoYXJlIFBvc3RcbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxoNCBbcm91dGVyTGlua109XCJbJy9yZXNvdXJjZXMvdmlldycsIHBvc3Quc2x1Z11cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidGl0bGUgbXktM1wiPnt7IHBvc3QudGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgICA8cCBbcm91dGVyTGlua109XCJbJy9yZXNvdXJjZXMvdmlldycsIHBvc3Quc2x1Z11cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYm9keSBtYi0zIHBiLTMgcG9zdC1ib2R5LXRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyBwb3N0LmJvZHkgfCByZW1vdmVIdG1sOiAncXVpbGwnIHwgdGV4dFRydW5jYXRlOiAyMDAgfX1cbiAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbXQtYXV0byBtYi0zXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBvc3Q/LnRhZ3M/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvc3Q/LnRhZ3M/LnNsaWNlKDAsIDQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgbS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IHBvc3Q/LnRhZ3MsIGl0ZW06IHRhZyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yQnlOYW1lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YU5hbWVdPVwidGFnLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImJsdWUtZ3JleVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHRhZy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicG9zdC5leHBhbmRlZFRhZ3NcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFnIG9mIHBvc3Q/LnRhZ3M/LnNsaWNlKDQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBtLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBwb3N0Py50YWdzLCBpdGVtOiB0YWcgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yQnlOYW1lXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhTmFtZV09XCJ0YWcubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJibHVlLWdyZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRhZy5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInBvc3Q/LnRhZ3M/Lmxlbmd0aCA+IDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvc3QuZXhwYW5kZWRUYWdzID0gIXBvc3QuZXhwYW5kZWRUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInBvc3QuZXhwYW5kZWRUYWdzID0gIXBvc3QuZXhwYW5kZWRUYWdzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCBjdXJzb3ItcG9pbnRlciBtLTEgZXhwYW5kLXRhZ3NcIj4uLi48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2ctdmlldyBweS0zIGJsb2ctbGlzdC13cml0ZS12aWV3XCI+XG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICAgICAgICA8bGk+e3sgcG9zdC52aWV3ICE9PSBudWxsID8gcG9zdC52aWV3IDogJzAnIH19IFZpZXc8L2xpPlxuICAgICAgICAgICAgICAgICAgPGxpPjxhIFtyb3V0ZXJMaW5rXT1cIlsnL3Jlc291cmNlcy92aWV3JywgcG9zdC5zbHVnXVwiPldyaXRlIENvbW1lbnQ8L2E+PC9saT5cbiAgICAgICAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvcmVzb3VyY2VzL3ZpZXcnLCBwb3N0LnNsdWddXCIgYXJpYS1sYWJlbD1cIkJsb2dcIj48aSBjbGFzcz1cImZhciBmYS1oZWFydFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhcG9zdHM/Lmxlbmd0aCAmJiBsb2FkZWRcIj5cbiAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBtZXNzYWdlPVwiV2UgY291bGRuJ3QgZmluZCBhbnkgcmVzb3VyY2VzLlwiID4gPC9wdy1uby1kYXRhPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19