tango-app-ui-manage-users 3.7.0-alpha.8 → 3.7.1-alpha.0

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.
@@ -636,7 +636,7 @@ export class BrandUserComponent {
636
636
  this.toastService.getSuccessToast(`Stores Assigned to User Successfully!`);
637
637
  }
638
638
  else {
639
- this.toastService.getErrorToast(`Unable to assign Stores to user!`);
639
+ this.toastService.getErrorToast(`Unable to Assign Stores to User!`);
640
640
  }
641
641
  this.modalService.dismissAll('submit');
642
642
  },
@@ -799,11 +799,11 @@ export class BrandUserComponent {
799
799
  });
800
800
  }
801
801
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrandUserComponent, deps: [{ token: i1.NgbModal }, { token: i2.PageInfoService }, { token: i0.ChangeDetectorRef }, { token: i3.ExcelService }, { token: i2.GlobalStateService }, { token: i4.ToastService }, { token: i5.UserService }, { token: i6.Router }, { token: i6.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
802
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BrandUserComponent, selector: "lib-brand-user", outputs: { dataToParent: "dataToParent" }, viewQueries: [{ propertyName: "bulkUpload", first: true, predicate: ["bulkUpload"], descendants: true }, { propertyName: "inputFile1", first: true, predicate: ["inputFile1"], descendants: true }, { propertyName: "afterValidation", first: true, predicate: ["afterValidation"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"receivedData !=='Role Value'\">\r\n <div class=\"\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n </h3>\r\n <div class=\"card-toolbar rightcorner \">\r\n <div *ngIf=\"!createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" class=\"form-control ps-14 me-2\"\r\n name=\"search\" autocomplete=\"off\" placeholder=\"Search\" autocomplete=\"off\" />\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button *ngIf=\"!loading && !noData\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n \r\n \r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" type=\"button\" (click)=\"bulkAssignasxlsx()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><span class=\"ms-2\">Bulk Assign</span> </button>\r\n\r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" type=\"button\" (click)=\"users('add')\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add User</span> </button>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"createTeams()\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Create Team</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!loading && !noData\" class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" class=\"cursor-pointer\"><span\r\n class=\"inputcheck\"><input type=\"checkbox\" (click)=\"onSelectAll()\"\r\n [(ngModel)]=\"selectAllChecked\" class=\"cursor-pointer\"></span>\r\n\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('userName')\">Name\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'userName' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'userName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('email')\">Email\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'email' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'email' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('mobileNumber')\">Contact Number\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'mobileNumber' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'mobileNumber' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('role')\">Roles\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'role' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'role' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th style=\"line-height: 21px !important;\">Assigned To </th>\r\n <th style=\"line-height: 21px !important;\">As a Lead To </th>\r\n <th style=\"line-height: 21px !important;\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-semibold\">\r\n <ng-container *ngFor=\"let user of userList;let i=index;\">\r\n <tr>\r\n <td *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\"><span class=\"inputcheck\"><input\r\n type=\"checkbox\" class=\"cursor-pointer mt-2\" [(ngModel)]=\"user.checked\"\r\n (click)=\"onSelectedTeams(user,i)\"></span></td>\r\n <td>{{user?.userName}}</td>\r\n <td>{{ getMaskedValue(user?.email, userInfo?.role) }}</td>\r\n <td>{{ getMaskedMobile(user?.mobileNumber, userInfo?.role) }}</td>\r\n <td *ngIf=\"user?.role ==='superadmin'\">Super Admin</td>\r\n <td *ngIf=\"user?.role !=='superadmin'\">{{user?.role | titlecase}}</td>\r\n <td><span class=\"badge badge-light-primary\">{{user?.assignedStores||0}} Stores</span> <span class=\"badge badge-light-info\">{{user?.teamCount||0}} Teams</span></td>\r\n <td><span class=\"badge badge-light-purple\">{{user?.clusterCount||0}} Clusters</span> <span class=\"badge badge-light-info\">{{user?.teamlead||0}} Teams</span></td>\r\n\r\n <td>\r\n <div class=\"d-flex\">\r\n <span class=\"mx-3 cursor-pointer\" (click)=\"Viewusers('view',user)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1995_16400)\">\r\n <path\r\n d=\"M1.33325 10C1.33325 10 4.66658 3.33337 10.4999 3.33337C16.3333 3.33337 19.6666 10 19.6666 10C19.6666 10 16.3333 16.6667 10.4999 16.6667C4.66658 16.6667 1.33325 10 1.33325 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.4999 12.5C11.8806 12.5 12.9999 11.3808 12.9999 10C12.9999 8.61933 11.8806 7.50004 10.4999 7.50004C9.11921 7.50004 7.99992 8.61933 7.99992 10C7.99992 11.3808 9.11921 12.5 10.4999 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1995_16400\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n @if ((gs.userAccess | async)?.Global_User_isEdit) {\r\n <span class=\"mx-3 cursor-pointer\" *ngIf=\"userInfo.role!=='user'\">\r\n <button type=\"button\" (click)=\"assignStore(user)\"\r\n [disabled]=\"!user?.isActive || user?.role ==='superadmin'\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span class=\"mx-2\">Assign</span>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"form-check form-switch\" *ngIf=\"userInfo.role!=='user'\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\" role=\"switch\" id=\"support\"\r\n [disabled]=\"!((gs.userAccess | async)?.Global_User_isEdit)\"\r\n (change)=\"userStatusChange(user,i)\" [(ngModel)]=\"userList[i].isActive\">\r\n @if (userList[i].isActive) {\r\n Active\r\n } @else {\r\n Deactive\r\n }\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12 my-3\">\r\n <lib-pagination *ngIf=\"userList.length!==0\" [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer mb-10\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--begin::Row-->\r\n<div *ngIf=\"receivedData ==='Role Value'\" class=\"row gx-5 gx-xl-10\">\r\n <!--begin::Col-->\r\n <div class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12\">\r\n <lib-roles-permission-table (dataEvent)=\"receiveData($event)\"></lib-roles-permission-table>\r\n </div>\r\n <!--end::Col-->\r\n</div>\r\n<!--end::Row-->\r\n\r\n<ng-template #bulkUpload let-modal>\r\n <div class=\"card-body flex-column p-9\">\r\n <div class=\"header-title\">Bulk Assign</div>\r\n <div class=\"d-flex justify-content-start align-items-center\">\r\n <div class=\"fw-bold text-gray-500 mt-6\">\r\n <ol class=\"custom-ordered-list text-gray-400 fw-bold px-5 fs-6\">\r\n <li class=\"user-text\">Use the template below to assign multiple users to multiple stores at once.</li>\r\n <li class=\"user-text my-3\"><span class=\"user-text\">Download the template here - </span>\r\n <a class=\"ms-1\" href=\"../../../assets/files/BulkAssignTemplate.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li class=\"user-text my-3\">Add your data to the Template File</li>\r\n <li class=\"user-text my-3\">Upload it below for processing</li> \r\n </ol>\r\n </div>\r\n </div>\r\n <div class=\" w-100 right-bar d-flex justify-content-center align-items-center flex-column\" >\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal1\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\" value=\"personal1\"\r\n class=\"btn-check\"\r\n (change)=\"onUpload1($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile1 />\r\n <label for=\"kt_create_account_form_account_type_personal1\" class=\" w-1-0 p-4\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n <div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title mb-3\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload</span>\r\n </div>\r\n <div class=\"nodata-sub\">the data added template file for processing.</div>\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #afterValidation let-model>\r\n <div class=\"card border-0\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Bulk Assign</span></div>\r\n </div>\r\n <div class=\"card-body pt-0 popup-scroll\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{getEmailCounts(excelData)}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div [ngClass]=\"excelError ? 'error-heading':''\" class=\"fw-semibold w-100 text-error\">{{excelError?.error?.length || 0}}</div>\r\n <div [ngClass]=\"excelError ? 'excel-error':''\" class=\"fw-semibold mt-1 text-error\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div >You're about to assign {{getEmailCounts(excelData)}} {{getEmailCounts(excelData) > 1 ? 'Users' : 'User'}}. Are you sure want to proceed?</div>\r\n \r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0 d-flex justify-content-end flex-wrap gap-2 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"closeactivepopup()\">Cancel</button>\r\n <button *ngIf=\"!excelError\" class=\"btn btn-md py-3 btn-default btn-primary\" (click)=\"proceedSubmit()\">Proceed</button>\r\n <button *ngIf=\"excelError\" class=\"btn py-3 btn-md btn-default ms-3 btn-danger\" (click)=\"file1.click();\">Reupload</button>\r\n <input style=\"display: none;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n (change)=\"onUpload1($event)\" />\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}td{padding:16px 24px!important;line-height:36px!important}.img-src{width:25%;height:20%}.border-val{padding:10px;border-radius:12px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;box-shadow:0 0 20px #4c577d05}.role-title{color:var(--Primary-600, #344054);font-size:16px;font-weight:600;line-height:24px}.col-md-4{width:31%!important}.user-list{color:var(--Gray-700, #344054);font-size:16px;line-height:24px}.rotate{rotate:180deg;transition:1s}.p-4{padding:.85rem!important}.inputcheck input[type=checkbox]{width:18px!important;height:18px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}.inputcheck input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}.inputcheck input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:12px;padding-right:6px}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:0px!important}.rightcorner{position:absolute;top:10px;right:16px;font-size:18px}.user-text{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.right-bar{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.click-upload{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.header-title{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.subtitle{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.config-heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:400;line-height:24px}.text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}.excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}.error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}.border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}.popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.popup-scroll{min-height:auto;max-height:400px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i4.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "component", type: i9.RolesPermissionTableComponent, selector: "lib-roles-permission-table", outputs: ["dataEvent"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TitleCasePipe, name: "titlecase" }] });
802
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: BrandUserComponent, selector: "lib-brand-user", outputs: { dataToParent: "dataToParent" }, viewQueries: [{ propertyName: "bulkUpload", first: true, predicate: ["bulkUpload"], descendants: true }, { propertyName: "inputFile1", first: true, predicate: ["inputFile1"], descendants: true }, { propertyName: "afterValidation", first: true, predicate: ["afterValidation"], descendants: true }], ngImport: i0, template: "<div *ngIf=\"receivedData !=='Role Value'\">\r\n <div class=\"\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n </h3>\r\n <div class=\"card-toolbar rightcorner \">\r\n <div *ngIf=\"!createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" class=\"form-control ps-14 me-2\"\r\n name=\"search\" autocomplete=\"off\" placeholder=\"Search\" autocomplete=\"off\" />\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button *ngIf=\"!loading && !noData\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n \r\n \r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isEdit\" type=\"button\" (click)=\"bulkAssignasxlsx()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><span class=\"ms-2\">Bulk Assign</span> </button>\r\n\r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" type=\"button\" (click)=\"users('add')\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add User</span> </button>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"createTeams()\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Create Team</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!loading && !noData\" class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" class=\"cursor-pointer\"><span\r\n class=\"inputcheck\"><input type=\"checkbox\" (click)=\"onSelectAll()\"\r\n [(ngModel)]=\"selectAllChecked\" class=\"cursor-pointer\"></span>\r\n\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('userName')\">Name\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'userName' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'userName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('email')\">Email\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'email' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'email' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('mobileNumber')\">Contact Number\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'mobileNumber' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'mobileNumber' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th >Roles\r\n <!-- class=\"cursor-pointer\" (click)=\"onSort('role')\" -->\r\n <!-- <svg [ngClass]=\"userList_req?.sortColumName === 'role' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'role' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> -->\r\n </th>\r\n <th style=\"line-height: 21px !important;\">Assigned To </th>\r\n <th style=\"line-height: 21px !important;\">As a Lead To </th>\r\n <th style=\"line-height: 21px !important;\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-semibold\">\r\n <ng-container *ngFor=\"let user of userList;let i=index;\">\r\n <tr>\r\n <td *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\"><span class=\"inputcheck\"><input\r\n type=\"checkbox\" class=\"cursor-pointer mt-2\" [(ngModel)]=\"user.checked\"\r\n (click)=\"onSelectedTeams(user,i)\"></span></td>\r\n <td>{{user?.userName}}</td>\r\n <td>{{ getMaskedValue(user?.email, userInfo?.role) }}</td>\r\n <td>{{ getMaskedMobile(user?.mobileNumber, userInfo?.role) }}</td>\r\n <td *ngIf=\"user?.role ==='superadmin'\">Super Admin</td>\r\n <td *ngIf=\"user?.role !=='superadmin'\">{{user?.role | titlecase}}</td>\r\n <td><span class=\"badge badge-light-primary me-1\">{{user?.assignedStores||0}} Stores</span> <span class=\"badge badge-light-info\">{{user?.teamCount||0}} Teams</span></td>\r\n <td><span class=\"badge badge-light-purple me-1\">{{user?.clusterCount||0}} Clusters</span> <span class=\"badge badge-light-info\">{{user?.teamlead||0}} Teams</span></td>\r\n\r\n <td>\r\n <div class=\"d-flex\">\r\n <span class=\"mx-3 cursor-pointer\" (click)=\"Viewusers('view',user)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1995_16400)\">\r\n <path\r\n d=\"M1.33325 10C1.33325 10 4.66658 3.33337 10.4999 3.33337C16.3333 3.33337 19.6666 10 19.6666 10C19.6666 10 16.3333 16.6667 10.4999 16.6667C4.66658 16.6667 1.33325 10 1.33325 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.4999 12.5C11.8806 12.5 12.9999 11.3808 12.9999 10C12.9999 8.61933 11.8806 7.50004 10.4999 7.50004C9.11921 7.50004 7.99992 8.61933 7.99992 10C7.99992 11.3808 9.11921 12.5 10.4999 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1995_16400\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n @if ((gs.userAccess | async)?.Global_User_isEdit) {\r\n <span class=\"mx-3 cursor-pointer\" *ngIf=\"userInfo.role!=='user'\">\r\n <button type=\"button\" (click)=\"assignStore(user)\"\r\n [disabled]=\"!user?.isActive || user?.role ==='superadmin'\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span class=\"mx-2\">Assign</span>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"form-check form-switch\" *ngIf=\"userInfo.role!=='user'\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\" role=\"switch\" id=\"support\"\r\n [disabled]=\"!((gs.userAccess | async)?.Global_User_isEdit)\"\r\n (change)=\"userStatusChange(user,i)\" [(ngModel)]=\"userList[i].isActive\">\r\n @if (userList[i].isActive) {\r\n Active\r\n } @else {\r\n Deactive\r\n }\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12 my-3\">\r\n <lib-pagination *ngIf=\"userList.length!==0\" [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer mb-10\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--begin::Row-->\r\n<div *ngIf=\"receivedData ==='Role Value'\" class=\"row gx-5 gx-xl-10\">\r\n <!--begin::Col-->\r\n <div class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12\">\r\n <lib-roles-permission-table (dataEvent)=\"receiveData($event)\"></lib-roles-permission-table>\r\n </div>\r\n <!--end::Col-->\r\n</div>\r\n<!--end::Row-->\r\n\r\n<ng-template #bulkUpload let-modal>\r\n <div class=\"card-body flex-column p-9\">\r\n <div class=\"header-title\">Bulk Assign</div>\r\n <div class=\"d-flex justify-content-start align-items-center\">\r\n <div class=\"fw-bold text-gray-500 mt-6\">\r\n <ol class=\"custom-ordered-list text-gray-400 fw-bold px-5 fs-6\">\r\n <li class=\"user-text\">Use the template below to assign multiple users to multiple stores at once.</li>\r\n <li class=\"user-text my-3\"><span class=\"user-text\">Download the template here - </span>\r\n <a class=\"ms-1\" href=\"../../../assets/files/BulkAssignTemplate.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li class=\"user-text my-3\">Add your data to the Template File</li>\r\n <li class=\"user-text my-3\">Upload it below for processing</li> \r\n </ol>\r\n </div>\r\n </div>\r\n <div class=\" w-100 right-bar d-flex justify-content-center align-items-center flex-column\" >\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal1\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\" value=\"personal1\"\r\n class=\"btn-check\"\r\n (change)=\"onUpload1($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile1 />\r\n <label for=\"kt_create_account_form_account_type_personal1\" class=\" w-1-0 p-4\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n <div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title mb-3\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload</span>\r\n </div>\r\n <div class=\"nodata-sub\">the data added template file for processing.</div>\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #afterValidation let-model>\r\n <div class=\"card border-0\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Bulk Assign</span></div>\r\n </div>\r\n <div class=\"card-body pt-0 popup-scroll\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{getEmailCounts(excelData)}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div [ngClass]=\"excelError \r\n ? 'fw-semibold text-error w-100 error-heading' \r\n : 'fw-semibold w-100 config-heading'\">\r\n {{ excelError?.error?.length || 0 }}\r\n </div>\r\n <div [ngClass]=\"excelError \r\n ? 'fw-semibold text-error mt-1 excel-error' \r\n : 'fw-semibold subtitle mt-1'\">\r\n Error\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div >You're about to assign {{getEmailCounts(excelData)}} {{getEmailCounts(excelData) > 1 ? 'Users' : 'User'}}. Are you sure want to proceed?</div>\r\n \r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0 d-flex justify-content-end flex-wrap gap-2 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"closeactivepopup()\">Cancel</button>\r\n <button *ngIf=\"!excelError\" class=\"btn btn-md py-3 btn-default btn-primary\" (click)=\"proceedSubmit()\">Proceed</button>\r\n <button *ngIf=\"excelError\" class=\"btn py-3 btn-md btn-default ms-3 btn-danger\" (click)=\"file1.click();\">Reupload</button>\r\n <input style=\"display: none;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n (change)=\"onUpload1($event)\" />\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}td{padding:16px 24px!important;line-height:36px!important}.img-src{width:25%;height:20%}.border-val{padding:10px;border-radius:12px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;box-shadow:0 0 20px #4c577d05}.role-title{color:var(--Primary-600, #344054);font-size:16px;font-weight:600;line-height:24px}.col-md-4{width:31%!important}.user-list{color:var(--Gray-700, #344054);font-size:16px;line-height:24px}.rotate{rotate:180deg;transition:1s}.p-4{padding:.85rem!important}.inputcheck input[type=checkbox]{width:18px!important;height:18px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}.inputcheck input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}.inputcheck input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:12px;padding-right:6px}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:0px!important}.rightcorner{position:absolute;top:10px;right:16px;font-size:18px}.user-text{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.right-bar{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.click-upload{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.header-title{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.subtitle{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.config-heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:400;line-height:24px}.text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}.excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}.error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}.border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}.popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.popup-scroll{min-height:auto;max-height:400px;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.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: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i4.PaginationComponent, selector: "lib-pagination", inputs: ["collection", "itemsPerPage", "currentPage", "totalItems", "directionLinks", "pageSize", "paginationSizes"], outputs: ["pageChange", "pageSizeChange"] }, { kind: "component", type: i4.FiltersComponent, selector: "lib-filters", inputs: ["dataObject"], outputs: ["appliedFilters"] }, { kind: "component", type: i9.RolesPermissionTableComponent, selector: "lib-roles-permission-table", outputs: ["dataEvent"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TitleCasePipe, name: "titlecase" }] });
803
803
  }
804
804
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: BrandUserComponent, decorators: [{
805
805
  type: Component,
806
- args: [{ selector: 'lib-brand-user', template: "<div *ngIf=\"receivedData !=='Role Value'\">\r\n <div class=\"\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n </h3>\r\n <div class=\"card-toolbar rightcorner \">\r\n <div *ngIf=\"!createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" class=\"form-control ps-14 me-2\"\r\n name=\"search\" autocomplete=\"off\" placeholder=\"Search\" autocomplete=\"off\" />\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button *ngIf=\"!loading && !noData\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n \r\n \r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" type=\"button\" (click)=\"bulkAssignasxlsx()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><span class=\"ms-2\">Bulk Assign</span> </button>\r\n\r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" type=\"button\" (click)=\"users('add')\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add User</span> </button>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"createTeams()\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Create Team</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!loading && !noData\" class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" class=\"cursor-pointer\"><span\r\n class=\"inputcheck\"><input type=\"checkbox\" (click)=\"onSelectAll()\"\r\n [(ngModel)]=\"selectAllChecked\" class=\"cursor-pointer\"></span>\r\n\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('userName')\">Name\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'userName' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'userName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('email')\">Email\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'email' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'email' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('mobileNumber')\">Contact Number\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'mobileNumber' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'mobileNumber' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('role')\">Roles\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'role' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'role' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th style=\"line-height: 21px !important;\">Assigned To </th>\r\n <th style=\"line-height: 21px !important;\">As a Lead To </th>\r\n <th style=\"line-height: 21px !important;\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-semibold\">\r\n <ng-container *ngFor=\"let user of userList;let i=index;\">\r\n <tr>\r\n <td *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\"><span class=\"inputcheck\"><input\r\n type=\"checkbox\" class=\"cursor-pointer mt-2\" [(ngModel)]=\"user.checked\"\r\n (click)=\"onSelectedTeams(user,i)\"></span></td>\r\n <td>{{user?.userName}}</td>\r\n <td>{{ getMaskedValue(user?.email, userInfo?.role) }}</td>\r\n <td>{{ getMaskedMobile(user?.mobileNumber, userInfo?.role) }}</td>\r\n <td *ngIf=\"user?.role ==='superadmin'\">Super Admin</td>\r\n <td *ngIf=\"user?.role !=='superadmin'\">{{user?.role | titlecase}}</td>\r\n <td><span class=\"badge badge-light-primary\">{{user?.assignedStores||0}} Stores</span> <span class=\"badge badge-light-info\">{{user?.teamCount||0}} Teams</span></td>\r\n <td><span class=\"badge badge-light-purple\">{{user?.clusterCount||0}} Clusters</span> <span class=\"badge badge-light-info\">{{user?.teamlead||0}} Teams</span></td>\r\n\r\n <td>\r\n <div class=\"d-flex\">\r\n <span class=\"mx-3 cursor-pointer\" (click)=\"Viewusers('view',user)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1995_16400)\">\r\n <path\r\n d=\"M1.33325 10C1.33325 10 4.66658 3.33337 10.4999 3.33337C16.3333 3.33337 19.6666 10 19.6666 10C19.6666 10 16.3333 16.6667 10.4999 16.6667C4.66658 16.6667 1.33325 10 1.33325 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.4999 12.5C11.8806 12.5 12.9999 11.3808 12.9999 10C12.9999 8.61933 11.8806 7.50004 10.4999 7.50004C9.11921 7.50004 7.99992 8.61933 7.99992 10C7.99992 11.3808 9.11921 12.5 10.4999 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1995_16400\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n @if ((gs.userAccess | async)?.Global_User_isEdit) {\r\n <span class=\"mx-3 cursor-pointer\" *ngIf=\"userInfo.role!=='user'\">\r\n <button type=\"button\" (click)=\"assignStore(user)\"\r\n [disabled]=\"!user?.isActive || user?.role ==='superadmin'\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span class=\"mx-2\">Assign</span>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"form-check form-switch\" *ngIf=\"userInfo.role!=='user'\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\" role=\"switch\" id=\"support\"\r\n [disabled]=\"!((gs.userAccess | async)?.Global_User_isEdit)\"\r\n (change)=\"userStatusChange(user,i)\" [(ngModel)]=\"userList[i].isActive\">\r\n @if (userList[i].isActive) {\r\n Active\r\n } @else {\r\n Deactive\r\n }\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12 my-3\">\r\n <lib-pagination *ngIf=\"userList.length!==0\" [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer mb-10\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--begin::Row-->\r\n<div *ngIf=\"receivedData ==='Role Value'\" class=\"row gx-5 gx-xl-10\">\r\n <!--begin::Col-->\r\n <div class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12\">\r\n <lib-roles-permission-table (dataEvent)=\"receiveData($event)\"></lib-roles-permission-table>\r\n </div>\r\n <!--end::Col-->\r\n</div>\r\n<!--end::Row-->\r\n\r\n<ng-template #bulkUpload let-modal>\r\n <div class=\"card-body flex-column p-9\">\r\n <div class=\"header-title\">Bulk Assign</div>\r\n <div class=\"d-flex justify-content-start align-items-center\">\r\n <div class=\"fw-bold text-gray-500 mt-6\">\r\n <ol class=\"custom-ordered-list text-gray-400 fw-bold px-5 fs-6\">\r\n <li class=\"user-text\">Use the template below to assign multiple users to multiple stores at once.</li>\r\n <li class=\"user-text my-3\"><span class=\"user-text\">Download the template here - </span>\r\n <a class=\"ms-1\" href=\"../../../assets/files/BulkAssignTemplate.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li class=\"user-text my-3\">Add your data to the Template File</li>\r\n <li class=\"user-text my-3\">Upload it below for processing</li> \r\n </ol>\r\n </div>\r\n </div>\r\n <div class=\" w-100 right-bar d-flex justify-content-center align-items-center flex-column\" >\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal1\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\" value=\"personal1\"\r\n class=\"btn-check\"\r\n (change)=\"onUpload1($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile1 />\r\n <label for=\"kt_create_account_form_account_type_personal1\" class=\" w-1-0 p-4\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n <div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title mb-3\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload</span>\r\n </div>\r\n <div class=\"nodata-sub\">the data added template file for processing.</div>\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #afterValidation let-model>\r\n <div class=\"card border-0\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Bulk Assign</span></div>\r\n </div>\r\n <div class=\"card-body pt-0 popup-scroll\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{getEmailCounts(excelData)}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div [ngClass]=\"excelError ? 'error-heading':''\" class=\"fw-semibold w-100 text-error\">{{excelError?.error?.length || 0}}</div>\r\n <div [ngClass]=\"excelError ? 'excel-error':''\" class=\"fw-semibold mt-1 text-error\">Error</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div >You're about to assign {{getEmailCounts(excelData)}} {{getEmailCounts(excelData) > 1 ? 'Users' : 'User'}}. Are you sure want to proceed?</div>\r\n \r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0 d-flex justify-content-end flex-wrap gap-2 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"closeactivepopup()\">Cancel</button>\r\n <button *ngIf=\"!excelError\" class=\"btn btn-md py-3 btn-default btn-primary\" (click)=\"proceedSubmit()\">Proceed</button>\r\n <button *ngIf=\"excelError\" class=\"btn py-3 btn-md btn-default ms-3 btn-danger\" (click)=\"file1.click();\">Reupload</button>\r\n <input style=\"display: none;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n (change)=\"onUpload1($event)\" />\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}td{padding:16px 24px!important;line-height:36px!important}.img-src{width:25%;height:20%}.border-val{padding:10px;border-radius:12px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;box-shadow:0 0 20px #4c577d05}.role-title{color:var(--Primary-600, #344054);font-size:16px;font-weight:600;line-height:24px}.col-md-4{width:31%!important}.user-list{color:var(--Gray-700, #344054);font-size:16px;line-height:24px}.rotate{rotate:180deg;transition:1s}.p-4{padding:.85rem!important}.inputcheck input[type=checkbox]{width:18px!important;height:18px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}.inputcheck input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}.inputcheck input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:12px;padding-right:6px}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:0px!important}.rightcorner{position:absolute;top:10px;right:16px;font-size:18px}.user-text{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.right-bar{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.click-upload{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.header-title{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.subtitle{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.config-heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:400;line-height:24px}.text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}.excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}.error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}.border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}.popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.popup-scroll{min-height:auto;max-height:400px;overflow-y:auto}\n"] }]
806
+ args: [{ selector: 'lib-brand-user', template: "<div *ngIf=\"receivedData !=='Role Value'\">\r\n <div class=\"\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n </h3>\r\n <div class=\"card-toolbar rightcorner \">\r\n <div *ngIf=\"!createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <span class=\"svg-icon svg-icon-1 position-absolute ms-3\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <rect opacity=\"0.5\" x=\"17.0365\" y=\"15.1223\" width=\"8.15546\" height=\"2\" rx=\"1\"\r\n transform=\"rotate(45 17.0365 15.1223)\" fill=\"currentColor\"></rect>\r\n <path\r\n d=\"M11 19C6.55556 19 3 15.4444 3 11C3 6.55556 6.55556 3 11 3C15.4444 3 19 6.55556 19 11C19 15.4444 15.4444 19 11 19ZM11 5C7.53333 5 5 7.53333 5 11C5 14.4667 7.53333 17 11 17C14.4667 17 17 14.4667 17 11C17 7.53333 14.4667 5 11 5Z\"\r\n fill=\"currentColor\"></path>\r\n </svg>\r\n </span>\r\n <input type=\"text\" (change)=\"searchData()\" [(ngModel)]=\"searchValue\" class=\"form-control ps-14 me-2\"\r\n name=\"search\" autocomplete=\"off\" placeholder=\"Search\" autocomplete=\"off\" />\r\n <lib-filters [dataObject]=\"dataObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <button *ngIf=\"!loading && !noData\" type=\"button\" (click)=\"exportXLSX()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">Export</span> </button>\r\n \r\n \r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isEdit\" type=\"button\" (click)=\"bulkAssignasxlsx()\"\r\n class=\"btn btn-default mx-2 btn-outline p-4 btn-outline-default rounded-3 text-nowrap border-val\"><span class=\"ms-2\">Bulk Assign</span> </button>\r\n\r\n <button *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" type=\"button\" (click)=\"users('add')\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Add User</span> </button>\r\n\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"createTeam\" class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" (click)=\"createTeams()\"\r\n class=\"btn btn-primary mx-2 rounded-3 text-nowrap\"><svg xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\" stroke=\"white\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2 text-white\">Create Team</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"!loading && !noData\" class=\"card-body p-0\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table bottom-border text-nowrap \">\r\n <thead>\r\n <tr>\r\n <th *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\" class=\"cursor-pointer\"><span\r\n class=\"inputcheck\"><input type=\"checkbox\" (click)=\"onSelectAll()\"\r\n [(ngModel)]=\"selectAllChecked\" class=\"cursor-pointer\"></span>\r\n\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('userName')\">Name\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'userName' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'userName' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('email')\">Email\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'email' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'email' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th class=\"cursor-pointer\" (click)=\"onSort('mobileNumber')\">Contact Number\r\n <svg [ngClass]=\"userList_req?.sortColumName === 'mobileNumber' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'mobileNumber' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </th>\r\n <th >Roles\r\n <!-- class=\"cursor-pointer\" (click)=\"onSort('role')\" -->\r\n <!-- <svg [ngClass]=\"userList_req?.sortColumName === 'role' && userList_req?.sortBy === 1 ? 'rotate' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\"\r\n fill=\"none\">\r\n <path\r\n d=\"M8.00016 3.33337V12.6667M8.00016 12.6667L12.6668 8.00004M8.00016 12.6667L3.3335 8.00004\"\r\n [attr.stroke]=\"userList_req?.sortColumName === 'role' ? '#00A3FF' : '#667085'\"\r\n stroke-width=\"1.33333\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> -->\r\n </th>\r\n <th style=\"line-height: 21px !important;\">Assigned To </th>\r\n <th style=\"line-height: 21px !important;\">As a Lead To </th>\r\n <th style=\"line-height: 21px !important;\">Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-semibold\">\r\n <ng-container *ngFor=\"let user of userList;let i=index;\">\r\n <tr>\r\n <td *ngIf=\"(gs.userAccess |async)?.Global_User_isAdd\"><span class=\"inputcheck\"><input\r\n type=\"checkbox\" class=\"cursor-pointer mt-2\" [(ngModel)]=\"user.checked\"\r\n (click)=\"onSelectedTeams(user,i)\"></span></td>\r\n <td>{{user?.userName}}</td>\r\n <td>{{ getMaskedValue(user?.email, userInfo?.role) }}</td>\r\n <td>{{ getMaskedMobile(user?.mobileNumber, userInfo?.role) }}</td>\r\n <td *ngIf=\"user?.role ==='superadmin'\">Super Admin</td>\r\n <td *ngIf=\"user?.role !=='superadmin'\">{{user?.role | titlecase}}</td>\r\n <td><span class=\"badge badge-light-primary me-1\">{{user?.assignedStores||0}} Stores</span> <span class=\"badge badge-light-info\">{{user?.teamCount||0}} Teams</span></td>\r\n <td><span class=\"badge badge-light-purple me-1\">{{user?.clusterCount||0}} Clusters</span> <span class=\"badge badge-light-info\">{{user?.teamlead||0}} Teams</span></td>\r\n\r\n <td>\r\n <div class=\"d-flex\">\r\n <span class=\"mx-3 cursor-pointer\" (click)=\"Viewusers('view',user)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"21\" height=\"20\"\r\n viewBox=\"0 0 21 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1995_16400)\">\r\n <path\r\n d=\"M1.33325 10C1.33325 10 4.66658 3.33337 10.4999 3.33337C16.3333 3.33337 19.6666 10 19.6666 10C19.6666 10 16.3333 16.6667 10.4999 16.6667C4.66658 16.6667 1.33325 10 1.33325 10Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M10.4999 12.5C11.8806 12.5 12.9999 11.3808 12.9999 10C12.9999 8.61933 11.8806 7.50004 10.4999 7.50004C9.11921 7.50004 7.99992 8.61933 7.99992 10C7.99992 11.3808 9.11921 12.5 10.4999 12.5Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1995_16400\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg></span>\r\n @if ((gs.userAccess | async)?.Global_User_isEdit) {\r\n <span class=\"mx-3 cursor-pointer\" *ngIf=\"userInfo.role!=='user'\">\r\n <button type=\"button\" (click)=\"assignStore(user)\"\r\n [disabled]=\"!user?.isActive || user?.role ==='superadmin'\"\r\n class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\">\r\n <span class=\"mx-2\">Assign</span>\r\n </button>\r\n </span>\r\n }\r\n <span class=\"form-check form-switch\" *ngIf=\"userInfo.role!=='user'\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\" role=\"switch\" id=\"support\"\r\n [disabled]=\"!((gs.userAccess | async)?.Global_User_isEdit)\"\r\n (change)=\"userStatusChange(user,i)\" [(ngModel)]=\"userList[i].isActive\">\r\n @if (userList[i].isActive) {\r\n Active\r\n } @else {\r\n Deactive\r\n }\r\n </span>\r\n </div>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!loading && !noData\" class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12 my-3\">\r\n <lib-pagination *ngIf=\"userList.length!==0\" [itemsPerPage]=\"pagination.limit\" [currentPage]=\"pagination.offset\"\r\n [totalItems]=\"pagination.totalCount\" [paginationSizes]=\"paginationSizes\" [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\" (pageSizeChange)=\"onPageSizeChange($event)\"></lib-pagination>\r\n </div>\r\n <div *ngIf=\"loading\" class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer mb-10\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"noData\" class=\"row\">\r\n <div class=\"col-lg-12 mb-3\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata.svg\" alt=\"\">\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!--begin::Row-->\r\n<div *ngIf=\"receivedData ==='Role Value'\" class=\"row gx-5 gx-xl-10\">\r\n <!--begin::Col-->\r\n <div class=\"col-xxl-12 col-md-12 col-xl-12 col-lg-12\">\r\n <lib-roles-permission-table (dataEvent)=\"receiveData($event)\"></lib-roles-permission-table>\r\n </div>\r\n <!--end::Col-->\r\n</div>\r\n<!--end::Row-->\r\n\r\n<ng-template #bulkUpload let-modal>\r\n <div class=\"card-body flex-column p-9\">\r\n <div class=\"header-title\">Bulk Assign</div>\r\n <div class=\"d-flex justify-content-start align-items-center\">\r\n <div class=\"fw-bold text-gray-500 mt-6\">\r\n <ol class=\"custom-ordered-list text-gray-400 fw-bold px-5 fs-6\">\r\n <li class=\"user-text\">Use the template below to assign multiple users to multiple stores at once.</li>\r\n <li class=\"user-text my-3\"><span class=\"user-text\">Download the template here - </span>\r\n <a class=\"ms-1\" href=\"../../../assets/files/BulkAssignTemplate.xlsx\" download>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M5.83333 8.33333L10 12.5M10 12.5L14.1667 8.33333M10 12.5V2.5\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n <span class=\"template ms-2\">Download Template</span>\r\n </a>\r\n </li>\r\n <li class=\"user-text my-3\">Add your data to the Template File</li>\r\n <li class=\"user-text my-3\">Upload it below for processing</li> \r\n </ol>\r\n </div>\r\n </div>\r\n <div class=\" w-100 right-bar d-flex justify-content-center align-items-center flex-column\" >\r\n <input name=\"accountType\" type=\"radio\" id=\"kt_create_account_form_account_type_personal1\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\" value=\"personal1\"\r\n class=\"btn-check\"\r\n (change)=\"onUpload1($event)\"\r\n ng-reflect-value=\"personal\" type=\"file\" #inputFile1 />\r\n <label for=\"kt_create_account_form_account_type_personal1\" class=\" w-1-0 p-4\"><span\r\n class=\"fw-bold text-center w-100 fs-4\">\r\n <div class=\"d-flex justify-content-center align-items-center w-100\">\r\n <svg width=\"46\" height=\"46\" viewBox=\"0 0 46 46\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" fill=\"#F2F4F7\" />\r\n <rect x=\"3\" y=\"3\" width=\"40\" height=\"40\" rx=\"20\" stroke=\"#F9FAFB\"\r\n stroke-width=\"6\" />\r\n <g clip-path=\"url(#clip0_4047_40566)\">\r\n <path\r\n d=\"M26.3333 26.3334L23 23M23 23L19.6666 26.3334M23 23V30.5M29.9916 28.325C30.8044 27.8819 31.4465 27.1808 31.8165 26.3322C32.1866 25.4837 32.2635 24.5361 32.0351 23.6389C31.8068 22.7418 31.2862 21.9463 30.5555 21.3779C29.8248 20.8095 28.9257 20.5006 28 20.5H26.95C26.6977 19.5244 26.2276 18.6186 25.5749 17.8509C24.9222 17.0831 24.104 16.4732 23.1817 16.0672C22.2594 15.6612 21.2571 15.4695 20.2501 15.5066C19.243 15.5437 18.2575 15.8086 17.3676 16.2814C16.4777 16.7542 15.7066 17.4226 15.1122 18.2363C14.5177 19.0501 14.1155 19.988 13.9358 20.9795C13.756 21.9711 13.8034 22.9905 14.0743 23.9611C14.3452 24.9317 14.8327 25.8282 15.5 26.5834\"\r\n stroke=\"#475467\" stroke-width=\"1.66667\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4047_40566\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(13 13)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"nodata-title mb-3\"><span class=\"click-upload cursor-pointer\">Click to\r\n upload</span>\r\n </div>\r\n <div class=\"nodata-sub\">the data added template file for processing.</div>\r\n </span>\r\n </label>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #afterValidation let-model>\r\n <div class=\"card border-0\">\r\n <div class=\"card-header border-0 mt-0\">\r\n <div class=\"card-title mt-3\"><span class=\"config-heading fw-semibold w-auto\">Bulk Assign</span></div>\r\n </div>\r\n <div class=\"card-body pt-0 popup-scroll\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{getEmailCounts(excelData)}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Total Records</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div class=\"fw-semibold config-heading w-100\">{{excelData?.length}}</div>\r\n <div class=\"fw-semibold subtitle mt-1\">Rows processed</div>\r\n </div>\r\n </div>\r\n <div class=\"col-sm-4\">\r\n <div class=\"popup-card rounded-3 p-3 flex-column h-70px\">\r\n <div [ngClass]=\"excelError \r\n ? 'fw-semibold text-error w-100 error-heading' \r\n : 'fw-semibold w-100 config-heading'\">\r\n {{ excelError?.error?.length || 0 }}\r\n </div>\r\n <div [ngClass]=\"excelError \r\n ? 'fw-semibold text-error mt-1 excel-error' \r\n : 'fw-semibold subtitle mt-1'\">\r\n Error\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!excelError\" class=\"table-header mt-5\" style=\"font-weight: 400;\">\r\n <div >You're about to assign {{getEmailCounts(excelData)}} {{getEmailCounts(excelData) > 1 ? 'Users' : 'User'}}. Are you sure want to proceed?</div>\r\n \r\n </div>\r\n <div *ngIf=\"excelError\" class=\"flex-column mt-5\">\r\n <div class=\"config-heading fw-bold\">Invalid Details !</div>\r\n <div class=\"subtitle mt-5\">Please provide correct information.</div>\r\n <div class=\"p-5 w-100 rounded-3 border-error mt-5 flex-column\">\r\n <div *ngFor=\"let error of excelError?.error; let i = index; let last = last\" [ngClass]=\"!last ? 'mb-2' : ''\" class=\"text-error\">{{i + 1}}) {{error}}</div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"card-footer border-0 d-flex justify-content-end flex-wrap gap-2 pt-0\">\r\n <button class=\"btn btn-md btn-default btn-outline\" (click)=\"closeactivepopup()\">Cancel</button>\r\n <button *ngIf=\"!excelError\" class=\"btn btn-md py-3 btn-default btn-primary\" (click)=\"proceedSubmit()\">Proceed</button>\r\n <button *ngIf=\"excelError\" class=\"btn py-3 btn-md btn-default ms-3 btn-danger\" (click)=\"file1.click();\">Reupload</button>\r\n <input style=\"display: none;\" #file1 type=\"file\" id=\"kt_account_team_size_select_2\" accept = \".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\r\n (change)=\"onUpload1($event)\" />\r\n </div>\r\n </div>\r\n</ng-template>\r\n", styles: [".border-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px;text-transform:capitalize}.table-title-primary{color:var(--Primary-700, #009BF3)!important;font-weight:500!important}.table-sub{line-height:30px!important;color:var(--Gray-500, #667085)!important}td{padding:16px 24px!important;line-height:36px!important}.img-src{width:25%;height:20%}.border-val{padding:10px;border-radius:12px;border:1px solid var(--Gray-200, #EAECF0);background:#fff;box-shadow:0 0 20px #4c577d05}.role-title{color:var(--Primary-600, #344054);font-size:16px;font-weight:600;line-height:24px}.col-md-4{width:31%!important}.user-list{color:var(--Gray-700, #344054);font-size:16px;line-height:24px}.rotate{rotate:180deg;transition:1s}.p-4{padding:.85rem!important}.inputcheck input[type=checkbox]{width:18px!important;height:18px!important;margin:0;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}.inputcheck input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}.inputcheck input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0!important;padding-top:12px;padding-right:6px}table th{border-bottom:1px solid var(--Gray-200, #EAECF0)!important;background:var(--Gray-50, #F9FAFB)!important;color:var(--Gray-500, #667085)!important;font-size:12px!important;font-weight:500!important;line-height:0px!important}.rightcorner{position:absolute;top:10px;right:16px;font-size:18px}.user-text{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.right-bar{border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD)}.click-upload{color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px;text-decoration-line:underline;text-transform:capitalize}.header-title{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.subtitle{color:var(--Gray-500, #667085);font-size:14px;font-weight:400;line-height:20px}.config-heading{color:var(--Gray-900, #101828);font-size:18px;font-weight:600;line-height:28px}.table-header{color:var(--Gray-800, #1D2939);font-size:16px;font-weight:400;line-height:24px}.text-error{color:var(--Error-700, #B42318)!important;font-size:14px;font-weight:500;line-height:20px}.excel-error{color:var(--Error-600, #D92D20);font-size:14px;font-weight:500;line-height:20px}.error-heading{color:var(--Error-600, #D92D20);font-size:20px;font-weight:500;line-height:30px}.border-error{border:1px solid var(--Error-300, #FDA29B)!important;background:var(--Error-25, #FFFBFA)!important}.popup-card{border-radius:6px;border:1px solid var(--Gray-300, #D0D5DD);background:#fff;box-shadow:0 1px 3px #1018281a,0 1px 2px #1018280f}.popup-scroll{min-height:auto;max-height:400px;overflow-y:auto}\n"] }]
807
807
  }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.PageInfoService }, { type: i0.ChangeDetectorRef }, { type: i3.ExcelService }, { type: i2.GlobalStateService }, { type: i4.ToastService }, { type: i5.UserService }, { type: i6.Router }, { type: i6.ActivatedRoute }], propDecorators: { dataToParent: [{
808
808
  type: Output
809
809
  }], bulkUpload: [{
@@ -816,4 +816,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
816
816
  type: ViewChild,
817
817
  args: ['afterValidation']
818
818
  }] } });
819
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtdXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdXNlcnMvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLW1hbmFnZS11c2Vycy9icmFuZC11c2VyL2JyYW5kLXVzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXVzZXJzL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtdXNlcnMvYnJhbmQtdXNlci9icmFuZC11c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU1SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUsvRixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBa0QsTUFBTSxNQUFNLENBQUM7QUFDMUYsT0FBTyxFQUFZLElBQUksRUFBRSxLQUFLLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLDRGQUE0RjtBQUM1RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7Ozs7QUFFeEcsK0RBQStEO0FBTy9ELE1BQU0sT0FBTyxrQkFBa0I7SUFxQ3JCO0lBQStCO0lBQzlCO0lBQ0E7SUFDRDtJQUNDO0lBRUE7SUFDQTtJQUNBO0lB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TUFBTTtnQkFFa0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNFLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDTyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0ICxFdmVudEVtaXR0ZXIsIE91dHB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgQWRkVXNlclBvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FkZC11c2VyLXBvcHVwL2FkZC11c2VyLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXNzaWduU3RvcmVQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9hc3NpZ24tc3RvcmUtcG9wdXAvYXNzaWduLXN0b3JlLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuaW1wb3J0IHsgRXhjZWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2V4Y2VsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBXb3JrQm9vaywgcmVhZCwgdXRpbHMsIFdvcmtTaGVldCB9IGZyb20gXCJ4bHN4XCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8vIGltcG9ydCB7IEFsZXJ0UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLXRhYmxlL2FsZXJ0LWJ1bHBvcHVwL2FsZXJ0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFsZXJ0UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLXRhYmxlL2FsZXJ0LXBvcHVwL2FsZXJ0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZFVzZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy12Mi9hZGQtdXNlcnMvYWRkLXVzZXJzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRlYW1zQ3JlYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzLXYyL3RlYW1zLWNyZWF0aW9uL3RlYW1zLWNyZWF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG4vLyBpbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWJyYW5kLXVzZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFuZC11c2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYnJhbmQtdXNlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyYW5kVXNlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSBkYXRhVG9QYXJlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAvLyBAT3V0cHV0KCkgZGF0YVRvdXNlcmxpc3Q6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQFZpZXdDaGlsZCgnYnVsa1VwbG9hZCcpIGJ1bGtVcGxvYWQ6IGFueTtcclxuICBAVmlld0NoaWxkKFwiaW5wdXRGaWxlMVwiKSBpbnB1dEZpbGUxOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2FmdGVyVmFsaWRhdGlvbicpIGFmdGVyVmFsaWRhdGlvbjogYW55O1xyXG4gcmVjZWl2ZWREYXRhOmFueT0nJztcclxuIHVzZXJEYXRhOiBzdHJpbmc7XHJcbiBzZWFyY2hWYWx1ZTogYW55O1xyXG4gdXNlckxpc3Q6IGFueVtdID0gW107XHJcbiB1c2VyTGlzdF9yZXE6IGFueTtcclxuIHBhZ2luYXRpb246IGFueSA9IHtcclxuICAgb2Zmc2V0OiAxLFxyXG4gICBsaW1pdDogMTAsXHJcbiAgIHRvdGFsQ291bnQ6IDAsXHJcbiB9O1xyXG4gbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuIHBhZ2luYXRpb25TaXplczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMF07XHJcbiBzdXBwb3J0RW1haWw6IHN0cmluZztcclxuIHVzZXJUeXBlOiBzdHJpbmc7XHJcbiAkaGVhZGVyRmlsdGVyczogYW55O1xyXG4gc2VhcmNoSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woXCJcIik7XHJcbiBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICByb2xlczogYW55O1xyXG4gIGZpbGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0b3JlczogYW55ID1bXTtcclxuICByb2xlc0NvdW50OiBhbnk7XHJcbiAgU2VsZWN0ZWRUYWI6IGFueTtcclxuICAgIGRhdGFPYmplY3Q6IGFueSA9IFtcclxuICAgIHsgRGVzY3JpcHRpb246ICdSb2xlcycsIElzc3VlczogW3sgdGV4dDogXCJTdXBlciBBZG1pblwiLCBpZDogJ3N1cGVyYWRtaW4nIH0sIHsgdGV4dDogXCJBZG1pblwiLCBpZDogJ2FkbWluJyB9LCB7IHRleHQ6IFwiVXNlclwiLCBpZDogXCJ1c2VyXCIgfV0gfSxcclxuICAgIHsgRGVzY3JpcHRpb246ICdTdGF0dXMnLCBJc3N1ZXM6IFt7IHRleHQ6IFwiQWN0aXZlXCIsIGlkOiAnYWN0aXZlJyB9LCB7IHRleHQ6IFwiRGVhY3RpdmVcIiwgaWQ6ICdkZWFjdGl2ZScgfV0gfVxyXG4gIF07XHJcbiAgZmlsdGVyQnlSb2xlczogYW55O1xyXG4gIGZpbHRlckJ5U3RhdHVzOiBhbnk7XHJcbiAgdXNlckluZm86IGFueTtcclxuIGNvbnN0cnVjdG9yKFxyXG4gICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBwcml2YXRlIGV4Y2VsU2VydmljZTogRXhjZWxTZXJ2aWNlLFxyXG4gICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAvLyAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiApIHtcclxuICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICBpZiAoZW52KSB7XHJcbiAgICAgICB0aGlzLnN1cHBvcnRFbWFpbCA9IGVudi5zdXBwb3J0X2VtYWlsO1xyXG4gICAgIH1cclxuICAgfSk7ICAgIFxyXG4gfVxyXG5cclxuXHJcbiBzZXRQYWdlRGF0YSgpIHtcclxuICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiVXNlcnNcIik7XHJcbiAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcIk9uYm9hcmQgeW91ciB0ZWFtIGFuZCBoZWxwIHRoZW0gdmlzdWFsaXplIHRoZWlyIHN0b3JlcyBwZXJmb3JtYW5jZVwiKTtcclxuICBsZXQgYnJlYWRjcnVtYnMgOiBhbnlbXT1bXTtcclxuICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICBicmVhZGNydW1icz0gIFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9icmFuZHNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL2JyYW5kc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfSBlbHNlIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcImNsaWVudFwiKSB7XHJcbiAgICBicmVhZGNydW1icz0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKGJyZWFkY3J1bWJzKTtcclxufVxyXG4gbmdPbkluaXQoKSB7XHJcbiAgdGhpcy51c2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiKTtcclxuICBcclxuICAgdGhpcy5ncz8uZGF0YVJhbmdlVmFsdWU/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICBuZXh0OihkYXRhOmFueSk9PntcclxuICAgICAgIGlmKGRhdGEgPT09IG51bGwgKSB7XHJcbiAgICAgICAgY29uc3QgdXNlckRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiKTtcclxuICAgICAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gdXNlckRhdGE7XHJcbiAgICAgICAgdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQgPSB1c2VyRGF0YS5jbGllbnRJZFxyXG4gICAgICAgIHRoaXMudXNlckRhdGEgPSBcImNsaWVudFwiO1xyXG4gICAgICAgICAgIHRoaXMudXNlclR5cGUgPSBcImNsaWVudFwiO1xyXG4gICAgICAgICAgIGlmKHVzZXJEYXRhPy5jbGllbnRJZCl7XHJcbiAgICAgICAgICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgICAgICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgICAgZXhwb3J0OmZhbHNlXHJcbiAgICAgICAgICAgfTtcclxuICAgICAgICAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gICAgICAgICAgLy8gIHRoaXMuZ2V0Um9sZXMoKTtcclxuICAgICAgICAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0gXCJjbGllbnRcIjtcclxuICAgICAgICAgICB0aGlzLnVzZXJUeXBlID0gXCJjbGllbnRcIjtcclxuICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0ID0gMTtcclxuICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSAxMDtcclxuICAgICAgICAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgICAgIG9mZnNldDogMSxcclxuICAgICAgICAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgICAgICBleHBvcnQ6ZmFsc2VcclxuICAgICAgICAgICB9O1xyXG4gICAgICAgICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgICAgICAgICAvLyAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgICAgICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgICAgIH0gXHJcbiAgICAgfVxyXG4gICB9KTtcclxuXHJcbiBcclxuICB9XHJcbiAgZ2V0TWFza2VkVmFsdWUodmFsdWU6IHN0cmluZywgcm9sZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChyb2xlID09PSAnc3VwZXJhZG1pbicpIHJldHVybiB2YWx1ZTtcclxuICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmluY2x1ZGVzKCdAJykpIHJldHVybiAnJztcclxuXHJcbiAgICBjb25zdCBbbG9jYWwsIGRvbWFpbl0gPSB2YWx1ZS5zcGxpdCgnQCcpO1xyXG4gICAgY29uc3QgdmlzaWJsZUxlbmd0aCA9IE1hdGgubWluKDUsIGxvY2FsLmxlbmd0aCk7XHJcbiAgICBjb25zdCB2aXNpYmxlUGFydCA9IGxvY2FsLnNsaWNlKDAsIHZpc2libGVMZW5ndGgpO1xyXG4gICAgY29uc3QgbWFza2VkUGFydCA9ICcqJy5yZXBlYXQobG9jYWwubGVuZ3RoIC0gdmlzaWJsZUxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIGAke3Zpc2libGVQYXJ0fSR7bWFza2VkUGFydH1AJHtkb21haW59YDtcclxuICB9XHJcbiAgZ2V0TWFza2VkTW9iaWxlKHZhbHVlOiBzdHJpbmcsIHJvbGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAocm9sZSA9PT0gJ3N1cGVyYWRtaW4nKSByZXR1cm4gdmFsdWU7XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA8PSA0KSByZXR1cm4gJyonLnJlcGVhdCh2YWx1ZS5sZW5ndGgpO1xyXG4gIFxyXG4gICAgY29uc3QgZmlyc3QyID0gdmFsdWUuc2xpY2UoMCwgMik7XHJcbiAgICBjb25zdCBsYXN0MiA9IHZhbHVlLnNsaWNlKC0yKTtcclxuICAgIGNvbnN0IG1hc2tlZE1pZGRsZSA9ICcqJy5yZXBlYXQodmFsdWUubGVuZ3RoIC0gNCk7XHJcbiAgXHJcbiAgICByZXR1cm4gYCR7Zmlyc3QyfSR7bWFza2VkTWlkZGxlfSR7bGFzdDJ9YDtcclxuICB9XHJcbiBcclxuIHNlYXJjaERhdGEoKSB7XHJcbiAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9MTtcclxuICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPTEwO1xyXG4gIGlmKHRoaXMuc2VhcmNoVmFsdWUgPT09Jycpe1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgbGltaXQ6IDEwLFxyXG4gICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgICBleHBvcnQ6ZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVJvbGVzID0gdGhpcy5maWx0ZXJCeVJvbGVzO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzO1xyXG4gICAgdGhpcy5sb2FkVGFibGUoKTtcclxuICB9IGVsc2Uge1xyXG4gICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgbGltaXQ6IDEwLFxyXG4gICAgIG9mZnNldDogMSxcclxuICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSxcclxuICAgICBleHBvcnQ6ZmFsc2VcclxuICAgfTtcclxuICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlSb2xlcyA9IHRoaXMuZmlsdGVyQnlSb2xlcztcclxuICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzO1xyXG4gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH1cclxuIH1cclxuIHVzZXJzKHR5cGU6IGFueSx1c2VyPzogYW55KSB7XHJcbiAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRVc2VyUG9wdXBDb21wb25lbnQsIHtcclxuICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICBzaXplOiBcImxnXCIsXHJcbiAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgfSk7XHJcbiAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSB1c2VyO1xyXG4gICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdHlwZTtcclxuICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlclR5cGUgPSdjbGllbnQnO1xyXG4gICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICBpZihyZXN1bHQgPT09J3N1Ym1pdCcpe1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0nJztcclxuICAgICAgdGhpcy51c2VyTGlzdF9yZXEubGltaXQgPSAxMDtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uLmxpbWl0ID0gMTA7XHJcbiAgICAgIHRoaXMudXNlckxpc3RfcmVxLm9mZnNldCA9IDE7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5vZmZzZXQgPSAxO1xyXG4gICAgIHRoaXMudXNlclNlcnZpY2UuZGF0YVN1YmplY3QubmV4dCh0aGlzLnVzZXJEYXRhKTtcclxuICAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBsaW1pdDogMTAsXHJcbiAgICAgIG9mZnNldDogMSxcclxuICAgICAgdXNlclR5cGU6IHRoaXMudXNlclR5cGUsXHJcbiAgICAgIGV4cG9ydDpmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgICAvLyAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgfVxyXG4gICB9KTtcclxuIH1cclxuICBWaWV3dXNlcnModHlwZTogYW55LCB1c2VyPzogYW55KSB7XHJcbiAgICBsZXQgbW9kYWxPcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiAnbGcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHVzZXIucm9sZSA9PT0gJ2FkbWluJyAmJiB1c2VyLmlzQWN0aXZlID09IHRydWUgJiYgdGhpcy5ncz8udXNlckFjY2Vzcz8udmFsdWU/Lkdsb2JhbF9Vc2VyX2lzRWRpdCApIHtcclxuICAgICAgbW9kYWxPcHRpb25zLmJhY2tkcm9wID0gJ3N0YXRpYyc7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRVc2Vyc0NvbXBvbmVudCwgbW9kYWxPcHRpb25zKTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSB1c2VyO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHR5cGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VyVHlwZSA9J2NsaWVudCc7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH0pXHJcbiB9XHJcbiAvLyBzZWFyY2hEYXRhKCkge1xyXG4gLy8gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gLy8gfVxyXG5cclxuIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgIGlmKHRoaXMuc2VhcmNoVmFsdWUgPT09Jycpe1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgbGltaXQ6IHRoaXMudXNlckxpc3RfcmVxLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6IHRoaXMudXNlckxpc3RfcmVxLm9mZnNldCxcclxuICAgICAgdXNlclR5cGU6IHRoaXMudXNlclR5cGUsICBcclxuICAgICAgZXhwb3J0OmZhbHNlLFxyXG4gICAgICBzb3J0Q29sdW1OYW1lIDp0aGlzLnVzZXJMaXN0X3JlcS5zb3J0Q29sdW1OYW1lLFxyXG4gICAgc29ydEJ5IDogdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBsaW1pdDogdGhpcy51c2VyTGlzdF9yZXEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0LFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgIGV4cG9ydDpmYWxzZSxcclxuICAgICAgc29ydENvbHVtTmFtZSA6dGhpcy51c2VyTGlzdF9yZXEuc29ydENvbHVtTmFtZSxcclxuICAgIHNvcnRCeSA6IHRoaXMudXNlckxpc3RfcmVxLnNvcnRCeVxyXG4gICAgfTtcclxuICB9XHJcbiAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlSb2xlcyA9IHRoaXMuZmlsdGVyQnlSb2xlcztcclxuICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVN0YXR1cyA9IHRoaXMuZmlsdGVyQnlTdGF0dXM7XHJcbiAgdGhpcy5jcmVhdGVUZWFtID0gZmFsc2U7XHJcbiAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XHJcbiAgdGhpcy5zZWxlY3RBbGxDaGVja2VkID1mYWxzZTtcclxuICAgdGhpcy5sb2FkVGFibGUoKTtcclxuIH1cclxuXHJcbiBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgdGhpcy51c2VyTGlzdF9yZXEubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICB0aGlzLnVzZXJMaXN0X3JlcS5vZmZzZXQgPSAxO1xyXG4gICB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0ID0gMTtcclxuICAgaWYodGhpcy5zZWFyY2hWYWx1ZSA9PT0nJyl7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBsaW1pdDogdGhpcy51c2VyTGlzdF9yZXEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0LFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSwgIFxyXG4gICAgICBleHBvcnQ6ZmFsc2UsXHJcbiAgICAgIHNvcnRDb2x1bU5hbWUgOnRoaXMudXNlckxpc3RfcmVxLnNvcnRDb2x1bU5hbWUsXHJcbiAgICBzb3J0QnkgOiB0aGlzLnVzZXJMaXN0X3JlcS5zb3J0QnlcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiB0aGlzLnVzZXJMaXN0X3JlcS5saW1pdCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLnVzZXJMaXN0X3JlcS5vZmZzZXQsXHJcbiAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSxcclxuICAgICAgZXhwb3J0OmZhbHNlLFxyXG4gICAgICBzb3J0Q29sdW1OYW1lIDp0aGlzLnVzZXJMaXN0X3JlcS5zb3J0Q29sdW1OYW1lLFxyXG4gICAgc29ydEJ5IDogdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5XHJcbiAgICB9O1xyXG4gIH1cclxuICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVJvbGVzID0gdGhpcy5maWx0ZXJCeVJvbGVzO1xyXG4gIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5U3RhdHVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cztcclxuICB0aGlzLmNyZWF0ZVRlYW0gPSBmYWxzZTtcclxuICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICB0aGlzLnNlbGVjdEFsbENoZWNrZWQgPWZhbHNlO1xyXG4gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gfVxyXG5cclxuIGFzc2lnblN0b3JlKHVzZXI6IGFueSkge1xyXG4gICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQXNzaWduU3RvcmVQb3B1cENvbXBvbmVudCwge1xyXG4gICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgIGJhY2tkcm9wOidzdGF0aWMnLFxyXG4gICAgIHNpemU6IFwibGdcIixcclxuICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICB9KTtcclxuICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlciA9IHVzZXI7XHJcbiAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgIGlmKHJlc3VsdCA9PT0nc3VibWl0Jyl7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPScnO1xyXG4gICAgICB0aGlzLnVzZXJMaXN0X3JlcS5saW1pdCA9IDEwO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSAxMDtcclxuICAgICAgdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9IDE7XHJcbiAgICAgdGhpcy51c2VyU2VydmljZS5kYXRhU3ViamVjdC5uZXh0KHRoaXMudXNlckRhdGEpO1xyXG4gICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgZXhwb3J0OmZhbHNlXHJcbiAgICB9O1xyXG4gICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgIH0pO1xyXG4gfVxyXG5cclxuIGxvYWRUYWJsZSgpIHtcclxuICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAvLyAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldD0xO1xyXG4gIC8vICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPTEwO1xyXG4gICB0aGlzLnBhZ2luYXRpb24udG90YWxDb3VudCA9MDtcclxuICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyTGlzdCh0aGlzLnVzZXJMaXN0X3JlcSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShcclxuICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICB0aGlzLnVzZXJMaXN0ID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgIFxyXG4gICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB7XHJcbiAgICAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0LFxyXG4gICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2luYXRpb24ubGltaXQsXHJcbiAgICAgICAgICAgdG90YWxDb3VudDogcmVzLmRhdGEuY291bnQsXHJcbiAgICAgICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIHRoaXMuZGF0YVRvUGFyZW50LmVtaXQodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQpO1xyXG4gICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UodGhpcy5wYWdpbmF0aW9uLmxpbWl0KTtcclxuICAgICAgICAgaWYgKHJlcy5kYXRhLmNvdW50IDwgMTApIHtcclxuICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFtyZXMuZGF0YS5jb3VudF07XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICB9IGVsc2UgeyAgICAgIFxyXG5cclxuICAgICAgICAgdGhpcy51c2VyTGlzdCA9IFtdO1xyXG4gICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB7XHJcbiAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGF0YVRvUGFyZW50LmVtaXQodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQpO1xyXG4gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgfVxyXG4gICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgfSxcclxuICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgdGhpcy51c2VyTGlzdCA9IFtdO1xyXG4gICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgIH07XHJcbiAgICAgICB0aGlzLmRhdGFUb1BhcmVudC5lbWl0KHRoaXMucGFnaW5hdGlvbi50b3RhbENvdW50KTtcclxuICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgIH1cclxuICAgKTtcclxuIH1cclxuXHJcbiBwYWdpbmF0aW9uU2l6ZSgpOiBudW1iZXIge1xyXG4gICBpZiAodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQgPCAxMCkge1xyXG4gICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24udG90YWxDb3VudDtcclxuICAgfSBlbHNlIHtcclxuICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uLmxpbWl0O1xyXG4gICB9XHJcbiB9XHJcblxyXG4gZXhwb3J0WExTWCgpIHtcclxuICBpZih0aGlzLnNlYXJjaFZhbHVlID09PScnKXtcclxuICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiAxMDAwMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgZXhwb3J0OnRydWVcclxuICAgIH07XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVJvbGVzID0gdGhpcy5maWx0ZXJCeVJvbGVzO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzO1xyXG4gIHRoaXMudXNlclNlcnZpY2VcclxuICAuZ2V0VXNlckxpc3RFeHBvcnQodGhpcy51c2VyTGlzdF9yZXEpXHJcbiAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdVc2VycycpXHJcblxyXG4gICAgfSxcclxuICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcGxldGU6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgb2Zmc2V0OiAxLFxyXG4gICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgIGV4cG9ydDp0cnVlXHJcbiAgIH07XHJcbiAgIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5Um9sZXMgPSB0aGlzLmZpbHRlckJ5Um9sZXM7XHJcbiAgIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5U3RhdHVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cztcclxuIHRoaXMudXNlclNlcnZpY2VcclxuIC5nZXRVc2VyTGlzdEV4cG9ydCh0aGlzLnVzZXJMaXN0X3JlcSlcclxuIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuIC5zdWJzY3JpYmUoe1xyXG4gICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICB0aGlzLmV4Y2VsU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnVXNlcnMnKVxyXG5cclxuICAgfSxcclxuICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgfSxcclxuICAgY29tcGxldGU6ICgpID0+IHt9LFxyXG4gfSk7XHJcbiAgfVxyXG5cclxuIFxyXG4gIFxyXG5cclxuICB9XHJcbiAgXHJcbiAgYnVsa0Fzc2lnbmFzeGxzeCgpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5idWxrVXBsb2FkLHtjZW50ZXJlZDogdHJ1ZX0pXHJcbiAgfVxyXG5cclxuICBhZGRTaW5nbGVVc2VyKCkge1xyXG4gICAgXHJcbiAgfVxyXG4gIFxyXG4gIGV4Y2VsRXJyb3I6IGFueTtcclxuICBleGNlbERhdGE6IGFueSA9IFtdXHJcbiAgdmFsaWRhdGVkT3V0cHV0OiBhbnkgPSBbXTtcclxuXHJcbiAgZ2V0U3RvcmVDb3VudHMoZGF0YTogYW55KSB7XHJcblxyXG4gICAgY29uc3QgdW5pcXVlVXNlck5hbWVzID0gbmV3IFNldChkYXRhPy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVsnU3RvcmUgTmFtZS9TdG9yZSBJZCddKSk7XHJcbiAgICByZXR1cm4gdW5pcXVlVXNlck5hbWVzLnNpemU7XHJcblxyXG4gIH1cclxuXHJcbiAgICBnZXRFbWFpbENvdW50cyhkYXRhOiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCB1bmlxdWVVc2VyTmFtZXMgPSBuZXcgU2V0KGRhdGE/Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtWydFbWFpbCddKSk7XHJcbiAgICByZXR1cm4gdW5pcXVlVXNlck5hbWVzLnNpemU7XHJcblxyXG4gIH1cclxuXHJcbiAgb25VcGxvYWQxKGU6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IGFueVtdO1xyXG4gICAgbGV0IGVycm9yOiBhbnkgPSBbXTtcclxuICAgIGxldCBzdG9yZU5hbWU6IGFueSA9ICcnO1xyXG5cclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBlLnRhcmdldC5maWxlc1swXTtcclxuICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9ucyA9IC9cXC4oeGxzfHhsc3h8Y3N2KSQvaTtcclxuICBjb25zdCBhbGxvd2VkVHlwZXMgPSBbXHJcbiAgICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCIsIFxyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFwidGV4dC9jc3ZcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFwiYXBwbGljYXRpb24vY3N2XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgXTtcclxuXHJcbiAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy50ZXN0KGZpbGUubmFtZSkgfHwgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiT25seSAueGxzeCwgb3IgLmNzdiBmaWxlcyBhcmUgYWxsb3dlZC5cIik7XHJcbiAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gPERhdGFUcmFuc2Zlcj5lLnRhcmdldDtcclxuICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoISF0YXJnZXQuZmlsZXNbMF0ubmFtZS5tYXRjaCgvKC54bHN8Lnhsc3gpLykpIHtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFdvcmtCb29rID0gcmVhZChic3RyLCB7IHR5cGU6IFwiYmluYXJ5XCIgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBXb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcclxuICAgICAgICBkYXRhID0gdXRpbHMuc2hlZXRfdG9fanNvbih3cyk7XHJcbiAgICAgICAgdGhpcy5leGNlbERhdGEgPSBkYXRhO1xyXG4gICAgICAgIHN0b3JlTmFtZSA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0LmZpbGVzWzBdKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGFzeW5jIChlKSA9PiB7XHJcblxyXG4gICAgICAgICBpZiAoc3RvcmVOYW1lICE9PSBcIlVzZXJzXCIpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJDYW4geW91IGNvbmZpcm0gd2hldGhlciB0aGUgc2hlZXQgbmFtZSBpcyBVc2VycyA/XCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IFsnU3RvcmUgTmFtZS9TdG9yZSBJZCcsJ0VtYWlsJ10gLy8gTXVzdCBhbHdheXMgYmUgcHJlc2VudFxyXG4gICAgICAgIC8vIGNvbnN0IG9wdGlvbmFsS2V5cyA9IFsndXNlclBob25lJywgJ2NpdHknXSA6IFsnY2l0eSddO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBkYXRhLnNvbWUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xyXG4gICAgICAgICAgY29uc3QgaGFzUmVxdWlyZWRLZXlzID0gcmVxdWlyZWRLZXlzLmV2ZXJ5KGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xyXG4gICAgICAgICAgY29uc3QgYWxsS2V5c0FyZUFsbG93ZWQgPSBrZXlzLmV2ZXJ5KGtleSA9PiBcclxuICAgICAgICAgICAgcmVxdWlyZWRLZXlzLmluY2x1ZGVzKGtleSlcclxuICAgICAgICAgICAgLy8gfHwgb3B0aW9uYWxLZXlzLmluY2x1ZGVzKGtleSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gaGFzUmVxdWlyZWRLZXlzICYmIGFsbEtleXNBcmVBbGxvd2VkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoJ1BsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YT8uZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudD8uRW1haWwpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5FbWFpbCA9IGVsZW1lbnQ/LkVtYWlsLnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoICFlbGVtZW50Py5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSB8fCBlbGVtZW50Py5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSA9PSAnJyB8fCBlbGVtZW50Py5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgU3RvcmUgTmFtZS9TdG9yZSBJZCAtIEIke2luZGV4ICsgMn1gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFlbGVtZW50Py5FbWFpbCB8fCBlbGVtZW50Py5FbWFpbD8udHJpbSgpID09ICcnIHx8IGVsZW1lbnQuRW1haWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGBJbnZhbGlkIEVtYWlsIC0gQSR7aW5kZXggKyAyfWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudD8uRW1haWwgJiYgIWVsZW1lbnQuRW1haWwubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgRW1haWwgLSBBJHtpbmRleCArIDJ9YClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgICAgICB0aXRsZTogYEludmFsaWQgZGV0YWlscyFgLFxyXG4gICAgICAgICAgICBjb250ZW50OiBgUGxlYXNlIHByb3ZpZGUgY29ycmVjdCBhbmQgY29tcGxldGUgc3RvcmUgaW5mb3JtYXRpb24uYCxcclxuICAgICAgICAgICAgYnV0dG9udHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmFmdGVyVXBsbG9hZChwb3B1cGNvbnRlbnQpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGFwaURhdGEgPSB0aGlzLmV4Y2VsRGF0YS5tYXAoKGVsOiBhbnkpID0+e1xyXG4gICAgICAgICAgcmV0dXJuIHtzdG9yZSA6IGVsPy5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSxcclxuICAgICAgICAgIGVtYWlsIDogZWw/LkVtYWlsfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgICAgIC5idWxrVXNlckFzc2lnbih7XHJcbiAgICAgICAgICAgIGRhdGE6IGFwaURhdGFcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgaWYgKHJlcy5zdGF0dXM9PT0nZXJyb3InJiZyZXMuZXJyb3IuZXJyb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgICAgICB0aXRsZTogYEludmFsaWQgZGV0YWlscyFgLFxyXG4gICAgICAgICAgICBjb250ZW50OiBgUGxlYXNlIHByb3ZpZGUgY29ycmVjdCBhbmQgY29tcGxldGUgc3RvcmUgaW5mb3JtYXRpb24uYCxcclxuICAgICAgICAgICAgYnV0dG9udHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3I6IHJlcy5lcnJvci5lcnJvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hZnRlclVwbGxvYWQocG9wdXBjb250ZW50KVxyXG4gICAgICAgICAgdGhpcy5pbnB1dEZpbGUxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5hZnRlclVwbGxvYWQoKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGVkT3V0cHV0ID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT4ge1xyXG4gICAgICAgIGlmIChlcnIuZXJyb3IuY29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgICAgICB0aXRsZTogYEludmFsaWQgZGV0YWlscyFgLFxyXG4gICAgICAgICAgICBjb250ZW50OiBgUGxlYXNlIHByb3ZpZGUgY29ycmVjdCBhbmQgY29tcGxldGUgc3RvcmUgaW5mb3JtYXRpb24uYCxcclxuICAgICAgICAgICAgYnV0dG9udHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3I6ZXJyLmVycm9yLmVycm9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmFmdGVyVXBsbG9hZChwb3B1cGNvbnRlbnQpXHJcbiAgICAgICAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yKTtcclxuICAgICAgICAgIHRoaXMuaW5wdXRGaWxlMS5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgLy8gJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKT8udmFsKFwiXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgUmV1cGxvYWQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgIHByb2NlZWRTdWJtaXQoKSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtkYXRhOnRoaXMudmFsaWRhdGVkT3V0cHV0fSBcclxuICAgIHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgLmFzc2lnbkRhdGEocGF5bG9hZClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYFN0b3JlcyBBc3NpZ25lZCB0byBVc2VyIFN1Y2Nlc3NmdWxseSFgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFVuYWJsZSB0byBhc3NpZ24gU3RvcmVzIHRvIHVzZXIhYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoJ3N1Ym1pdCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gQXNzaWduIFN0b3JlcyB0byBVc2VyIVwiKTtcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VhY3RpdmVwb3B1cCgpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICB9XHJcblxyXG4gIGFmdGVyVXBsbG9hZChkYXRhPzogYW55KSB7XHJcbiAgICB0aGlzLmV4Y2VsRXJyb3IgPSBkYXRhO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmFmdGVyVmFsaWRhdGlvbiwgeyBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnLCBzaXplOiAnbGcnLCB3aW5kb3dDbGFzczogJ2N1c3RvbS1tb2RhbC13aWR0aCcgfSlcclxuICB9XHJcblxyXG4gIHVzZXJTdGF0dXNDaGFuZ2UodXNlcjogYW55LCBpOiBudW1iZXIpIHtcclxuICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWxlcnRQb3B1cENvbXBvbmVudCx7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLGJhY2tkcm9wOlwic3RhdGljXCIgfSk7ICAgXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VyID0gdXNlcjtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICBpZiAocmVzdWx0ID09PSdzdWJtaXQnKSB7XHJcbiAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlVXNlcih7IGVtYWlsOiB1c2VyPy5lbWFpbCwgaXNBY3RpdmU6IHVzZXIuaXNBY3RpdmV9KS5zdWJzY3JpYmUoe1xyXG4gICAgIG5leHQ6KHJlczphbnkpPT4ge1xyXG4gICAgICAgaWYocmVzICYmIHJlcy5jb2RlPT0yMDApIHtcclxuICAgICAgICAgaWYodXNlci5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnVXNlciBTdGF0dXMgQWN0aXZhdGVkIScpO1xyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnVXNlciBTdGF0dXMgRGVhY3RpdmF0ZWQhJyk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byBDaGFuZ2UgVXNlciBTdGF0dXMhJyk7XHJcbiAgICAgICAgIHRoaXMudXNlckxpc3RbaV0uaXNBY3RpdmU9IXVzZXIuaXNBY3RpdmU7XHJcbiAgICAgICB9XHJcbiAgICAgfSxcclxuICAgICBlcnJvcjooKT0+e1xyXG4gICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdCgnVW5hYmxlIHRvIENoYW5nZSBVc2VyIFN0YXR1cyEnKTtcclxuICAgICAgIHRoaXMudXNlckxpc3RbaV0uaXNBY3RpdmU9IXVzZXIuaXNBY3RpdmU7XHJcbiAgICAgfSxcclxuICAgICBjb21wbGV0ZTooKT0+e31cclxuICAgfSlcclxuICB9IGVsc2UgaWYocmVzdWx0ID09PSdjbG9zZScpIHtcclxuICAgIHRoaXMudXNlckxpc3RbaV0uaXNBY3RpdmU9IXVzZXIuaXNBY3RpdmU7XHJcbiAgfVxyXG59XHJcbn0pXHJcbiB9XHJcbiBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiB9XHJcbiBnZXRSb2xlcygpIHtcclxuICB2YXIgZGF0YSA9IHsgXHJcbiAgICAgIHVzZXJUeXBlOiAnY2xpZW50JyxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnM/LmNsaWVudFxyXG4gICAgfVxyXG4gIHRoaXMudXNlclNlcnZpY2UuZ2V0Um9sZXMoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnJvbGVzID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgIHRoaXMucm9sZXNDb3VudCA9IHJlcy5kYXRhLmNvdW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvbGVzID0gW107XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSxcclxuICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICB9KTtcclxufVxyXG51c2VyRGV0aWFscyhyb2xlOiBhbnkpIHtcclxuICBsZXQgb2JqID17XHJcbiAgICByb2xlOnJvbGUsXHJcbiAgICB1c2VyVHlwZSA6J0JyYW5kIFVzZXInLFxyXG4gICAgcmVjZWl2ZWREYXRhOlwiUm9sZSBWYWx1ZVwiXHJcbiAgfVxyXG4gIHRoaXMudXNlclNlcnZpY2Uucm9sZXNDb21tcy5uZXh0KG9iaik7XHJcbiAgdGhpcy5yZWNlaXZlZERhdGEgPSdSb2xlIFZhbHVlJztcclxufVxyXG5yZWNlaXZlRGF0YShkYXRhOiBzdHJpbmcpIHtcclxuICB0aGlzLnJlY2VpdmVkRGF0YSA9IGRhdGE7XHJcbiAgdGhpcy51c2VyU2VydmljZS5kYXRhU3ViamVjdC5uZXh0KHRoaXMudXNlckRhdGEpO1xyXG59XHJcblxyXG5vblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICB0aGlzLnVzZXJMaXN0X3JlcS5leHBvcnQgPSBmYWxzZTtcclxuICBpZiAodGhpcy51c2VyTGlzdF9yZXE/LnNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbikge1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5ID0gdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5ID09PSAxID8gLTEgOiAxO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5zb3J0Q29sdW1OYW1lID0gY29sdW1uO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5ID0gMTtcclxuICB9XHJcbiAgdGhpcy5sb2FkVGFibGUoKVxyXG59XHJcblxyXG5hcHBseUZpbHRlcnMoZXZlbnQ6YW55KXtcclxuICBpZiAoZXZlbnQ/Lmxlbmd0aCkge1xyXG4gICAgZXZlbnQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlJvbGVzXCIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJTdGF0dXNcIikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlTdGF0dXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEubGltaXQ9MTA7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5leHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5Um9sZXMgPSB0aGlzLmZpbHRlckJ5Um9sZXM7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVN0YXR1cyA9IHRoaXMuZmlsdGVyQnlTdGF0dXM7XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpXHJcbn1cclxuc2VsZWN0QWxsQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5zZWxlY3RlZFVzZXJzOiBhbnlbXSA9IFtdOyBcclxuY3JlYXRlVGVhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5vblNlbGVjdEFsbCgpIHtcclxuICB0aGlzLnNlbGVjdEFsbENoZWNrZWQgPSAhdGhpcy5zZWxlY3RBbGxDaGVja2VkOyBcclxuXHJcbiAgdGhpcy51c2VyTGlzdC5mb3JFYWNoKHVzZXIgPT4ge1xyXG4gICAgdXNlci5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGxDaGVja2VkOyBcclxuICB9KTtcclxuICBpZiAodGhpcy5zZWxlY3RBbGxDaGVja2VkKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbLi4udGhpcy51c2VyTGlzdF07XHJcbiAgICB0aGlzLmNyZWF0ZVRlYW0gPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICAgIHRoaXMuY3JlYXRlVGVhbSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbm9uU2VsZWN0ZWRUZWFtcyh1c2VyOiBhbnksaW5kZXg6YW55KSB7XHJcbiAgICB1c2VyLmNoZWNrZWQgPSAhdXNlci5jaGVja2VkO1xyXG4gICAgaWYgKHVzZXIuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMucHVzaCh1c2VyKTtcclxuICAgIH0gZWxzZSBpZih1c2VyLmNoZWNrZWQgPT09ZmFsc2UpIHtcclxuICAgICAgIGNvbnN0IHN0b3JlSW5kZXggPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmluZEluZGV4KHNlbGVjdGVkVXNlciA9PiBzZWxlY3RlZFVzZXIuX2lkID09PSB1c2VyLl9pZCk7XHJcbiAgICAgIGlmIChzdG9yZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZCA9IHRoaXMudXNlckxpc3QuZXZlcnkoc3RvcmUgPT4gc3RvcmUuY2hlY2tlZCk7XHJcbiAgICB0aGlzLmNyZWF0ZVRlYW0gPSB0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRlYW1zKCl7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGVhbXNDcmVhdGlvbkNvbXBvbmVudCx7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLGJhY2tkcm9wOidzdGF0aWMnIH0pOyAgICBcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRlYW1zVXNlcnMgPSB0aGlzLnNlbGVjdGVkVXNlcnM7XHJcbiAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gICAgICAgdGhpcy5zZWxlY3RBbGxDaGVja2VkID1mYWxzZTtcclxuICAgICAgIHRoaXMuY3JlYXRlVGVhbSA9IGZhbHNlO1xyXG4gICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW11cclxuICAgICAgfSlcclxuICB9XHJcbn0iLCI8ZGl2ICpuZ0lmPVwicmVjZWl2ZWREYXRhICE9PSdSb2xlIFZhbHVlJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXIgcmlnaHRjb3JuZXIgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY3JlYXRlVGVhbVwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VhcmNoXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItZmlsdGVycyBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydFhMU1goKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgcC00IGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHxhc3luYyk/Lkdsb2JhbF9Vc2VyX2lzQWRkXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJidWxrQXNzaWduYXN4bHN4KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiBidG4tb3V0bGluZSBwLTQgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPjxzcGFuIGNsYXNzPVwibXMtMlwiPkJ1bGsgQXNzaWduPC9zcGFuPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHxhc3luYyk/Lkdsb2JhbF9Vc2VyX2lzQWRkXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ1c2VycygnYWRkJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteC0yIHJvdW5kZWQtMyB0ZXh0LW5vd3JhcFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAwMSA0LjE2NjYzVjE1LjgzMzNNNC4xNjY3NSA5Ljk5OTk2SDE1LjgzMzRcIiBzdHJva2U9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LXdoaXRlXCI+QWRkIFVzZXI8L3NwYW4+IDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjcmVhdGVUZWFtXCIgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiY3JlYXRlVGVhbXMoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG14LTIgcm91bmRlZC0zIHRleHQtbm93cmFwXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC4wMDAxIDQuMTY2NjNWMTUuODMzM000LjE2Njc1IDkuOTk5OTZIMTUuODMzNFwiIHN0cm9rZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5DcmVhdGUgVGVhbTwvc3Bhbj4gPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIW5vRGF0YVwiIGNsYXNzPVwiY2FyZC1ib2R5IHAtMFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXAgXCI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8YXN5bmMpPy5HbG9iYWxfVXNlcl9pc0FkZFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXRjaGVja1wiPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiAoY2xpY2spPVwib25TZWxlY3RBbGwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0QWxsQ2hlY2tlZFwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ3VzZXJOYW1lJylcIj5OYW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInVzZXJMaXN0X3JlcT8uc29ydENvbHVtTmFtZSA9PT0gJ3VzZXJOYW1lJyAmJiB1c2VyTGlzdF9yZXE/LnNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAndXNlck5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdlbWFpbCcpXCI+RW1haWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAnZW1haWwnICYmIHVzZXJMaXN0X3JlcT8uc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ1c2VyTGlzdF9yZXE/LnNvcnRDb2x1bU5hbWUgPT09ICdlbWFpbCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvblNvcnQoJ21vYmlsZU51bWJlcicpXCI+Q29udGFjdCBOdW1iZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAnbW9iaWxlTnVtYmVyJyAmJiB1c2VyTGlzdF9yZXE/LnNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAnbW9iaWxlTnVtYmVyJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgncm9sZScpXCI+Um9sZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAncm9sZScgJiYgdXNlckxpc3RfcmVxPy5zb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInVzZXJMaXN0X3JlcT8uc29ydENvbHVtTmFtZSA9PT0gJ3JvbGUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7XCI+QXNzaWduZWQgVG8gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7XCI+QXMgYSBMZWFkIFRvIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7XCI+QWN0aW9uczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlckxpc3Q7bGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIihncy51c2VyQWNjZXNzIHxhc3luYyk/Lkdsb2JhbF9Vc2VyX2lzQWRkXCI+PHNwYW4gY2xhc3M9XCJpbnB1dGNoZWNrXCI+PGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIG10LTJcIiBbKG5nTW9kZWwpXT1cInVzZXIuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RlZFRlYW1zKHVzZXIsaSlcIj48L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3VzZXI/LnVzZXJOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGdldE1hc2tlZFZhbHVlKHVzZXI/LmVtYWlsLCB1c2VySW5mbz8ucm9sZSkgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGdldE1hc2tlZE1vYmlsZSh1c2VyPy5tb2JpbGVOdW1iZXIsIHVzZXJJbmZvPy5yb2xlKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ1c2VyPy5yb2xlID09PSdzdXBlcmFkbWluJ1wiPlN1cGVyIEFkbWluPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInVzZXI/LnJvbGUgIT09J3N1cGVyYWRtaW4nXCI+e3t1c2VyPy5yb2xlIHwgdGl0bGVjYXNlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeVwiPnt7dXNlcj8uYXNzaWduZWRTdG9yZXN8fDB9fSBTdG9yZXM8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtaW5mb1wiPnt7dXNlcj8udGVhbUNvdW50fHwwfX0gVGVhbXM8L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXB1cnBsZVwiPnt7dXNlcj8uY2x1c3RlckNvdW50fHwwfX0gQ2x1c3RlcnM8L3NwYW4+IDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtaW5mb1wiPnt7dXNlcj8udGVhbWxlYWR8fDB9fSBUZWFtczwvc3Bhbj48L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMyBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJWaWV3dXNlcnMoJ3ZpZXcnLHVzZXIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjEgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTk5NV8xNjQwMClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMS4zMzMyNSAxMEMxLjMzMzI1IDEwIDQuNjY2NTggMy4zMzMzNyAxMC40OTk5IDMuMzMzMzdDMTYuMzMzMyAzLjMzMzM3IDE5LjY2NjYgMTAgMTkuNjY2NiAxMEMxOS42NjY2IDEwIDE2LjMzMzMgMTYuNjY2NyAxMC40OTk5IDE2LjY2NjdDNC42NjY1OCAxNi42NjY3IDEuMzMzMjUgMTAgMS4zMzMyNSAxMFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAuNDk5OSAxMi41QzExLjg4MDYgMTIuNSAxMi45OTk5IDExLjM4MDggMTIuOTk5OSAxMEMxMi45OTk5IDguNjE5MzMgMTEuODgwNiA3LjUwMDA0IDEwLjQ5OTkgNy41MDAwNEM5LjExOTIxIDcuNTAwMDQgNy45OTk5MiA4LjYxOTMzIDcuOTk5OTIgMTBDNy45OTk5MiAxMS4zODA4IDkuMTE5MjEgMTIuNSAxMC40OTk5IDEyLjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xOTk1XzE2NDAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKGdzLnVzZXJBY2Nlc3MgfCBhc3luYyk/Lkdsb2JhbF9Vc2VyX2lzRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTMgY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInVzZXJJbmZvLnJvbGUhPT0ndXNlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJhc3NpZ25TdG9yZSh1c2VyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF1c2VyPy5pc0FjdGl2ZSB8fCB1c2VyPy5yb2xlID09PSdzdXBlcmFkbWluJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMiBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtMyB0ZXh0LW5vd3JhcCBib3JkZXItdmFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yXCI+QXNzaWduPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIiAqbmdJZj1cInVzZXJJbmZvLnJvbGUhPT0ndXNlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgbXQtM1wiIHR5cGU9XCJjaGVja2JveFwiIHJvbGU9XCJzd2l0Y2hcIiBpZD1cInN1cHBvcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKChncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5HbG9iYWxfVXNlcl9pc0VkaXQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInVzZXJTdGF0dXNDaGFuZ2UodXNlcixpKVwiIFsobmdNb2RlbCldPVwidXNlckxpc3RbaV0uaXNBY3RpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAodXNlckxpc3RbaV0uaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWFjdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhbm9EYXRhXCIgY2xhc3M9XCJjb2wteHhsLTEyIGNvbC1tZC0xMiBjb2wteGwtMTIgY29sLWxnLTEyIG15LTNcIj5cclxuICAgICAgICA8bGliLXBhZ2luYXRpb24gKm5nSWY9XCJ1c2VyTGlzdC5sZW5ndGghPT0wXCIgW2l0ZW1zUGVyUGFnZV09XCJwYWdpbmF0aW9uLmxpbWl0XCIgW2N1cnJlbnRQYWdlXT1cInBhZ2luYXRpb24ub2Zmc2V0XCJcclxuICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwicGFnaW5hdGlvbi50b3RhbENvdW50XCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnaW5hdGlvblNpemUoKVwiXHJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJsb2FkaW5nXCIgY2xhc3M9XCJyb3cgbG9hZGVyICBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyIG1iLTEwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwibm9EYXRhXCIgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS1iZWdpbjo6Um93LS0+XHJcbjxkaXYgKm5nSWY9XCJyZWNlaXZlZERhdGEgPT09J1JvbGUgVmFsdWUnXCIgY2xhc3M9XCJyb3cgZ3gtNSBneC14bC0xMFwiPlxyXG4gICAgPCEtLWJlZ2luOjpDb2wtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHhsLTEyIGNvbC1tZC0xMiBjb2wteGwtMTIgY29sLWxnLTEyXCI+XHJcbiAgICAgICAgPGxpYi1yb2xlcy1wZXJtaXNzaW9uLXRhYmxlIChkYXRhRXZlbnQpPVwicmVjZWl2ZURhdGEoJGV2ZW50KVwiPjwvbGliLXJvbGVzLXBlcm1pc3Npb24tdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS1lbmQ6OkNvbC0tPlxyXG48L2Rpdj5cclxuPCEtLWVuZDo6Um93LS0+XHJcblxyXG48bmctdGVtcGxhdGUgI2J1bGtVcGxvYWQgbGV0LW1vZGFsPlxyXG4gICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGZsZXgtY29sdW1uIHAtOVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlci10aXRsZVwiPkJ1bGsgQXNzaWduPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNTAwIG10LTZcIj5cclxuICAgICAgICA8b2wgY2xhc3M9XCJjdXN0b20tb3JkZXJlZC1saXN0IHRleHQtZ3JheS00MDAgZnctYm9sZCBweC01IGZzLTZcIj5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0XCI+VXNlIHRoZSB0ZW1wbGF0ZSBiZWxvdyB0byBhc3NpZ24gbXVsdGlwbGUgdXNlcnMgdG8gbXVsdGlwbGUgc3RvcmVzIGF0IG9uY2UuPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0IG15LTNcIj48c3BhbiBjbGFzcz1cInVzZXItdGV4dFwiPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlIC0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJtcy0xXCIgaHJlZj1cIi4uLy4uLy4uL2Fzc2V0cy9maWxlcy9CdWxrQXNzaWduVGVtcGxhdGUueGxzeFwiIGRvd25sb2FkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTUuODMzMzMgOC4zMzMzM0wxMCAxMi41TTEwIDEyLjVMMTQuMTY2NyA4LjMzMzMzTTEwIDEyLjVWMi41XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlbXBsYXRlIG1zLTJcIj5Eb3dubG9hZCBUZW1wbGF0ZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0IG15LTNcIj5BZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlPC9saT5cclxuICAgICAgICAgICAgPGxpIGNsYXNzPVwidXNlci10ZXh0IG15LTNcIj5VcGxvYWQgaXQgYmVsb3cgZm9yIHByb2Nlc3Npbmc8L2xpPiAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIiB3LTEwMCByaWdodC1iYXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCIgPlxyXG4gICAgICAgIDxpbnB1dCBuYW1lPVwiYWNjb3VudFR5cGVcIiB0eXBlPVwicmFkaW9cIiBpZD1cImt0X2NyZWF0ZV9hY2NvdW50X2Zvcm1fYWNjb3VudF90eXBlX3BlcnNvbmFsMVwiIGFjY2VwdCA9IFwiLmNzdiwgYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQsIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiIHZhbHVlPVwicGVyc29uYWwxXCJcclxuICAgICAgICBjbGFzcz1cImJ0bi1jaGVja1wiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJvblVwbG9hZDEoJGV2ZW50KVwiXHJcbiAgICAgICAgbmctcmVmbGVjdC12YWx1ZT1cInBlcnNvbmFsXCIgdHlwZT1cImZpbGVcIiAjaW5wdXRGaWxlMSAvPlxyXG4gICAgICAgIDxsYWJlbCBmb3I9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbDFcIiBjbGFzcz1cIiB3LTEtMCBwLTRcIj48c3BhblxyXG4gICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGQgdGV4dC1jZW50ZXIgdy0xMDAgZnMtNFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQ2XCIgaGVpZ2h0PVwiNDZcIiB2aWV3Qm94PVwiMCAwIDQ2IDQ2XCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBmaWxsPVwiI0YyRjRGN1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8cmVjdCB4PVwiM1wiIHk9XCIzXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgcng9XCIyMFwiIHN0cm9rZT1cIiNGOUZBRkJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjZcIiAvPlxyXG4gICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDQ3XzQwNTY2KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjYuMzMzMyAyNi4zMzM0TDIzIDIzTTIzIDIzTDE5LjY2NjYgMjYuMzMzNE0yMyAyM1YzMC41TTI5Ljk5MTYgMjguMzI1QzMwLjgwNDQgMjcuODgxOSAzMS40NDY1IDI3LjE4MDggMzEuODE2NSAyNi4zMzIyQzMyLjE4NjYgMjUuNDgzNyAzMi4yNjM1IDI0LjUzNjEgMzIuMDM1MSAyMy42Mzg5QzMxLjgwNjggMjIuNzQxOCAzMS4yODYyIDIxLjk0NjMgMzAuNTU1NSAyMS4zNzc5QzI5LjgyNDggMjAuODA5NSAyOC45MjU3IDIwLjUwMDYgMjggMjAuNUgyNi45NUMyNi42OTc3IDE5LjUyNDQgMjYuMjI3NiAxOC42MTg2IDI1LjU3NDkgMTcuODUwOUMyNC45MjIyIDE3LjA4MzEgMjQuMTA0IDE2LjQ3MzIgMjMuMTgxNyAxNi4wNjcyQzIyLjI1OTQgMTUuNjYxMiAyMS4yNTcxIDE1LjQ2OTUgMjAuMjUwMSAxNS41MDY2QzE5LjI0MyAxNS41NDM3IDE4LjI1NzUgMTUuODA4NiAxNy4zNjc2IDE2LjI4MTRDMTYuNDc3NyAxNi43NTQyIDE1LjcwNjYgMTcuNDIyNiAxNS4xMTIyIDE4LjIzNjNDMTQuNTE3NyAxOS4wNTAxIDE0LjExNTUgMTkuOTg4IDEzLjkzNTggMjAuOTc5NUMxMy43NTYgMjEuOTcxMSAxMy44MDM0IDIyLjk5MDUgMTQuMDc0MyAyMy45NjExQzE0LjM0NTIgMjQuOTMxNyAxNC44MzI3IDI1LjgyODIgMTUuNSAyNi41ODM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzQ3NTQ2N1wiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA0N180MDU2NlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDEzIDEzKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtdGl0bGUgbWItM1wiPjxzcGFuIGNsYXNzPVwiY2xpY2stdXBsb2FkIGN1cnNvci1wb2ludGVyXCI+Q2xpY2sgdG9cclxuICAgICAgICAgICAgICAgICAgICB1cGxvYWQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YS1zdWJcIj50aGUgZGF0YSBhZGRlZCB0ZW1wbGF0ZSBmaWxlIGZvciBwcm9jZXNzaW5nLjwvZGl2PlxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNhZnRlclZhbGlkYXRpb24gbGV0LW1vZGVsPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhcmQgYm9yZGVyLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgbXQtMFwiPlxyXG4gICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgbXQtM1wiPjxzcGFuIGNsYXNzPVwiY29uZmlnLWhlYWRpbmcgZnctc2VtaWJvbGQgdy1hdXRvXCI+QnVsayBBc3NpZ248L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwdC0wIHBvcHVwLXNjcm9sbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jYXJkIHJvdW5kZWQtMyBwLTMgZmxleC1jb2x1bW4gaC03MHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgY29uZmlnLWhlYWRpbmcgdy0xMDBcIj57e2dldEVtYWlsQ291bnRzKGV4Y2VsRGF0YSl9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIHN1YnRpdGxlIG10LTFcIj5Ub3RhbCBSZWNvcmRzPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNhcmQgcm91bmRlZC0zIHAtMyBmbGV4LWNvbHVtbiBoLTcwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGNvbmZpZy1oZWFkaW5nIHctMTAwXCI+e3tleGNlbERhdGE/Lmxlbmd0aH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCBzdWJ0aXRsZSBtdC0xXCI+Um93cyBwcm9jZXNzZWQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jYXJkIHJvdW5kZWQtMyBwLTMgZmxleC1jb2x1bW4gaC03MHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZXhjZWxFcnJvciA/ICdlcnJvci1oZWFkaW5nJzonJ1wiIGNsYXNzPVwiZnctc2VtaWJvbGQgdy0xMDAgdGV4dC1lcnJvclwiPnt7ZXhjZWxFcnJvcj8uZXJyb3I/Lmxlbmd0aCB8fCAwfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJleGNlbEVycm9yID8gJ2V4Y2VsLWVycm9yJzonJ1wiIGNsYXNzPVwiZnctc2VtaWJvbGQgbXQtMSB0ZXh0LWVycm9yXCI+RXJyb3I8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZXhjZWxFcnJvclwiIGNsYXNzPVwidGFibGUtaGVhZGVyIG10LTVcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ID5Zb3UncmUgYWJvdXQgdG8gYXNzaWduIHt7Z2V0RW1haWxDb3VudHMoZXhjZWxEYXRhKX19IHt7Z2V0RW1haWxDb3VudHMoZXhjZWxEYXRhKSA+IDEgPyAnVXNlcnMnIDogJ1VzZXInfX0uIEFyZSB5b3Ugc3VyZSB3YW50IHRvIHByb2NlZWQ/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImV4Y2VsRXJyb3JcIiBjbGFzcz1cImZsZXgtY29sdW1uIG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaGVhZGluZyBmdy1ib2xkXCI+SW52YWxpZCBEZXRhaWxzICE8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZSBtdC01XCI+UGxlYXNlIHByb3ZpZGUgY29ycmVjdCBpbmZvcm1hdGlvbi48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTUgdy0xMDAgcm91bmRlZC0zIGJvcmRlci1lcnJvciBtdC01IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXhjZWxFcnJvcj8uZXJyb3I7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiIFtuZ0NsYXNzXT1cIiFsYXN0ID8gJ21iLTInIDogJydcIiBjbGFzcz1cInRleHQtZXJyb3JcIj57e2kgKyAxfX0pIHt7ZXJyb3J9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgZmxleC13cmFwIGdhcC0yIHB0LTBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgYnRuLWRlZmF1bHQgYnRuLW91dGxpbmVcIiAoY2xpY2spPVwiY2xvc2VhY3RpdmVwb3B1cCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZXhjZWxFcnJvclwiIGNsYXNzPVwiYnRuIGJ0bi1tZCBweS0zIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInByb2NlZWRTdWJtaXQoKVwiPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImV4Y2VsRXJyb3JcIiBjbGFzcz1cImJ0biBweS0zIGJ0bi1tZCBidG4tZGVmYXVsdCBtcy0zIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiZmlsZTEuY2xpY2soKTtcIj5SZXVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNmaWxlMSB0eXBlPVwiZmlsZVwiIGlkPVwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzJcIiBhY2NlcHQgPSBcIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25VcGxvYWQxKCRldmVudClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
819
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtdXNlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtdXNlcnMvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLW1hbmFnZS11c2Vycy9icmFuZC11c2VyL2JyYW5kLXVzZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXVzZXJzL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1tYW5hZ2UtdXNlcnMvYnJhbmQtdXNlci9icmFuZC11c2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFxQixZQUFZLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUU1SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVuRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUsvRixPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBa0QsTUFBTSxNQUFNLENBQUM7QUFDMUYsT0FBTyxFQUFZLElBQUksRUFBRSxLQUFLLEVBQWEsTUFBTSxNQUFNLENBQUM7QUFDeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLDRGQUE0RjtBQUM1RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUN0RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQzs7Ozs7Ozs7Ozs7QUFFeEcsK0RBQStEO0FBTy9ELE1BQU0sT0FBTyxrQkFBa0I7SUFxQ3JCO0lBQStCO0lBQzlCO0lBQ0E7SUFDRDtJQUNDO0lBRUE7SUFDQTtJQUNBO0lB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TUFBTTtnQkFFa0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZO2dCQUNFLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDTyxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0ICxFdmVudEVtaXR0ZXIsIE91dHB1dCwgVmlld0NoaWxkLCBFbGVtZW50UmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHsgQWRkVXNlclBvcHVwQ29tcG9uZW50IH0gZnJvbSBcIi4uL2FkZC11c2VyLXBvcHVwL2FkZC11c2VyLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi8uLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgQXNzaWduU3RvcmVQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuLi9hc3NpZ24tc3RvcmUtcG9wdXAvYXNzaWduLXN0b3JlLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgU3dhbCBmcm9tIFwic3dlZXRhbGVydDJcIjtcclxuaW1wb3J0IHsgRXhjZWxTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL2V4Y2VsLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tIFwidGFuZ28tYXBwLXVpLWdsb2JhbFwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBXb3JrQm9vaywgcmVhZCwgdXRpbHMsIFdvcmtTaGVldCB9IGZyb20gXCJ4bHN4XCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbi8vIGltcG9ydCB7IEFsZXJ0UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLXRhYmxlL2FsZXJ0LWJ1bHBvcHVwL2FsZXJ0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFsZXJ0UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi91c2VyLXRhYmxlL2FsZXJ0LXBvcHVwL2FsZXJ0LXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkZFVzZXJzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy12Mi9hZGQtdXNlcnMvYWRkLXVzZXJzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRlYW1zQ3JlYXRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzLXYyL3RlYW1zLWNyZWF0aW9uL3RlYW1zLWNyZWF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG4vLyBpbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWJyYW5kLXVzZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9icmFuZC11c2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vYnJhbmQtdXNlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyYW5kVXNlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCxPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSBkYXRhVG9QYXJlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICAvLyBAT3V0cHV0KCkgZGF0YVRvdXNlcmxpc3Q6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQFZpZXdDaGlsZCgnYnVsa1VwbG9hZCcpIGJ1bGtVcGxvYWQ6IGFueTtcclxuICBAVmlld0NoaWxkKFwiaW5wdXRGaWxlMVwiKSBpbnB1dEZpbGUxOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2FmdGVyVmFsaWRhdGlvbicpIGFmdGVyVmFsaWRhdGlvbjogYW55O1xyXG4gcmVjZWl2ZWREYXRhOmFueT0nJztcclxuIHVzZXJEYXRhOiBzdHJpbmc7XHJcbiBzZWFyY2hWYWx1ZTogYW55O1xyXG4gdXNlckxpc3Q6IGFueVtdID0gW107XHJcbiB1c2VyTGlzdF9yZXE6IGFueTtcclxuIHBhZ2luYXRpb246IGFueSA9IHtcclxuICAgb2Zmc2V0OiAxLFxyXG4gICBsaW1pdDogMTAsXHJcbiAgIHRvdGFsQ291bnQ6IDAsXHJcbiB9O1xyXG4gbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiBub0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcclxuIHBhZ2luYXRpb25TaXplczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMF07XHJcbiBzdXBwb3J0RW1haWw6IHN0cmluZztcclxuIHVzZXJUeXBlOiBzdHJpbmc7XHJcbiAkaGVhZGVyRmlsdGVyczogYW55O1xyXG4gc2VhcmNoSW5wdXQgPSBuZXcgRm9ybUNvbnRyb2woXCJcIik7XHJcbiBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuICByb2xlczogYW55O1xyXG4gIGZpbGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0b3JlczogYW55ID1bXTtcclxuICByb2xlc0NvdW50OiBhbnk7XHJcbiAgU2VsZWN0ZWRUYWI6IGFueTtcclxuICAgIGRhdGFPYmplY3Q6IGFueSA9IFtcclxuICAgIHsgRGVzY3JpcHRpb246ICdSb2xlcycsIElzc3VlczogW3sgdGV4dDogXCJTdXBlciBBZG1pblwiLCBpZDogJ3N1cGVyYWRtaW4nIH0sIHsgdGV4dDogXCJBZG1pblwiLCBpZDogJ2FkbWluJyB9LCB7IHRleHQ6IFwiVXNlclwiLCBpZDogXCJ1c2VyXCIgfV0gfSxcclxuICAgIHsgRGVzY3JpcHRpb246ICdTdGF0dXMnLCBJc3N1ZXM6IFt7IHRleHQ6IFwiQWN0aXZlXCIsIGlkOiAnYWN0aXZlJyB9LCB7IHRleHQ6IFwiRGVhY3RpdmVcIiwgaWQ6ICdkZWFjdGl2ZScgfV0gfVxyXG4gIF07XHJcbiAgZmlsdGVyQnlSb2xlczogYW55O1xyXG4gIGZpbHRlckJ5U3RhdHVzOiBhbnk7XHJcbiAgdXNlckluZm86IGFueTtcclxuIGNvbnN0cnVjdG9yKFxyXG4gICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICBwcml2YXRlIGV4Y2VsU2VydmljZTogRXhjZWxTZXJ2aWNlLFxyXG4gICBwdWJsaWMgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcclxuICAvLyAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiApIHtcclxuICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHtcclxuICAgICBpZiAoZW52KSB7XHJcbiAgICAgICB0aGlzLnN1cHBvcnRFbWFpbCA9IGVudi5zdXBwb3J0X2VtYWlsO1xyXG4gICAgIH1cclxuICAgfSk7ICAgIFxyXG4gfVxyXG5cclxuXHJcbiBzZXRQYWdlRGF0YSgpIHtcclxuICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiVXNlcnNcIik7XHJcbiAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcIk9uYm9hcmQgeW91ciB0ZWFtIGFuZCBoZWxwIHRoZW0gdmlzdWFsaXplIHRoZWlyIHN0b3JlcyBwZXJmb3JtYW5jZVwiKTtcclxuICBsZXQgYnJlYWRjcnVtYnMgOiBhbnlbXT1bXTtcclxuICBpZiAodGhpcy5ncy51c2VyQWNjZXNzLnZhbHVlPy51c2VyVHlwZSA9PT0gXCJ0YW5nb1wiKSB7XHJcbiAgICBicmVhZGNydW1icz0gIFtcclxuICAgICAge1xyXG4gICAgICAgIHRpdGxlOiBcIk1hbmFnZVwiLFxyXG4gICAgICAgIHBhdGg6IFwiL21hbmFnZS9icmFuZHNcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL2JyYW5kc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgIF07XHJcbiAgfSBlbHNlIGlmICh0aGlzLmdzLnVzZXJBY2Nlc3MudmFsdWU/LnVzZXJUeXBlID09PSBcImNsaWVudFwiKSB7XHJcbiAgICBicmVhZGNydW1icz0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IGZhbHNlLFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiTWFuYWdlXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3N1bW1hcnlcIixcclxuICAgICAgICBpc0FjdGl2ZTogZmFsc2UsXHJcbiAgICAgICAgaXNTZXBhcmF0b3I6IHRydWUsXHJcbiAgICAgIH0sXHJcbiAgICBdO1xyXG4gIH1cclxuICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKGJyZWFkY3J1bWJzKTtcclxufVxyXG4gbmdPbkluaXQoKSB7XHJcbiAgdGhpcy51c2VySW5mbyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiKTtcclxuICBcclxuICAgdGhpcy5ncz8uZGF0YVJhbmdlVmFsdWU/LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKT8uc3Vic2NyaWJlKHtcclxuICAgICBuZXh0OihkYXRhOmFueSk9PntcclxuICAgICAgIGlmKGRhdGEgPT09IG51bGwgKSB7XHJcbiAgICAgICAgY29uc3QgdXNlckRhdGE6IGFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyLWluZm9cIikgfHwgXCJ7fVwiKTtcclxuICAgICAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gdXNlckRhdGE7XHJcbiAgICAgICAgdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQgPSB1c2VyRGF0YS5jbGllbnRJZFxyXG4gICAgICAgIHRoaXMudXNlckRhdGEgPSBcImNsaWVudFwiO1xyXG4gICAgICAgICAgIHRoaXMudXNlclR5cGUgPSBcImNsaWVudFwiO1xyXG4gICAgICAgICAgIGlmKHVzZXJEYXRhPy5jbGllbnRJZCl7XHJcbiAgICAgICAgICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgICAgICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgICAgICAgICBsaW1pdDogMTAsXHJcbiAgICAgICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgICAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgICAgICAgICAgZXhwb3J0OmZhbHNlXHJcbiAgICAgICAgICAgfTtcclxuICAgICAgICAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gICAgICAgICAgLy8gIHRoaXMuZ2V0Um9sZXMoKTtcclxuICAgICAgICAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gZGF0YTtcclxuICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0gXCJjbGllbnRcIjtcclxuICAgICAgICAgICB0aGlzLnVzZXJUeXBlID0gXCJjbGllbnRcIjtcclxuICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0ID0gMTtcclxuICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSAxMDtcclxuICAgICAgICAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgICAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgICAgIG9mZnNldDogMSxcclxuICAgICAgICAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgICAgICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgICAgICBleHBvcnQ6ZmFsc2VcclxuICAgICAgICAgICB9O1xyXG4gICAgICAgICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgICAgICAgICAvLyAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgICAgICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgICAgIH0gXHJcbiAgICAgfVxyXG4gICB9KTtcclxuXHJcbiBcclxuICB9XHJcbiAgZ2V0TWFza2VkVmFsdWUodmFsdWU6IHN0cmluZywgcm9sZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmIChyb2xlID09PSAnc3VwZXJhZG1pbicpIHJldHVybiB2YWx1ZTtcclxuICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmluY2x1ZGVzKCdAJykpIHJldHVybiAnJztcclxuXHJcbiAgICBjb25zdCBbbG9jYWwsIGRvbWFpbl0gPSB2YWx1ZS5zcGxpdCgnQCcpO1xyXG4gICAgY29uc3QgdmlzaWJsZUxlbmd0aCA9IE1hdGgubWluKDUsIGxvY2FsLmxlbmd0aCk7XHJcbiAgICBjb25zdCB2aXNpYmxlUGFydCA9IGxvY2FsLnNsaWNlKDAsIHZpc2libGVMZW5ndGgpO1xyXG4gICAgY29uc3QgbWFza2VkUGFydCA9ICcqJy5yZXBlYXQobG9jYWwubGVuZ3RoIC0gdmlzaWJsZUxlbmd0aCk7XHJcblxyXG4gICAgcmV0dXJuIGAke3Zpc2libGVQYXJ0fSR7bWFza2VkUGFydH1AJHtkb21haW59YDtcclxuICB9XHJcbiAgZ2V0TWFza2VkTW9iaWxlKHZhbHVlOiBzdHJpbmcsIHJvbGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAocm9sZSA9PT0gJ3N1cGVyYWRtaW4nKSByZXR1cm4gdmFsdWU7XHJcbiAgICBpZiAoIXZhbHVlIHx8IHZhbHVlLmxlbmd0aCA8PSA0KSByZXR1cm4gJyonLnJlcGVhdCh2YWx1ZS5sZW5ndGgpO1xyXG4gIFxyXG4gICAgY29uc3QgZmlyc3QyID0gdmFsdWUuc2xpY2UoMCwgMik7XHJcbiAgICBjb25zdCBsYXN0MiA9IHZhbHVlLnNsaWNlKC0yKTtcclxuICAgIGNvbnN0IG1hc2tlZE1pZGRsZSA9ICcqJy5yZXBlYXQodmFsdWUubGVuZ3RoIC0gNCk7XHJcbiAgXHJcbiAgICByZXR1cm4gYCR7Zmlyc3QyfSR7bWFza2VkTWlkZGxlfSR7bGFzdDJ9YDtcclxuICB9XHJcbiBcclxuIHNlYXJjaERhdGEoKSB7XHJcbiAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9MTtcclxuICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPTEwO1xyXG4gIGlmKHRoaXMuc2VhcmNoVmFsdWUgPT09Jycpe1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgbGltaXQ6IDEwLFxyXG4gICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgICBleHBvcnQ6ZmFsc2VcclxuICAgIH07XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVJvbGVzID0gdGhpcy5maWx0ZXJCeVJvbGVzO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzO1xyXG4gICAgdGhpcy5sb2FkVGFibGUoKTtcclxuICB9IGVsc2Uge1xyXG4gICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgbGltaXQ6IDEwLFxyXG4gICAgIG9mZnNldDogMSxcclxuICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSxcclxuICAgICBleHBvcnQ6ZmFsc2VcclxuICAgfTtcclxuICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlSb2xlcyA9IHRoaXMuZmlsdGVyQnlSb2xlcztcclxuICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzO1xyXG4gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH1cclxuIH1cclxuIHVzZXJzKHR5cGU6IGFueSx1c2VyPzogYW55KSB7XHJcbiAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRVc2VyUG9wdXBDb21wb25lbnQsIHtcclxuICAgICBjZW50ZXJlZDogdHJ1ZSxcclxuICAgICBzaXplOiBcImxnXCIsXHJcbiAgICAgc2Nyb2xsYWJsZTogdHJ1ZSxcclxuICAgfSk7XHJcbiAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSB1c2VyO1xyXG4gICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50eXBlID0gdHlwZTtcclxuICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlclR5cGUgPSdjbGllbnQnO1xyXG4gICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICBpZihyZXN1bHQgPT09J3N1Ym1pdCcpe1xyXG4gICAgICB0aGlzLnNlYXJjaFZhbHVlID0nJztcclxuICAgICAgdGhpcy51c2VyTGlzdF9yZXEubGltaXQgPSAxMDtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uLmxpbWl0ID0gMTA7XHJcbiAgICAgIHRoaXMudXNlckxpc3RfcmVxLm9mZnNldCA9IDE7XHJcbiAgICAgIHRoaXMucGFnaW5hdGlvbi5vZmZzZXQgPSAxO1xyXG4gICAgIHRoaXMudXNlclNlcnZpY2UuZGF0YVN1YmplY3QubmV4dCh0aGlzLnVzZXJEYXRhKTtcclxuICAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBsaW1pdDogMTAsXHJcbiAgICAgIG9mZnNldDogMSxcclxuICAgICAgdXNlclR5cGU6IHRoaXMudXNlclR5cGUsXHJcbiAgICAgIGV4cG9ydDpmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgICAvLyAgdGhpcy5nZXRSb2xlcygpO1xyXG4gICAgfVxyXG4gICB9KTtcclxuIH1cclxuICBWaWV3dXNlcnModHlwZTogYW55LCB1c2VyPzogYW55KSB7XHJcbiAgICBsZXQgbW9kYWxPcHRpb25zOiBhbnkgPSB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgICBzaXplOiAnbGcnXHJcbiAgICB9O1xyXG4gICAgaWYgKHVzZXIucm9sZSA9PT0gJ2FkbWluJyAmJiB1c2VyLmlzQWN0aXZlID09IHRydWUgJiYgdGhpcy5ncz8udXNlckFjY2Vzcz8udmFsdWU/Lkdsb2JhbF9Vc2VyX2lzRWRpdCApIHtcclxuICAgICAgbW9kYWxPcHRpb25zLmJhY2tkcm9wID0gJ3N0YXRpYyc7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBZGRVc2Vyc0NvbXBvbmVudCwgbW9kYWxPcHRpb25zKTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSB1c2VyO1xyXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudHlwZSA9IHR5cGU7XHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VyVHlwZSA9J2NsaWVudCc7XHJcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gIH0pXHJcbiB9XHJcbiAvLyBzZWFyY2hEYXRhKCkge1xyXG4gLy8gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gLy8gfVxyXG5cclxuIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0ID0gcGFnZU9mZnNldDtcclxuICAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9IHBhZ2VPZmZzZXQ7XHJcbiAgIGlmKHRoaXMuc2VhcmNoVmFsdWUgPT09Jycpe1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICAgbGltaXQ6IHRoaXMudXNlckxpc3RfcmVxLmxpbWl0LFxyXG4gICAgICBvZmZzZXQ6IHRoaXMudXNlckxpc3RfcmVxLm9mZnNldCxcclxuICAgICAgdXNlclR5cGU6IHRoaXMudXNlclR5cGUsICBcclxuICAgICAgZXhwb3J0OmZhbHNlLFxyXG4gICAgICBzb3J0Q29sdW1OYW1lIDp0aGlzLnVzZXJMaXN0X3JlcS5zb3J0Q29sdW1OYW1lLFxyXG4gICAgc29ydEJ5IDogdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBsaW1pdDogdGhpcy51c2VyTGlzdF9yZXEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0LFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgIGV4cG9ydDpmYWxzZSxcclxuICAgICAgc29ydENvbHVtTmFtZSA6dGhpcy51c2VyTGlzdF9yZXEuc29ydENvbHVtTmFtZSxcclxuICAgIHNvcnRCeSA6IHRoaXMudXNlckxpc3RfcmVxLnNvcnRCeVxyXG4gICAgfTtcclxuICB9XHJcbiAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlSb2xlcyA9IHRoaXMuZmlsdGVyQnlSb2xlcztcclxuICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVN0YXR1cyA9IHRoaXMuZmlsdGVyQnlTdGF0dXM7XHJcbiAgdGhpcy5jcmVhdGVUZWFtID0gZmFsc2U7XHJcbiAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW107XHJcbiAgdGhpcy5zZWxlY3RBbGxDaGVja2VkID1mYWxzZTtcclxuICAgdGhpcy5sb2FkVGFibGUoKTtcclxuIH1cclxuXHJcbiBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBudW1iZXIpIHtcclxuICAgdGhpcy51c2VyTGlzdF9yZXEubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICB0aGlzLnVzZXJMaXN0X3JlcS5vZmZzZXQgPSAxO1xyXG4gICB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0ID0gMTtcclxuICAgaWYodGhpcy5zZWFyY2hWYWx1ZSA9PT0nJyl7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcSA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnMuY2xpZW50LFxyXG4gICAgICBsaW1pdDogdGhpcy51c2VyTGlzdF9yZXEubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0LFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSwgIFxyXG4gICAgICBleHBvcnQ6ZmFsc2UsXHJcbiAgICAgIHNvcnRDb2x1bU5hbWUgOnRoaXMudXNlckxpc3RfcmVxLnNvcnRDb2x1bU5hbWUsXHJcbiAgICBzb3J0QnkgOiB0aGlzLnVzZXJMaXN0X3JlcS5zb3J0QnlcclxuICAgIH07XHJcbiAgfSBlbHNlIHtcclxuICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiB0aGlzLnVzZXJMaXN0X3JlcS5saW1pdCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLnVzZXJMaXN0X3JlcS5vZmZzZXQsXHJcbiAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hWYWx1ZSxcclxuICAgICAgZXhwb3J0OmZhbHNlLFxyXG4gICAgICBzb3J0Q29sdW1OYW1lIDp0aGlzLnVzZXJMaXN0X3JlcS5zb3J0Q29sdW1OYW1lLFxyXG4gICAgc29ydEJ5IDogdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5XHJcbiAgICB9O1xyXG4gIH1cclxuICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVJvbGVzID0gdGhpcy5maWx0ZXJCeVJvbGVzO1xyXG4gIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5U3RhdHVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cztcclxuICB0aGlzLmNyZWF0ZVRlYW0gPSBmYWxzZTtcclxuICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICB0aGlzLnNlbGVjdEFsbENoZWNrZWQgPWZhbHNlO1xyXG4gICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gfVxyXG5cclxuIGFzc2lnblN0b3JlKHVzZXI6IGFueSkge1xyXG4gICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQXNzaWduU3RvcmVQb3B1cENvbXBvbmVudCwge1xyXG4gICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgIGJhY2tkcm9wOidzdGF0aWMnLFxyXG4gICAgIHNpemU6IFwibGdcIixcclxuICAgICBzY3JvbGxhYmxlOiB0cnVlLFxyXG4gICB9KTtcclxuICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudXNlciA9IHVzZXI7XHJcbiAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgIGlmKHJlc3VsdCA9PT0nc3VibWl0Jyl7XHJcbiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPScnO1xyXG4gICAgICB0aGlzLnVzZXJMaXN0X3JlcS5saW1pdCA9IDEwO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPSAxMDtcclxuICAgICAgdGhpcy51c2VyTGlzdF9yZXEub2Zmc2V0ID0gMTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldCA9IDE7XHJcbiAgICAgdGhpcy51c2VyU2VydmljZS5kYXRhU3ViamVjdC5uZXh0KHRoaXMudXNlckRhdGEpO1xyXG4gICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgZXhwb3J0OmZhbHNlXHJcbiAgICB9O1xyXG4gICAgIHRoaXMubG9hZFRhYmxlKCk7XHJcbiAgICB9XHJcbiAgIH0pO1xyXG4gfVxyXG5cclxuIGxvYWRUYWJsZSgpIHtcclxuICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAvLyAgdGhpcy5wYWdpbmF0aW9uLm9mZnNldD0xO1xyXG4gIC8vICB0aGlzLnBhZ2luYXRpb24ubGltaXQgPTEwO1xyXG4gICB0aGlzLnBhZ2luYXRpb24udG90YWxDb3VudCA9MDtcclxuICAgdGhpcy51c2VyU2VydmljZS5nZXRVc2VyTGlzdCh0aGlzLnVzZXJMaXN0X3JlcSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShcclxuICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICB0aGlzLnVzZXJMaXN0ID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgIFxyXG4gICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB7XHJcbiAgICAgICAgICAgb2Zmc2V0OiB0aGlzLnBhZ2luYXRpb24ub2Zmc2V0LFxyXG4gICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2luYXRpb24ubGltaXQsXHJcbiAgICAgICAgICAgdG90YWxDb3VudDogcmVzLmRhdGEuY291bnQsXHJcbiAgICAgICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVmFsdWUsXHJcbiAgICAgICAgIH07XHJcbiAgICAgICAgIHRoaXMuZGF0YVRvUGFyZW50LmVtaXQodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQpO1xyXG4gICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNoYW5nZU1lc3NhZ2UodGhpcy5wYWdpbmF0aW9uLmxpbWl0KTtcclxuICAgICAgICAgaWYgKHJlcy5kYXRhLmNvdW50IDwgMTApIHtcclxuICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25TaXplcyA9IFtyZXMuZGF0YS5jb3VudF07XHJcbiAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XHJcbiAgICAgICAgIH1cclxuICAgICAgICAgdGhpcy5ub0RhdGEgPSBmYWxzZTtcclxuICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICB9IGVsc2UgeyAgICAgIFxyXG5cclxuICAgICAgICAgdGhpcy51c2VyTGlzdCA9IFtdO1xyXG4gICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB7XHJcbiAgICAgICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgICB0b3RhbENvdW50OiAwLFxyXG4gICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZGF0YVRvUGFyZW50LmVtaXQodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQpO1xyXG4gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgICAgfVxyXG4gICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgfSxcclxuICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgdGhpcy51c2VyTGlzdCA9IFtdO1xyXG4gICAgICAgdGhpcy5wYWdpbmF0aW9uID0ge1xyXG4gICAgICAgICBvZmZzZXQ6IDEsXHJcbiAgICAgICAgIGxpbWl0OiAxMCxcclxuICAgICAgICAgdG90YWxDb3VudDogMCxcclxuICAgICAgIH07XHJcbiAgICAgICB0aGlzLmRhdGFUb1BhcmVudC5lbWl0KHRoaXMucGFnaW5hdGlvbi50b3RhbENvdW50KTtcclxuICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgdGhpcy5ub0RhdGEgPSB0cnVlO1xyXG4gICAgIH1cclxuICAgKTtcclxuIH1cclxuXHJcbiBwYWdpbmF0aW9uU2l6ZSgpOiBudW1iZXIge1xyXG4gICBpZiAodGhpcy5wYWdpbmF0aW9uLnRvdGFsQ291bnQgPCAxMCkge1xyXG4gICAgIHJldHVybiB0aGlzLnBhZ2luYXRpb24udG90YWxDb3VudDtcclxuICAgfSBlbHNlIHtcclxuICAgICByZXR1cm4gdGhpcy5wYWdpbmF0aW9uLmxpbWl0O1xyXG4gICB9XHJcbiB9XHJcblxyXG4gZXhwb3J0WExTWCgpIHtcclxuICBpZih0aGlzLnNlYXJjaFZhbHVlID09PScnKXtcclxuICAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy4kaGVhZGVyRmlsdGVycy5jbGllbnQsXHJcbiAgICAgIGxpbWl0OiAxMDAwMCxcclxuICAgICAgb2Zmc2V0OiAxLFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyVHlwZSxcclxuICAgICAgZXhwb3J0OnRydWVcclxuICAgIH07XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVJvbGVzID0gdGhpcy5maWx0ZXJCeVJvbGVzO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuZmlsdGVyQnlTdGF0dXMgPSB0aGlzLmZpbHRlckJ5U3RhdHVzO1xyXG4gIHRoaXMudXNlclNlcnZpY2VcclxuICAuZ2V0VXNlckxpc3RFeHBvcnQodGhpcy51c2VyTGlzdF9yZXEpXHJcbiAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gIC5zdWJzY3JpYmUoe1xyXG4gICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuZXhjZWxTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdVc2VycycpXHJcblxyXG4gICAgfSxcclxuICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9LFxyXG4gICAgY29tcGxldGU6ICgpID0+IHt9LFxyXG4gIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgIHRoaXMudXNlckxpc3RfcmVxID0ge1xyXG4gICAgIGNsaWVudElkOiB0aGlzLiRoZWFkZXJGaWx0ZXJzLmNsaWVudCxcclxuICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgb2Zmc2V0OiAxLFxyXG4gICAgIHVzZXJUeXBlOiB0aGlzLnVzZXJUeXBlLFxyXG4gICAgIHNlYXJjaFZhbHVlOiB0aGlzLnNlYXJjaFZhbHVlLFxyXG4gICAgIGV4cG9ydDp0cnVlXHJcbiAgIH07XHJcbiAgIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5Um9sZXMgPSB0aGlzLmZpbHRlckJ5Um9sZXM7XHJcbiAgIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5U3RhdHVzID0gdGhpcy5maWx0ZXJCeVN0YXR1cztcclxuIHRoaXMudXNlclNlcnZpY2VcclxuIC5nZXRVc2VyTGlzdEV4cG9ydCh0aGlzLnVzZXJMaXN0X3JlcSlcclxuIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuIC5zdWJzY3JpYmUoe1xyXG4gICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICB0aGlzLmV4Y2VsU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnVXNlcnMnKVxyXG5cclxuICAgfSxcclxuICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xyXG4gICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgIHRoaXMubm9EYXRhID0gdHJ1ZTtcclxuICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgfSxcclxuICAgY29tcGxldGU6ICgpID0+IHt9LFxyXG4gfSk7XHJcbiAgfVxyXG5cclxuIFxyXG4gIFxyXG5cclxuICB9XHJcbiAgXHJcbiAgYnVsa0Fzc2lnbmFzeGxzeCgpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4odGhpcy5idWxrVXBsb2FkLHtjZW50ZXJlZDogdHJ1ZX0pXHJcbiAgfVxyXG5cclxuICBhZGRTaW5nbGVVc2VyKCkge1xyXG4gICAgXHJcbiAgfVxyXG4gIFxyXG4gIGV4Y2VsRXJyb3I6IGFueTtcclxuICBleGNlbERhdGE6IGFueSA9IFtdXHJcbiAgdmFsaWRhdGVkT3V0cHV0OiBhbnkgPSBbXTtcclxuXHJcbiAgZ2V0U3RvcmVDb3VudHMoZGF0YTogYW55KSB7XHJcblxyXG4gICAgY29uc3QgdW5pcXVlVXNlck5hbWVzID0gbmV3IFNldChkYXRhPy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVsnU3RvcmUgTmFtZS9TdG9yZSBJZCddKSk7XHJcbiAgICByZXR1cm4gdW5pcXVlVXNlck5hbWVzLnNpemU7XHJcblxyXG4gIH1cclxuXHJcbiAgICBnZXRFbWFpbENvdW50cyhkYXRhOiBhbnkpIHtcclxuXHJcbiAgICBjb25zdCB1bmlxdWVVc2VyTmFtZXMgPSBuZXcgU2V0KGRhdGE/Lm1hcCgoaXRlbTogYW55KSA9PiBpdGVtWydFbWFpbCddKSk7XHJcbiAgICByZXR1cm4gdW5pcXVlVXNlck5hbWVzLnNpemU7XHJcblxyXG4gIH1cclxuXHJcbiAgb25VcGxvYWQxKGU6IGFueSkge1xyXG4gICAgbGV0IGRhdGE6IGFueVtdO1xyXG4gICAgbGV0IGVycm9yOiBhbnkgPSBbXTtcclxuICAgIGxldCBzdG9yZU5hbWU6IGFueSA9ICcnO1xyXG5cclxuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBlLnRhcmdldC5maWxlc1swXTtcclxuICBjb25zdCBhbGxvd2VkRXh0ZW5zaW9ucyA9IC9cXC4oeGxzfHhsc3h8Y3N2KSQvaTtcclxuICBjb25zdCBhbGxvd2VkVHlwZXMgPSBbXHJcbiAgICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0XCIsIFxyXG4gICAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFwidGV4dC9jc3ZcIiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgIFwiYXBwbGljYXRpb24vY3N2XCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgXTtcclxuXHJcbiAgaWYgKCFhbGxvd2VkRXh0ZW5zaW9ucy50ZXN0KGZpbGUubmFtZSkgfHwgIWFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XHJcbiAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRFcnJvclRvYXN0KFwiT25seSAueGxzeCwgb3IgLmNzdiBmaWxlcyBhcmUgYWxsb3dlZC5cIik7XHJcbiAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAgIGNvbnN0IHRhcmdldDogRGF0YVRyYW5zZmVyID0gPERhdGFUcmFuc2Zlcj5lLnRhcmdldDtcclxuICAgIGlmICh0YXJnZXQuZmlsZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICB9XHJcbiAgICBpZiAoISF0YXJnZXQuZmlsZXNbMF0ubmFtZS5tYXRjaCgvKC54bHN8Lnhsc3gpLykpIHtcclxuICAgICAgY29uc3QgcmVhZGVyOiBGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBic3RyOiBzdHJpbmcgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3Qgd2I6IFdvcmtCb29rID0gcmVhZChic3RyLCB7IHR5cGU6IFwiYmluYXJ5XCIgfSk7XHJcbiAgICAgICAgY29uc3Qgd3NuYW1lOiBzdHJpbmcgPSB3Yi5TaGVldE5hbWVzWzBdO1xyXG4gICAgICAgIGNvbnN0IHdzOiBXb3JrU2hlZXQgPSB3Yi5TaGVldHNbd3NuYW1lXTtcclxuICAgICAgICBkYXRhID0gdXRpbHMuc2hlZXRfdG9fanNvbih3cyk7XHJcbiAgICAgICAgdGhpcy5leGNlbERhdGEgPSBkYXRhO1xyXG4gICAgICAgIHN0b3JlTmFtZSA9IHdiLlNoZWV0TmFtZXNbMF07XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGFyZ2V0LmZpbGVzWzBdKTtcclxuICAgICAgcmVhZGVyLm9ubG9hZGVuZCA9IGFzeW5jIChlKSA9PiB7XHJcblxyXG4gICAgICAgICBpZiAoc3RvcmVOYW1lICE9PSBcIlVzZXJzXCIpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJDYW4geW91IGNvbmZpcm0gd2hldGhlciB0aGUgc2hlZXQgbmFtZSBpcyBVc2VycyA/XCIpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFkYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdChcIlBsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlLlwiKTtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVpcmVkS2V5cyA9IFsnU3RvcmUgTmFtZS9TdG9yZSBJZCcsJ0VtYWlsJ10gLy8gTXVzdCBhbHdheXMgYmUgcHJlc2VudFxyXG4gICAgICAgIC8vIGNvbnN0IG9wdGlvbmFsS2V5cyA9IFsndXNlclBob25lJywgJ2NpdHknXSA6IFsnY2l0eSddO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBkYXRhLnNvbWUoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGl0ZW0pO1xyXG4gICAgICAgICAgY29uc3QgaGFzUmVxdWlyZWRLZXlzID0gcmVxdWlyZWRLZXlzLmV2ZXJ5KGtleSA9PiBrZXlzLmluY2x1ZGVzKGtleSkpO1xyXG4gICAgICAgICAgY29uc3QgYWxsS2V5c0FyZUFsbG93ZWQgPSBrZXlzLmV2ZXJ5KGtleSA9PiBcclxuICAgICAgICAgICAgcmVxdWlyZWRLZXlzLmluY2x1ZGVzKGtleSlcclxuICAgICAgICAgICAgLy8gfHwgb3B0aW9uYWxLZXlzLmluY2x1ZGVzKGtleSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICByZXR1cm4gaGFzUmVxdWlyZWRLZXlzICYmIGFsbEtleXNBcmVBbGxvd2VkO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoIWlzVmFsaWQpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoJ1BsZWFzZSB1cGxvYWQgYSB2YWxpZCBmaWxlLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF0YT8uZm9yRWFjaCgoZWxlbWVudDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudD8uRW1haWwpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5FbWFpbCA9IGVsZW1lbnQ/LkVtYWlsLnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoICFlbGVtZW50Py5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSB8fCBlbGVtZW50Py5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSA9PSAnJyB8fCBlbGVtZW50Py5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgU3RvcmUgTmFtZS9TdG9yZSBJZCAtIEIke2luZGV4ICsgMn1gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCFlbGVtZW50Py5FbWFpbCB8fCBlbGVtZW50Py5FbWFpbD8udHJpbSgpID09ICcnIHx8IGVsZW1lbnQuRW1haWwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBlcnJvci5wdXNoKGBJbnZhbGlkIEVtYWlsIC0gQSR7aW5kZXggKyAyfWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudD8uRW1haWwgJiYgIWVsZW1lbnQuRW1haWwubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pKSB7XHJcbiAgICAgICAgICAgIGVycm9yLnB1c2goYEludmFsaWQgRW1haWwgLSBBJHtpbmRleCArIDJ9YClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoZXJyb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgICAgICB0aXRsZTogYEludmFsaWQgZGV0YWlscyFgLFxyXG4gICAgICAgICAgICBjb250ZW50OiBgUGxlYXNlIHByb3ZpZGUgY29ycmVjdCBhbmQgY29tcGxldGUgc3RvcmUgaW5mb3JtYXRpb24uYCxcclxuICAgICAgICAgICAgYnV0dG9udHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3I6IGVycm9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmFmdGVyVXBsbG9hZChwb3B1cGNvbnRlbnQpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGFwaURhdGEgPSB0aGlzLmV4Y2VsRGF0YS5tYXAoKGVsOiBhbnkpID0+e1xyXG4gICAgICAgICAgcmV0dXJuIHtzdG9yZSA6IGVsPy5bJ1N0b3JlIE5hbWUvU3RvcmUgSWQnXSxcclxuICAgICAgICAgIGVtYWlsIDogZWw/LkVtYWlsfVxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgICAgIC5idWxrVXNlckFzc2lnbih7XHJcbiAgICAgICAgICAgIGRhdGE6IGFwaURhdGFcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgaWYgKHJlcy5zdGF0dXM9PT0nZXJyb3InJiZyZXMuZXJyb3IuZXJyb3IubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgICAgICB0aXRsZTogYEludmFsaWQgZGV0YWlscyFgLFxyXG4gICAgICAgICAgICBjb250ZW50OiBgUGxlYXNlIHByb3ZpZGUgY29ycmVjdCBhbmQgY29tcGxldGUgc3RvcmUgaW5mb3JtYXRpb24uYCxcclxuICAgICAgICAgICAgYnV0dG9udHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3I6IHJlcy5lcnJvci5lcnJvclxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5hZnRlclVwbGxvYWQocG9wdXBjb250ZW50KVxyXG4gICAgICAgICAgdGhpcy5pbnB1dEZpbGUxLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5hZnRlclVwbGxvYWQoKTtcclxuICAgICAgICAgIHRoaXMudmFsaWRhdGVkT3V0cHV0ID0gcmVzPy5kYXRhPy5yZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6KGVycjphbnkpPT4ge1xyXG4gICAgICAgIGlmIChlcnIuZXJyb3IuY29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XHJcbiAgICAgICAgICBjb25zdCBwb3B1cGNvbnRlbnQgPSB7XHJcbiAgICAgICAgICAgIGRpc3BsYXlwcm9wOiBmYWxzZSxcclxuICAgICAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRkVGMEM3XCIvPjxwYXRoIGQ9XCJNMjcuOTk5OCAyNC4wMDEyVjI4LjAwMTJNMjcuOTk5OCAzMi4wMDEySDI4LjAwOThNMjYuMjg5OCAxOC44NjEyTDE3LjgxOTggMzMuMDAxMkMxNy42NDUxIDMzLjMwMzYgMTcuNTUyNyAzMy42NDY1IDE3LjU1MTggMzMuOTk1N0MxNy41NTA4IDM0LjM0NDkgMTcuNjQxMyAzNC42ODgzIDE3LjgxNDIgMzQuOTkxN0MxNy45ODcxIDM1LjI5NTEgMTguMjM2NSAzNS41NDc5IDE4LjUzNzUgMzUuNzI1QzE4LjgzODUgMzUuOTAyMSAxOS4xODA2IDM1Ljk5NzMgMTkuNTI5OCAzNi4wMDEySDM2LjQ2OThDMzYuODE5IDM1Ljk5NzMgMzcuMTYxMSAzNS45MDIxIDM3LjQ2MjEgMzUuNzI1QzM3Ljc2MzEgMzUuNTQ3OSAzOC4wMTI0IDM1LjI5NTEgMzguMTg1NCAzNC45OTE3QzM4LjM1ODMgMzQuNjg4MyAzOC40NDg4IDM0LjM0NDkgMzguNDQ3OCAzMy45OTU3QzM4LjQ0NjggMzMuNjQ2NSAzOC4zNTQ0IDMzLjMwMzYgMzguMTc5OCAzMy4wMDEyTDI5LjcwOTggMTguODYxMkMyOS41MzE1IDE4LjU2NzMgMjkuMjgwNSAxOC4zMjQzIDI4Ljk4MSAxOC4xNTU3QzI4LjY4MTQgMTcuOTg3IDI4LjM0MzUgMTcuODk4NCAyNy45OTk4IDE3Ljg5ODRDMjcuNjU2IDE3Ljg5ODQgMjcuMzE4MSAxNy45ODcgMjcuMDE4NiAxOC4xNTU3QzI2LjcxOTEgMTguMzI0MyAyNi40NjggMTguNTY3MyAyNi4yODk4IDE4Ljg2MTJaXCIgc3Ryb2tlPVwiI0RDNjgwM1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRkZGQUVCXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgICAgICB0aXRsZTogYEludmFsaWQgZGV0YWlscyFgLFxyXG4gICAgICAgICAgICBjb250ZW50OiBgUGxlYXNlIHByb3ZpZGUgY29ycmVjdCBhbmQgY29tcGxldGUgc3RvcmUgaW5mb3JtYXRpb24uYCxcclxuICAgICAgICAgICAgYnV0dG9udHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgZXJyb3I6ZXJyLmVycm9yLmVycm9yXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmFmdGVyVXBsbG9hZChwb3B1cGNvbnRlbnQpXHJcbiAgICAgICAgICB0aGlzLmlucHV0RmlsZTEubmF0aXZlRWxlbWVudC52YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoZXJyLmVycm9yLmVycm9yKTtcclxuICAgICAgICAgIHRoaXMuaW5wdXRGaWxlMS5uYXRpdmVFbGVtZW50LnZhbHVlID0gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgICAgfTtcclxuICAgICAgLy8gJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKT8udmFsKFwiXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgUmV1cGxvYWQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgIHByb2NlZWRTdWJtaXQoKSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtkYXRhOnRoaXMudmFsaWRhdGVkT3V0cHV0fSBcclxuICAgIHRoaXMudXNlclNlcnZpY2VcclxuICAgICAgLmFzc2lnbkRhdGEocGF5bG9hZClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0U2VydmljZS5nZXRTdWNjZXNzVG9hc3QoYFN0b3JlcyBBc3NpZ25lZCB0byBVc2VyIFN1Y2Nlc3NmdWxseSFgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoYFVuYWJsZSB0byBBc3NpZ24gU3RvcmVzIHRvIFVzZXIhYClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoJ3N1Ym1pdCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gQXNzaWduIFN0b3JlcyB0byBVc2VyIVwiKTtcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgY2xvc2VhY3RpdmVwb3B1cCgpIHtcclxuICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcclxuICB9XHJcblxyXG4gIGFmdGVyVXBsbG9hZChkYXRhPzogYW55KSB7XHJcbiAgICB0aGlzLmV4Y2VsRXJyb3IgPSBkYXRhO1xyXG4gICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLmFmdGVyVmFsaWRhdGlvbiwgeyBjZW50ZXJlZDogdHJ1ZSwgYmFja2Ryb3A6ICdzdGF0aWMnLCBzaXplOiAnbGcnLCB3aW5kb3dDbGFzczogJ2N1c3RvbS1tb2RhbC13aWR0aCcgfSlcclxuICB9XHJcblxyXG4gIHVzZXJTdGF0dXNDaGFuZ2UodXNlcjogYW55LCBpOiBudW1iZXIpIHtcclxuICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWxlcnRQb3B1cENvbXBvbmVudCx7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLGJhY2tkcm9wOlwic3RhdGljXCIgfSk7ICAgXHJcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS51c2VyID0gdXNlcjtcclxuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICBpZiAocmVzdWx0KSB7XHJcbiAgICBpZiAocmVzdWx0ID09PSdzdWJtaXQnKSB7XHJcbiAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlVXNlcih7IGVtYWlsOiB1c2VyPy5lbWFpbCwgaXNBY3RpdmU6IHVzZXIuaXNBY3RpdmV9KS5zdWJzY3JpYmUoe1xyXG4gICAgIG5leHQ6KHJlczphbnkpPT4ge1xyXG4gICAgICAgaWYocmVzICYmIHJlcy5jb2RlPT0yMDApIHtcclxuICAgICAgICAgaWYodXNlci5pc0FjdGl2ZSkge1xyXG4gICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnVXNlciBTdGF0dXMgQWN0aXZhdGVkIScpO1xyXG4gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldFN1Y2Nlc3NUb2FzdCgnVXNlciBTdGF0dXMgRGVhY3RpdmF0ZWQhJyk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgIHRoaXMudG9hc3RTZXJ2aWNlLmdldEVycm9yVG9hc3QoJ1VuYWJsZSB0byBDaGFuZ2UgVXNlciBTdGF0dXMhJyk7XHJcbiAgICAgICAgIHRoaXMudXNlckxpc3RbaV0uaXNBY3RpdmU9IXVzZXIuaXNBY3RpdmU7XHJcbiAgICAgICB9XHJcbiAgICAgfSxcclxuICAgICBlcnJvcjooKT0+e1xyXG4gICAgICAgdGhpcy50b2FzdFNlcnZpY2UuZ2V0RXJyb3JUb2FzdCgnVW5hYmxlIHRvIENoYW5nZSBVc2VyIFN0YXR1cyEnKTtcclxuICAgICAgIHRoaXMudXNlckxpc3RbaV0uaXNBY3RpdmU9IXVzZXIuaXNBY3RpdmU7XHJcbiAgICAgfSxcclxuICAgICBjb21wbGV0ZTooKT0+e31cclxuICAgfSlcclxuICB9IGVsc2UgaWYocmVzdWx0ID09PSdjbG9zZScpIHtcclxuICAgIHRoaXMudXNlckxpc3RbaV0uaXNBY3RpdmU9IXVzZXIuaXNBY3RpdmU7XHJcbiAgfVxyXG59XHJcbn0pXHJcbiB9XHJcbiBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiB9XHJcbiBnZXRSb2xlcygpIHtcclxuICB2YXIgZGF0YSA9IHsgXHJcbiAgICAgIHVzZXJUeXBlOiAnY2xpZW50JyxcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuJGhlYWRlckZpbHRlcnM/LmNsaWVudFxyXG4gICAgfVxyXG4gIHRoaXMudXNlclNlcnZpY2UuZ2V0Um9sZXMoZGF0YSkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XHJcbiAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLnJvbGVzID0gcmVzLmRhdGEucmVzdWx0O1xyXG4gICAgICAgIHRoaXMucm9sZXNDb3VudCA9IHJlcy5kYXRhLmNvdW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucm9sZXMgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0sXHJcbiAgICBlcnJvcjogKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvbGVzID0gW107XHJcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfSxcclxuICAgIGNvbXBsZXRlOiAoKSA9PiB7fSxcclxuICB9KTtcclxufVxyXG51c2VyRGV0aWFscyhyb2xlOiBhbnkpIHtcclxuICBsZXQgb2JqID17XHJcbiAgICByb2xlOnJvbGUsXHJcbiAgICB1c2VyVHlwZSA6J0JyYW5kIFVzZXInLFxyXG4gICAgcmVjZWl2ZWREYXRhOlwiUm9sZSBWYWx1ZVwiXHJcbiAgfVxyXG4gIHRoaXMudXNlclNlcnZpY2Uucm9sZXNDb21tcy5uZXh0KG9iaik7XHJcbiAgdGhpcy5yZWNlaXZlZERhdGEgPSdSb2xlIFZhbHVlJztcclxufVxyXG5yZWNlaXZlRGF0YShkYXRhOiBzdHJpbmcpIHtcclxuICB0aGlzLnJlY2VpdmVkRGF0YSA9IGRhdGE7XHJcbiAgdGhpcy51c2VyU2VydmljZS5kYXRhU3ViamVjdC5uZXh0KHRoaXMudXNlckRhdGEpO1xyXG59XHJcblxyXG5vblNvcnQoY29sdW1uOiBzdHJpbmcpIHtcclxuICB0aGlzLnVzZXJMaXN0X3JlcS5leHBvcnQgPSBmYWxzZTtcclxuICBpZiAodGhpcy51c2VyTGlzdF9yZXE/LnNvcnRDb2x1bU5hbWUgPT09IGNvbHVtbikge1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5ID0gdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5ID09PSAxID8gLTEgOiAxO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5zb3J0Q29sdW1OYW1lID0gY29sdW1uO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEuc29ydEJ5ID0gMTtcclxuICB9XHJcbiAgdGhpcy5sb2FkVGFibGUoKVxyXG59XHJcblxyXG5hcHBseUZpbHRlcnMoZXZlbnQ6YW55KXtcclxuICBpZiAoZXZlbnQ/Lmxlbmd0aCkge1xyXG4gICAgZXZlbnQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSBcIlJvbGVzXCIpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5Um9sZXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gXCJTdGF0dXNcIikge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlTdGF0dXMgPSBlbGVtZW50Lklzc3Vlcy5tYXAoKHZhbDogYW55KSA9PiB2YWw/LmlkKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy51c2VyTGlzdF9yZXEubGltaXQ9MTA7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5leHBvcnQgPSBmYWxzZTtcclxuICAgIHRoaXMudXNlckxpc3RfcmVxLmZpbHRlckJ5Um9sZXMgPSB0aGlzLmZpbHRlckJ5Um9sZXM7XHJcbiAgICB0aGlzLnVzZXJMaXN0X3JlcS5maWx0ZXJCeVN0YXR1cyA9IHRoaXMuZmlsdGVyQnlTdGF0dXM7XHJcbiAgICB0aGlzLmxvYWRUYWJsZSgpXHJcbn1cclxuc2VsZWN0QWxsQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5zZWxlY3RlZFVzZXJzOiBhbnlbXSA9IFtdOyBcclxuY3JlYXRlVGVhbTogYm9vbGVhbiA9IGZhbHNlO1xyXG5vblNlbGVjdEFsbCgpIHtcclxuICB0aGlzLnNlbGVjdEFsbENoZWNrZWQgPSAhdGhpcy5zZWxlY3RBbGxDaGVja2VkOyBcclxuXHJcbiAgdGhpcy51c2VyTGlzdC5mb3JFYWNoKHVzZXIgPT4ge1xyXG4gICAgdXNlci5jaGVja2VkID0gdGhpcy5zZWxlY3RBbGxDaGVja2VkOyBcclxuICB9KTtcclxuICBpZiAodGhpcy5zZWxlY3RBbGxDaGVja2VkKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbLi4udGhpcy51c2VyTGlzdF07XHJcbiAgICB0aGlzLmNyZWF0ZVRlYW0gPSB0cnVlO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlcnMgPSBbXTtcclxuICAgIHRoaXMuY3JlYXRlVGVhbSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbm9uU2VsZWN0ZWRUZWFtcyh1c2VyOiBhbnksaW5kZXg6YW55KSB7XHJcbiAgICB1c2VyLmNoZWNrZWQgPSAhdXNlci5jaGVja2VkO1xyXG4gICAgaWYgKHVzZXIuY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlcnMucHVzaCh1c2VyKTtcclxuICAgIH0gZWxzZSBpZih1c2VyLmNoZWNrZWQgPT09ZmFsc2UpIHtcclxuICAgICAgIGNvbnN0IHN0b3JlSW5kZXggPSB0aGlzLnNlbGVjdGVkVXNlcnMuZmluZEluZGV4KHNlbGVjdGVkVXNlciA9PiBzZWxlY3RlZFVzZXIuX2lkID09PSB1c2VyLl9pZCk7XHJcbiAgICAgIGlmIChzdG9yZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2Vycy5zcGxpY2Uoc3RvcmVJbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0QWxsQ2hlY2tlZCA9IHRoaXMudXNlckxpc3QuZXZlcnkoc3RvcmUgPT4gc3RvcmUuY2hlY2tlZCk7XHJcbiAgICB0aGlzLmNyZWF0ZVRlYW0gPSB0aGlzLnNlbGVjdGVkVXNlcnMubGVuZ3RoID4gMDtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVRlYW1zKCl7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVGVhbXNDcmVhdGlvbkNvbXBvbmVudCx7IGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLGJhY2tkcm9wOidzdGF0aWMnIH0pOyAgICBcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRlYW1zVXNlcnMgPSB0aGlzLnNlbGVjdGVkVXNlcnM7XHJcbiAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRUYWJsZSgpO1xyXG4gICAgICAgdGhpcy5zZWxlY3RBbGxDaGVja2VkID1mYWxzZTtcclxuICAgICAgIHRoaXMuY3JlYXRlVGVhbSA9IGZhbHNlO1xyXG4gICAgICAgdGhpcy5zZWxlY3RlZFVzZXJzID0gW11cclxuICAgICAgfSlcclxuICB9XHJcbn0iLCI8ZGl2ICpuZ0lmPVwicmVjZWl2ZWREYXRhICE9PSdSb2xlIFZhbHVlJ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICA8L2gzPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXIgcmlnaHRjb3JuZXIgXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY3JlYXRlVGVhbVwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG1zLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInJvdGF0ZSg0NSAxNy4wMzY1IDE1LjEyMjMpXCIgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcmVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIChjaGFuZ2UpPVwic2VhcmNoRGF0YSgpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hWYWx1ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwic2VhcmNoXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaWItZmlsdGVycyBbZGF0YU9iamVjdF09XCJkYXRhT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImV4cG9ydFhMU1goKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgcC00IGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj48c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+RXhwb3J0PC9zcGFuPiA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIihncy51c2VyQWNjZXNzIHxhc3luYyk/Lkdsb2JhbF9Vc2VyX2lzRWRpdFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYnVsa0Fzc2lnbmFzeGxzeCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgcC00IGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIj48c3BhbiBjbGFzcz1cIm1zLTJcIj5CdWxrIEFzc2lnbjwvc3Bhbj4gPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIoZ3MudXNlckFjY2VzcyB8YXN5bmMpPy5HbG9iYWxfVXNlcl9pc0FkZFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidXNlcnMoJ2FkZCcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXgtMiByb3VuZGVkLTMgdGV4dC1ub3dyYXBcIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY2M1YxNS44MzMzTTQuMTY2NzUgOS45OTk5NkgxNS44MzM0XCIgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48c3BhbiBjbGFzcz1cIm1zLTIgdGV4dC13aGl0ZVwiPkFkZCBVc2VyPC9zcGFuPiA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY3JlYXRlVGVhbVwiIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNyZWF0ZVRlYW1zKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteC0yIHJvdW5kZWQtMyB0ZXh0LW5vd3JhcFwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuMDAwMSA0LjE2NjYzVjE1LjgzMzNNNC4xNjY3NSA5Ljk5OTk2SDE1LjgzMzRcIiBzdHJva2U9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LXdoaXRlXCI+Q3JlYXRlIFRlYW08L3NwYW4+IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiFsb2FkaW5nICYmICFub0RhdGFcIiBjbGFzcz1cImNhcmQtYm9keSBwLTBcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwIFwiPlxyXG4gICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiKGdzLnVzZXJBY2Nlc3MgfGFzeW5jKT8uR2xvYmFsX1VzZXJfaXNBZGRcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0Y2hlY2tcIj48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgKGNsaWNrKT1cIm9uU2VsZWN0QWxsKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdEFsbENoZWNrZWRcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCd1c2VyTmFtZScpXCI+TmFtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJ1c2VyTGlzdF9yZXE/LnNvcnRDb2x1bU5hbWUgPT09ICd1c2VyTmFtZScgJiYgdXNlckxpc3RfcmVxPy5zb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInVzZXJMaXN0X3JlcT8uc29ydENvbHVtTmFtZSA9PT0gJ3VzZXJOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uU29ydCgnZW1haWwnKVwiPkVtYWlsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInVzZXJMaXN0X3JlcT8uc29ydENvbHVtTmFtZSA9PT0gJ2VtYWlsJyAmJiB1c2VyTGlzdF9yZXE/LnNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAnZW1haWwnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdtb2JpbGVOdW1iZXInKVwiPkNvbnRhY3QgTnVtYmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInVzZXJMaXN0X3JlcT8uc29ydENvbHVtTmFtZSA9PT0gJ21vYmlsZU51bWJlcicgJiYgdXNlckxpc3RfcmVxPy5zb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInVzZXJMaXN0X3JlcT8uc29ydENvbHVtTmFtZSA9PT0gJ21vYmlsZU51bWJlcicgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggPlJvbGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25Tb3J0KCdyb2xlJylcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHN2ZyBbbmdDbGFzc109XCJ1c2VyTGlzdF9yZXE/LnNvcnRDb2x1bU5hbWUgPT09ICdyb2xlJyAmJiB1c2VyTGlzdF9yZXE/LnNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidXNlckxpc3RfcmVxPy5zb3J0Q29sdW1OYW1lID09PSAncm9sZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7XCI+QXNzaWduZWQgVG8gPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7XCI+QXMgYSBMZWFkIFRvIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cImxpbmUtaGVpZ2h0OiAyMXB4ICFpbXBvcnRhbnQ7XCI+QWN0aW9uczwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1zZW1pYm9sZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlckxpc3Q7bGV0IGk9aW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIihncy51c2VyQWNjZXNzIHxhc3luYyk/Lkdsb2JhbF9Vc2VyX2lzQWRkXCI+PHNwYW4gY2xhc3M9XCJpbnB1dGNoZWNrXCI+PGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyIG10LTJcIiBbKG5nTW9kZWwpXT1cInVzZXIuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RlZFRlYW1zKHVzZXIsaSlcIj48L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3VzZXI/LnVzZXJOYW1lfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGdldE1hc2tlZFZhbHVlKHVzZXI/LmVtYWlsLCB1c2VySW5mbz8ucm9sZSkgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IGdldE1hc2tlZE1vYmlsZSh1c2VyPy5tb2JpbGVOdW1iZXIsIHVzZXJJbmZvPy5yb2xlKSB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJ1c2VyPy5yb2xlID09PSdzdXBlcmFkbWluJ1wiPlN1cGVyIEFkbWluPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInVzZXI/LnJvbGUgIT09J3N1cGVyYWRtaW4nXCI+e3t1c2VyPy5yb2xlIHwgdGl0bGVjYXNlfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBtZS0xXCI+e3t1c2VyPy5hc3NpZ25lZFN0b3Jlc3x8MH19IFN0b3Jlczwvc3Bhbj4gPHNwYW4gY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1pbmZvXCI+e3t1c2VyPy50ZWFtQ291bnR8fDB9fSBUZWFtczwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHVycGxlIG1lLTFcIj57e3VzZXI/LmNsdXN0ZXJDb3VudHx8MH19IENsdXN0ZXJzPC9zcGFuPiA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LWluZm9cIj57e3VzZXI/LnRlYW1sZWFkfHwwfX0gVGVhbXM8L3NwYW4+PC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTMgY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwiVmlld3VzZXJzKCd2aWV3Jyx1c2VyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMVwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIxIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE5OTVfMTY0MDApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEuMzMzMjUgMTBDMS4zMzMyNSAxMCA0LjY2NjU4IDMuMzMzMzcgMTAuNDk5OSAzLjMzMzM3QzE2LjMzMzMgMy4zMzMzNyAxOS42NjY2IDEwIDE5LjY2NjYgMTBDMTkuNjY2NiAxMCAxNi4zMzMzIDE2LjY2NjcgMTAuNDk5OSAxNi42NjY3QzQuNjY2NTggMTYuNjY2NyAxLjMzMzI1IDEwIDEuMzMzMjUgMTBaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEwLjQ5OTkgMTIuNUMxMS44ODA2IDEyLjUgMTIuOTk5OSAxMS4zODA4IDEyLjk5OTkgMTBDMTIuOTk5OSA4LjYxOTMzIDExLjg4MDYgNy41MDAwNCAxMC40OTk5IDcuNTAwMDRDOS4xMTkyMSA3LjUwMDA0IDcuOTk5OTIgOC42MTkzMyA3Ljk5OTkyIDEwQzcuOTk5OTIgMTEuMzgwOCA5LjExOTIxIDEyLjUgMTAuNDk5OSAxMi41WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTk5NV8xNjQwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKChncy51c2VyQWNjZXNzIHwgYXN5bmMpPy5HbG9iYWxfVXNlcl9pc0VkaXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0zIGN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJ1c2VySW5mby5yb2xlIT09J3VzZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYXNzaWduU3RvcmUodXNlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdXNlcj8uaXNBY3RpdmUgfHwgdXNlcj8ucm9sZSA9PT0nc3VwZXJhZG1pbidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPkFzc2lnbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoXCIgKm5nSWY9XCJ1c2VySW5mby5yb2xlIT09J3VzZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG10LTNcIiB0eXBlPVwiY2hlY2tib3hcIiByb2xlPVwic3dpdGNoXCIgaWQ9XCJzdXBwb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISgoZ3MudXNlckFjY2VzcyB8IGFzeW5jKT8uR2xvYmFsX1VzZXJfaXNFZGl0KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1c2VyU3RhdHVzQ2hhbmdlKHVzZXIsaSlcIiBbKG5nTW9kZWwpXT1cInVzZXJMaXN0W2ldLmlzQWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHVzZXJMaXN0W2ldLmlzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVhY3RpdmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWxvYWRpbmcgJiYgIW5vRGF0YVwiIGNsYXNzPVwiY29sLXh4bC0xMiBjb2wtbWQtMTIgY29sLXhsLTEyIGNvbC1sZy0xMiBteS0zXCI+XHJcbiAgICAgICAgPGxpYi1wYWdpbmF0aW9uICpuZ0lmPVwidXNlckxpc3QubGVuZ3RoIT09MFwiIFtpdGVtc1BlclBhZ2VdPVwicGFnaW5hdGlvbi5saW1pdFwiIFtjdXJyZW50UGFnZV09XCJwYWdpbmF0aW9uLm9mZnNldFwiXHJcbiAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInBhZ2luYXRpb24udG90YWxDb3VudFwiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2luYXRpb25TaXplKClcIlxyXG4gICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwicm93IGxvYWRlciAgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lciBtYi0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIm5vRGF0YVwiIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBtYi0zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YS5zdmdcIiBhbHQ9XCJcIj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tYmVnaW46OlJvdy0tPlxyXG48ZGl2ICpuZ0lmPVwicmVjZWl2ZWREYXRhID09PSdSb2xlIFZhbHVlJ1wiIGNsYXNzPVwicm93IGd4LTUgZ3gteGwtMTBcIj5cclxuICAgIDwhLS1iZWdpbjo6Q29sLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLXh4bC0xMiBjb2wtbWQtMTIgY29sLXhsLTEyIGNvbC1sZy0xMlwiPlxyXG4gICAgICAgIDxsaWItcm9sZXMtcGVybWlzc2lvbi10YWJsZSAoZGF0YUV2ZW50KT1cInJlY2VpdmVEYXRhKCRldmVudClcIj48L2xpYi1yb2xlcy1wZXJtaXNzaW9uLXRhYmxlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tZW5kOjpDb2wtLT5cclxuPC9kaXY+XHJcbjwhLS1lbmQ6OlJvdy0tPlxyXG5cclxuPG5nLXRlbXBsYXRlICNidWxrVXBsb2FkIGxldC1tb2RhbD5cclxuICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBmbGV4LWNvbHVtbiBwLTlcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItdGl0bGVcIj5CdWxrIEFzc2lnbjwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtc3RhcnQgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTUwMCBtdC02XCI+XHJcbiAgICAgICAgPG9sIGNsYXNzPVwiY3VzdG9tLW9yZGVyZWQtbGlzdCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGQgcHgtNSBmcy02XCI+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dFwiPlVzZSB0aGUgdGVtcGxhdGUgYmVsb3cgdG8gYXNzaWduIG11bHRpcGxlIHVzZXJzIHRvIG11bHRpcGxlIHN0b3JlcyBhdCBvbmNlLjwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dCBteS0zXCI+PHNwYW4gY2xhc3M9XCJ1c2VyLXRleHRcIj5Eb3dubG9hZCB0aGUgdGVtcGxhdGUgaGVyZSAtIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibXMtMVwiIGhyZWY9XCIuLi8uLi8uLi9hc3NldHMvZmlsZXMvQnVsa0Fzc2lnblRlbXBsYXRlLnhsc3hcIiBkb3dubG9hZD5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU01LjgzMzMzIDguMzMzMzNMMTAgMTIuNU0xMCAxMi41TDE0LjE2NjcgOC4zMzMzM00xMCAxMi41VjIuNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZW1wbGF0ZSBtcy0yXCI+RG93bmxvYWQgVGVtcGxhdGU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dCBteS0zXCI+QWRkIHlvdXIgZGF0YSB0byB0aGUgVGVtcGxhdGUgRmlsZTwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cInVzZXItdGV4dCBteS0zXCI+VXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9saT4gICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIDwvb2w+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCIgdy0xMDAgcmlnaHQtYmFyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiID5cclxuICAgICAgICA8aW5wdXQgbmFtZT1cImFjY291bnRUeXBlXCIgdHlwZT1cInJhZGlvXCIgaWQ9XCJrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbDFcIiBhY2NlcHQgPSBcIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIiB2YWx1ZT1cInBlcnNvbmFsMVwiXHJcbiAgICAgICAgY2xhc3M9XCJidG4tY2hlY2tcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwib25VcGxvYWQxKCRldmVudClcIlxyXG4gICAgICAgIG5nLXJlZmxlY3QtdmFsdWU9XCJwZXJzb25hbFwiIHR5cGU9XCJmaWxlXCIgI2lucHV0RmlsZTEgLz5cclxuICAgICAgICA8bGFiZWwgZm9yPVwia3RfY3JlYXRlX2FjY291bnRfZm9ybV9hY2NvdW50X3R5cGVfcGVyc29uYWwxXCIgY2xhc3M9XCIgdy0xLTAgcC00XCI+PHNwYW5cclxuICAgICAgICAgICAgY2xhc3M9XCJmdy1ib2xkIHRleHQtY2VudGVyIHctMTAwIGZzLTRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIHctMTAwXCI+XHJcbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0NlwiIGhlaWdodD1cIjQ2XCIgdmlld0JveD1cIjAgMCA0NiA0NlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIzXCIgeT1cIjNcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiByeD1cIjIwXCIgZmlsbD1cIiNGMkY0RjdcIiAvPlxyXG4gICAgICAgICAgICAgICAgPHJlY3QgeD1cIjNcIiB5PVwiM1wiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHJ4PVwiMjBcIiBzdHJva2U9XCIjRjlGQUZCXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCI2XCIgLz5cclxuICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA0N180MDU2NilcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTI2LjMzMzMgMjYuMzMzNEwyMyAyM00yMyAyM0wxOS42NjY2IDI2LjMzMzRNMjMgMjNWMzAuNU0yOS45OTE2IDI4LjMyNUMzMC44MDQ0IDI3Ljg4MTkgMzEuNDQ2NSAyNy4xODA4IDMxLjgxNjUgMjYuMzMyMkMzMi4xODY2IDI1LjQ4MzcgMzIuMjYzNSAyNC41MzYxIDMyLjAzNTEgMjMuNjM4OUMzMS44MDY4IDIyLjc0MTggMzEuMjg2MiAyMS45NDYzIDMwLjU1NTUgMjEuMzc3OUMyOS44MjQ4IDIwLjgwOTUgMjguOTI1NyAyMC41MDA2IDI4IDIwLjVIMjYuOTVDMjYuNjk3NyAxOS41MjQ0IDI2LjIyNzYgMTguNjE4NiAyNS41NzQ5IDE3Ljg1MDlDMjQuOTIyMiAxNy4wODMxIDI0LjEwNCAxNi40NzMyIDIzLjE4MTcgMTYuMDY3MkMyMi4yNTk0IDE1LjY2MTIgMjEuMjU3MSAxNS40Njk1IDIwLjI1MDEgMTUuNTA2NkMxOS4yNDMgMTUuNTQzNyAxOC4yNTc1IDE1LjgwODYgMTcuMzY3NiAxNi4yODE0QzE2LjQ3NzcgMTYuNzU0MiAxNS43MDY2IDE3LjQyMjYgMTUuMTEyMiAxOC4yMzYzQzE0LjUxNzcgMTkuMDUwMSAxNC4xMTU1IDE5Ljk4OCAxMy45MzU4IDIwLjk3OTVDMTMuNzU2IDIxLjk3MTEgMTMuODAzNCAyMi45OTA1IDE0LjA3NDMgMjMuOTYxMUMxNC4zNDUyIDI0LjkzMTcgMTQuODMyNyAyNS44MjgyIDE1LjUgMjYuNTgzNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM0NzU0NjdcIiBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzQwNDdfNDA1NjZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgxMyAxMylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhLXRpdGxlIG1iLTNcIj48c3BhbiBjbGFzcz1cImNsaWNrLXVwbG9hZCBjdXJzb3ItcG9pbnRlclwiPkNsaWNrIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGEtc3ViXCI+dGhlIGRhdGEgYWRkZWQgdGVtcGxhdGUgZmlsZSBmb3IgcHJvY2Vzc2luZy48L2Rpdj5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICA8L2xhYmVsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYWZ0ZXJWYWxpZGF0aW9uIGxldC1tb2RlbD5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJvcmRlci0wXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIG10LTBcIj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlIG10LTNcIj48c3BhbiBjbGFzcz1cImNvbmZpZy1oZWFkaW5nIGZ3LXNlbWlib2xkIHctYXV0b1wiPkJ1bGsgQXNzaWduPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHQtMCBwb3B1cC1zY3JvbGxcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XHJcbiAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY2FyZCByb3VuZGVkLTMgcC0zIGZsZXgtY29sdW1uIGgtNzBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZ3LXNlbWlib2xkIGNvbmZpZy1oZWFkaW5nIHctMTAwXCI+e3tnZXRFbWFpbENvdW50cyhleGNlbERhdGEpfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCBzdWJ0aXRsZSBtdC0xXCI+VG90YWwgUmVjb3JkczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1jYXJkIHJvdW5kZWQtMyBwLTMgZmxleC1jb2x1bW4gaC03MHB4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmdy1zZW1pYm9sZCBjb25maWctaGVhZGluZyB3LTEwMFwiPnt7ZXhjZWxEYXRhPy5sZW5ndGh9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnctc2VtaWJvbGQgc3VidGl0bGUgbXQtMVwiPlJvd3MgcHJvY2Vzc2VkPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtY2FyZCByb3VuZGVkLTMgcC0zIGZsZXgtY29sdW1uIGgtNzBweFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImV4Y2VsRXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Z3LXNlbWlib2xkIHRleHQtZXJyb3Igdy0xMDAgZXJyb3ItaGVhZGluZycgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Z3LXNlbWlib2xkIHctMTAwIGNvbmZpZy1oZWFkaW5nJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZXhjZWxFcnJvcj8uZXJyb3I/Lmxlbmd0aCB8fCAwIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImV4Y2VsRXJyb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2Z3LXNlbWlib2xkIHRleHQtZXJyb3IgbXQtMSBleGNlbC1lcnJvcicgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2Z3LXNlbWlib2xkIHN1YnRpdGxlIG10LTEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZXhjZWxFcnJvclwiIGNsYXNzPVwidGFibGUtaGVhZGVyIG10LTVcIiBzdHlsZT1cImZvbnQtd2VpZ2h0OiA0MDA7XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ID5Zb3UncmUgYWJvdXQgdG8gYXNzaWduIHt7Z2V0RW1haWxDb3VudHMoZXhjZWxEYXRhKX19IHt7Z2V0RW1haWxDb3VudHMoZXhjZWxEYXRhKSA+IDEgPyAnVXNlcnMnIDogJ1VzZXInfX0uIEFyZSB5b3Ugc3VyZSB3YW50IHRvIHByb2NlZWQ/PC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImV4Y2VsRXJyb3JcIiBjbGFzcz1cImZsZXgtY29sdW1uIG10LTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWctaGVhZGluZyBmdy1ib2xkXCI+SW52YWxpZCBEZXRhaWxzICE8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZSBtdC01XCI+UGxlYXNlIHByb3ZpZGUgY29ycmVjdCBpbmZvcm1hdGlvbi48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLTUgdy0xMDAgcm91bmRlZC0zIGJvcmRlci1lcnJvciBtdC01IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZXJyb3Igb2YgZXhjZWxFcnJvcj8uZXJyb3I7IGxldCBpID0gaW5kZXg7IGxldCBsYXN0ID0gbGFzdFwiIFtuZ0NsYXNzXT1cIiFsYXN0ID8gJ21iLTInIDogJydcIiBjbGFzcz1cInRleHQtZXJyb3JcIj57e2kgKyAxfX0pIHt7ZXJyb3J9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTAgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgZmxleC13cmFwIGdhcC0yIHB0LTBcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbWQgYnRuLWRlZmF1bHQgYnRuLW91dGxpbmVcIiAoY2xpY2spPVwiY2xvc2VhY3RpdmVwb3B1cCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCIhZXhjZWxFcnJvclwiIGNsYXNzPVwiYnRuIGJ0bi1tZCBweS0zIGJ0bi1kZWZhdWx0IGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cInByb2NlZWRTdWJtaXQoKVwiPlByb2NlZWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImV4Y2VsRXJyb3JcIiBjbGFzcz1cImJ0biBweS0zIGJ0bi1tZCBidG4tZGVmYXVsdCBtcy0zIGJ0bi1kYW5nZXJcIiAoY2xpY2spPVwiZmlsZTEuY2xpY2soKTtcIj5SZXVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aW5wdXQgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiICNmaWxlMSB0eXBlPVwiZmlsZVwiIGlkPVwia3RfYWNjb3VudF90ZWFtX3NpemVfc2VsZWN0XzJcIiBhY2NlcHQgPSBcIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25VcGxvYWQxKCRldmVudClcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==