rapid-text-editor 1.0.24 → 1.0.26

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.
@@ -91,7 +91,7 @@ export class RapidTextEditorComponent {
91
91
  ngAfterViewInit() {
92
92
  const editor = this.el.nativeElement.querySelector('.editor');
93
93
  if (editor && (editor.innerHTML.trim() === "" || editor.innerHTML.trim() === "<br>")) {
94
- editor.focus();
94
+ // editor.focus();
95
95
  const range = document.createRange();
96
96
  range.setStart(editor, 0);
97
97
  range.collapse(true);
@@ -873,7 +873,7 @@ RapidTextEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0
873
873
  useExisting: forwardRef(() => RapidTextEditorComponent),
874
874
  multi: true
875
875
  }
876
- ], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }, { propertyName: "signatureDialog", first: true, predicate: ["signatureDialog"], descendants: true }, { propertyName: "signaturePad", first: true, predicate: ["sigPad"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri}::ng-deep .editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}\n"], components: [{ type: i2.SignaturePad, selector: "signature-pad", inputs: ["options"], outputs: ["onBeginEvent", "onEndEvent"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
876
+ ], viewQueries: [{ propertyName: "editor", first: true, predicate: ["editor"], descendants: true, static: true }, { propertyName: "tableDialog", first: true, predicate: ["tableDialog"], descendants: true }, { propertyName: "signatureDialog", first: true, predicate: ["signatureDialog"], descendants: true }, { propertyName: "signaturePad", first: true, predicate: ["sigPad"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-bottom:1px solid #ccc;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}\n"], components: [{ type: i2.SignaturePad, selector: "signature-pad", inputs: ["options"], outputs: ["onBeginEvent", "onEndEvent"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
877
877
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: RapidTextEditorComponent, decorators: [{
878
878
  type: Component,
879
879
  args: [{ selector: 'rapid-text-editor', providers: [
@@ -882,7 +882,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
882
882
  useExisting: forwardRef(() => RapidTextEditorComponent),
883
883
  multi: true
884
884
  }
885
- ], template: "<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri}::ng-deep .editor{position:relative;min-height:300px;border:1px solid #ccc;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-radius:8px;box-shadow:0 2px 8px #0000001a;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{border:1px solid #ccc;min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}\n"] }]
885
+ ], template: "<div class=\"dimension\" >\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\".png,.jpg,.jpeg\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"\uD83D\uDD0D-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"\uD83C\uDFA8-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";.dimension{height:100%}.rich-text-editor{border:1px solid #ccc;border-radius:5px;font-family:Calibri;height:100%}::ng-deep .editor{position:relative;min-height:300px;padding:5px;overflow-y:auto;font-family:Calibri;outline:none!important;font-size:14px;height:auto}::ng-deep .editor table{width:100%}::ng-deep .editor table,::ng-deep .editor th,::ng-deep .editor td{border:1px solid black;border-collapse:collapse}::ng-deep .editor th,::ng-deep .editor td{padding:.4rem}::ng-deep .editor th{background-color:#f3f3f3}.fs-12{font-size:12px!important}.fs-13{font-size:13px!important}.fs-14{font-size:14px!important}.fs-16{font-size:16px!important}.fs-18{font-size:18px!important}.fs-20{font-size:20px!important}.fs-24{font-size:24px!important}.fs-28{font-size:28px!important}.editor h1{font-size:32px!important;font-weight:700!important;margin:0}.editor h2{font-size:28px!important;font-weight:700!important;margin:0}.editor h3{font-size:24px!important;font-weight:700!important;margin:0}.editor h4{font-size:20px!important;font-weight:700!important;margin:0}.editor h5{font-size:18px!important;font-weight:600!important;margin:0}.editor h6{font-size:16px!important;font-weight:600!important;margin:0}.editor p{font-size:14px!important;font-weight:400;margin:0}button{width:20px;height:20px;background:none;border:none;margin-left:5px;cursor:pointer}button[mat-icon-button]{margin:0 4px;width:20px!important;height:20px;background:none;border:none}.small-icon-button{width:30px;height:30px;padding:4px}.small-icon-button mat-icon{font-size:16px}button[mat-icon-button]{position:relative;overflow:hidden}input[type=file]{padding:5px;cursor:pointer;margin-left:10px}.fileInput{display:flex;justify-content:center;align-items:center}.select-wrapper{display:inline-block;position:relative;width:70px}.select-wrapper select{appearance:none;width:100%;padding:10px 40px 10px 15px;font-size:16px;color:#333;background-color:#f4f4f4;border:1px solid #ddd;cursor:pointer;outline:none}.select-wrapper:after{content:\"\\25bc\";position:absolute;top:50%;right:15px;transform:translateY(-50%);pointer-events:none;color:#777;font-size:12px}.select-wrapper select:hover{background-color:#e9e9e9;border-color:#bbb}.select-wrapper select:focus{border-color:#007bff;background-color:#fff}.select-wrapper option{padding:8px;font-size:16px;color:#333;background-color:#fff}.toolbar{display:flex;flex-wrap:wrap;align-items:center;background-color:#f4f4f4;padding:10px;border-bottom:1px solid #ccc;gap:10px}.select-wrapper{padding:8px;font-size:14px;border:1px solid #ddd;cursor:pointer;background-color:#fff}.select-wrapper:focus{outline:none;border-color:#007bff}button{border:none;border-radius:5px;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center}button:hover{color:#007bff}.tooltip{position:relative;display:inline-block;border-bottom:1px dotted black;cursor:pointer}.tooltiptext{visibility:hidden;width:130px;background-color:#000;color:#fff;text-align:center;border-radius:6px;padding:5px 0;position:absolute;z-index:1}.tooltip:hover .tooltiptext{visibility:visible}mat-icon{font-size:20px!important;color:inherit!important}input[type=number]{width:60px;padding:5px;font-size:14px;border:1px solid #ddd;border-radius:5px;text-align:center}input[type=file]{border:1px solid #ddd;border-radius:5px;padding:5px;font-size:14px;background-color:#fff;cursor:pointer}input[type=file]:hover{border-color:#007bff}.table{width:100px;height:30px;color:#007bff!important;font-weight:700;border:1px solid #007bff}.table:hover{background-color:#0056b3;color:#fff!important}.custom-dialog-container{width:auto;max-width:200px}.grid-container{display:grid;grid-template-columns:repeat(7,20px);grid-gap:5px;gap:5px}.grid-item{width:20px;height:20px;border:1px solid #ddd}.highlighted{background-color:#2196f3}div[contenteditable=false]{display:inline-block;position:relative;resize:both;overflow:hidden;border:1px dashed #ccc;margin:5px}div[contenteditable=false]:hover{border-color:#007bff}div[contenteditable=false] img{display:block;width:100%;height:auto}.uploaded-images{display:flex;flex-wrap:wrap;margin-bottom:20px}.image-preview{margin:10px;padding:5px;border:1px dashed #ccc;cursor:pointer}.image-preview img{max-width:100px;max-height:100px;object-fit:cover}.editor{min-height:300px;padding:20px;position:relative}.remove_btn{position:relative;top:10px}.image-resize-wrapper{position:relative;display:inline-block}.image-resize-wrapper .resizer{width:10px;height:10px;background:#007bff;position:absolute;bottom:0;right:0;cursor:se-resize;border-radius:50%}.normal{width:50%;height:100%;border:1px solid red;border-radius:5px;color:red;padding:10px;font-size:16px}.normal:hover{color:red}.submit{width:50%;height:100%;border:none;border-radius:5px;color:#fff;padding:10px;background-color:#151544}.submit:hover{color:#fff}.action{margin-top:10px;padding:10px;display:flex;width:100%;justify-content:end;align-items:center;gap:5px}::ng-deep .sign canvas{border:1px dotted #ccc}\n"] }]
886
886
  }], ctorParameters: function () { return [{ type: i1.MatDialog }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { contentCapture: [{
887
887
  type: Input
888
888
  }], height: [{
@@ -909,4 +909,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
909
909
  type: ViewChild,
910
910
  args: ['sigPad']
911
911
  }] } });
912
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBc0N6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZ0RuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBbEQ1Qix5QkFBb0IsR0FBb0I7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSTtn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Q3JDSCx1eXVCQW9JQTs0RkQ1RmEsd0JBQXdCO2tCQWJwQyxTQUFTOytCQUNFLG1CQUFtQixhQUdsQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7ME1BMkJRLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNrQixhQUFhO3NCQUFwQyxLQUFLO3VCQUFDLGVBQWU7Z0JBQ1osYUFBYTtzQkFBdEIsTUFBTTtnQkFDZ0MsTUFBTTtzQkFBNUMsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUNYLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDTSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDUCxZQUFZO3NCQUFoQyxTQUFTO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkNoYW5nZXMsIFRlbXBsYXRlUmVmLCBmb3J3YXJkUmVmLCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQsIFNpbXBsZUNoYW5nZSwgU2ltcGxlQ2hhbmdlcywgUmVuZGVyZXIyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTaWduYXR1cmVQYWQgfSBmcm9tICdhbmd1bGFyMi1zaWduYXR1cmVwYWQnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSREVkaXRvck9wdGlvbnMge1xyXG4gIG9wdGlvbnM6IHtcclxuICAgIHRleHRGb3JtYXQ/OiBib29sZWFuLFxyXG4gICAgZm9udFNpemU/OiBib29sZWFuLFxyXG4gICAgYm9sZDogYm9vbGVhbixcclxuICAgIGl0YWxpYzogYm9vbGVhbixcclxuICAgIHVuZGVybGluZTogYm9vbGVhbixcclxuICAgIHN0cmlrZXRocm91Z2g6IGJvb2xlYW4sXHJcbiAgICBhbGlnbkxlZnQ6IGJvb2xlYW4sXHJcbiAgICBhbGlnblJpZ2h0OiBib29sZWFuLFxyXG4gICAgYWxpZ25DZW50ZXI6IGJvb2xlYW4sXHJcbiAgICBqdXN0aWZ5OiBib29sZWFuLFxyXG4gICAgYnVsbGV0TGlzdDogYm9vbGVhbixcclxuICAgIG51bWJlcmVkTGlzdDogYm9vbGVhbixcclxuICAgIGltYWdlPzogYm9vbGVhbixcclxuICAgIHRhYmxlPzogYm9vbGVhbiwgXHJcbiAgICB0YWJsZUhlYWRlcj86IGJvb2xlYW4sXHJcbiAgICBzaWduYXR1cmU/OiBib29sZWFuXHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhcGlkLXRleHQtZWRpdG9yJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSYXBpZFRleHRFZGl0b3JDb21wb25lbnQpLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxuICBcclxufSlcclxuZXhwb3J0IGNsYXNzIFJhcGlkVGV4dEVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdEVkaXRvck9wdGlvbnM6IFJERWRpdG9yT3B0aW9ucyA9IHtcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgdGV4dEZvcm1hdDogdHJ1ZSxcclxuICAgICAgZm9udFNpemU6IHRydWUsXHJcbiAgICAgIGJvbGQ6IHRydWUsXHJcbiAgICAgIGl0YWxpYzogdHJ1ZSxcclxuICAgICAgdW5kZXJsaW5lOiB0cnVlLFxyXG4gICAgICBzdHJpa2V0aHJvdWdoOiB0cnVlLFxyXG4gICAgICBhbGlnbkxlZnQ6IHRydWUsXHJcbiAgICAgIGFsaWduUmlnaHQ6IHRydWUsXHJcbiAgICAgIGFsaWduQ2VudGVyOiB0cnVlLFxyXG4gICAgICBqdXN0aWZ5OiB0cnVlLFxyXG4gICAgICBidWxsZXRMaXN0OiB0cnVlLFxyXG4gICAgICBudW1iZXJlZExpc3Q6IHRydWUsXHJcbiAgICAgIGltYWdlOiB0cnVlLFxyXG4gICAgICB0YWJsZTogdHJ1ZSxcclxuICAgICAgdGFibGVIZWFkZXI6IHRydWUsXHJcbiAgICAgIHNpZ25hdHVyZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG5cclxuICBASW5wdXQoKSBjb250ZW50Q2FwdHVyZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhlaWdodDogc3RyaW5nID0gXCJhdXRvXCI7XHJcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIGljb25Db2xvcjogc3RyaW5nID0gJyMzMzMzMzMnXHJcbiAgQElucHV0KCdlZGl0b3JPcHRpb25zJykgZWRpdG9yT3B0aW9ucyE6IFJERWRpdG9yT3B0aW9ucztcclxuICBAT3V0cHV0KCkgY29udGVudENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2VkaXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIGVkaXRvciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgndGFibGVEaWFsb2cnKSB0YWJsZURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2lnbmF0dXJlRGlhbG9nJykgc2lnbmF0dXJlRGlhbG9nITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBAVmlld0NoaWxkKCdzaWdQYWQnKSBzaWduYXR1cmVQYWQhOiBTaWduYXR1cmVQYWQ7XHJcblxyXG4gIHByaXZhdGUgZWRpdG9yQ29udGVudDogc3RyaW5nID0gJyc7XHJcbiAgcm93czogbnVtYmVyID0gMTtcclxuICBjb2xzOiBudW1iZXIgPSAxO1xyXG4gIGdyaWQgPSBBcnJheSg0OSkuZmlsbCgwKTtcclxuICBNYXRoID0gTWF0aDtcclxuICB1cGxvYWRlZEltYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBcclxuICBzaWduYXR1cmVQYWRPcHRpb25zID0ge1xyXG4gICAgbWluV2lkdGg6IDEsXHJcbiAgICBjYW52YXNXaWR0aDogNDAwLFxyXG4gICAgY2FudmFzSGVpZ2h0OiAyMDBcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nLCBcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBcclxuICAgIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9jaGFuZ2U6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICBjb25zb2xlLmxvZygnQnVpbGQgLTEnKVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGVuYWJsZWQuJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmxvZygnQ29udGVudCBjYXB0dXJlIGlzIGRpc2FibGVkLicpO1xyXG4gICAgfVxyXG4gICAgaWYoIXRoaXMuZWRpdG9yT3B0aW9ucyl7XHJcbiAgICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IHRoaXMuZGVmYXVsdEVkaXRvck9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICAvLyB0aGlzLmluaXRpYWxpemVFZGl0b3JDb250ZW50KCcnKTtcclxuICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSB8fCBjaGFuZ2VzWyd3aWR0aCddKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlEaW1lbnNpb25zKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5RGltZW5zaW9ucygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGRpbWVuc2lvbkVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmRpbWVuc2lvbicpO1xyXG4gICAgaWYgKHRoaXMud2lkdGgpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShkaW1lbnNpb25FbGVtZW50LCAnd2lkdGgnLCB0aGlzLndpZHRoKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpO1xyXG4gICAgaWYodGhpcy5oZWlnaHQpe1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGVkaXRvckVsZW1lbnQsICdoZWlnaHQnLCB0aGlzLmhlaWdodCk7XHJcbiAgICB9ICAgIFxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICBcclxuICAgIGlmIChlZGl0b3IgJiYgKGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIlwiIHx8IGVkaXRvci5pbm5lckhUTUwudHJpbSgpID09PSBcIjxicj5cIikpIHtcclxuICAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2V0U3RhcnQoZWRpdG9yLCAwKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+J1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpKTtcclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIGNoYXJhY3RlckRhdGE6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5ibHVyKCk7XHJcblxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKSB7XHJcblxyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICAvLyBJZiBlZGl0b3IgaXMgZW1wdHkgb3IgZG9lc24ndCBoYXZlIGEgPHA+IGFzIHRoZSBsYXN0IGVsZW1lbnRcclxuICAgIGlmICghZWRpdG9yLmlubmVySFRNTC50cmltKCkpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9ICc8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+XFx1MjAwQjwvcD4nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZmlyc3RDaGlsZCA9IGVkaXRvci5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAoIWZpcnN0Q2hpbGQgfHwgZmlyc3RDaGlsZC50YWdOYW1lICE9PSAnUCcpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj4ke2NvbnRlbnR9PC9wPmA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJ3AnKTtcclxuICAgIGlmIChwKSB7XHJcbiAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHApO1xyXG4gICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsgXHJcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRm9jdXMgdGhlIGVkaXRvclxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRWRpdG9yQ29udGVudChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgY29udGVudCBoYXMgbm8gSFRNTCB0YWdzLCB3cmFwIHdpdGggPHA+XHJcbiAgICBjb25zdCBoYXNIdG1sVGFncyA9IC88W14+XSs+Ly50ZXN0KGRhdGEpO1xyXG4gICAgaWYgKCFoYXNIdG1sVGFncykge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gYDxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+JHtkYXRhfTwvcD5gO1xyXG4gICAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gZGF0YTtcclxuICAgIH1cclxuICAgIFxyXG4gIH1cclxuXHJcblxyXG4gIG9uQ29udGVudENoYW5nZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmNvbnRlbnRDYXB0dXJlKSB7XHJcbiAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZWRpdG9yJyk7XHJcbiAgICAgIGlmIChlZGl0b3IpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYXB0dXJlZCBDb250ZW50IChDaGlsZCk6JywgdGhpcy5lZGl0b3JDb250ZW50KTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRDaGFuZ2UuZW1pdCh0aGlzLmVkaXRvckNvbnRlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuZWRpdG9yQ29udGVudDtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkSGVhZDogYW55ID0gJ1AnO1xyXG4gIHNlbGVjdGVkRm9udDogYW55ID0gJzE0JztcclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xyXG4gICAgaWYgKHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID09ICc8YnI+JyB8fCB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PSAnJykge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkSGVhZCA9ICdQJztcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSAnMTQnO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9O1xyXG5cclxuICBwcml2YXRlIG9uVG91Y2hlZCA9ICgpID0+IHsgfTtcclxuXHJcbiAgd3JpdGVWYWx1ZShjb250ZW50OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmVkaXRvciAmJiB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudCB8fCAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKCkge1xyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICB9XHJcblxyXG4gIC8vIHNldEZvbnRTaXplKGV2ZW50OiBFdmVudCkge1xyXG4gIC8vICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gIC8vICAgY29uc3Qgc2l6ZSA9IHNlbGVjdC52YWx1ZTtcclxuICAvLyAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAvLyAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcbiAgLy8gICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gIC8vICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAvLyAgICAgY29uc3QgcGFyZW50ID0gc2VsZWN0aW9uLmFuY2hvck5vZGU/LnBhcmVudEVsZW1lbnQ7XHJcbiAgLy8gICAgIGlmIChcclxuICAvLyAgICAgICBwYXJlbnQgJiZcclxuICAvLyAgICAgICBwYXJlbnQuY2xhc3NMaXN0ICYmXHJcbiAgLy8gICAgICAgQXJyYXkuZnJvbShwYXJlbnQuY2xhc3NMaXN0KS5zb21lKChjOiBzdHJpbmcpID0+IGMuc3RhcnRzV2l0aCgnZnMtJykpXHJcbiAgLy8gICAgICkge1xyXG4gIC8vICAgICAgIHBhcmVudC5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICAgIHBhcmVudC5jbGFzc05hbWUgPSBgZnMtJHtzaXplfWA7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAvLyAgICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgICAgcmFuZ2Uuc3Vycm91bmRDb250ZW50cyhzcGFuKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfVxyXG4gIC8vICAgZWxzZSB7XHJcbiAgLy8gICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgLy8gICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgLy8gICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKSk7IC8vIHplcm8td2lkdGggc3BhY2VcclxuICAvLyAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuICAvLyAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gIC8vICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgLy8gICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gIC8vICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgLy8gICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICBvbkVkaXRvcktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAvLyBoYW5kbGUgRW50ZXIgb3IgYXJyb3cga2V5c1xyXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicgfHwgZXZlbnQua2V5ID09PSAnQmFja1NwYWNlJyApIHtcclxuICAgICAgdGhpcy51cGRhdGVDdXJyZW50Rm9ybWF0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDdXJyZW50Rm9ybWF0KCkge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGU7XHJcbiAgICBpZiAoIWFuY2hvck5vZGUpIHJldHVybjtcclxuXHJcbiAgICBsZXQgcGFyZW50RWxlbSA9IGFuY2hvck5vZGUubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFXHJcbiAgICAgID8gKGFuY2hvck5vZGUgYXMgSFRNTEVsZW1lbnQpXHJcbiAgICAgIDogKGFuY2hvck5vZGUucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudCk7XHJcblxyXG4gICAgaWYgKCFwYXJlbnRFbGVtKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRldGVjdGVkSGVhZCA9ICdQJztcclxuICAgIGxldCBkZXRlY3RlZEZvbnQgPSAnMTQnOyAvLyBkZWZhdWx0XHJcblxyXG4gICAgLy8gVHJhdmVyc2UgdXB3YXJkIHRvIGRldGVjdCBmb3JtYXR0aW5nXHJcbiAgICB3aGlsZSAocGFyZW50RWxlbSAmJiBwYXJlbnRFbGVtICE9PSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRhZyA9IHBhcmVudEVsZW0udGFnTmFtZS50b1VwcGVyQ2FzZSgpO1xyXG5cclxuICAgICAgLy8gRGV0ZWN0IGhlYWRpbmdcclxuICAgICAgaWYgKFsnSDEnLCAnSDInLCAnSDMnLCAnSDQnLCAnSDUnLCAnSDYnLCAnUCddLmluY2x1ZGVzKHRhZykpIHtcclxuICAgICAgICBkZXRlY3RlZEhlYWQgPSB0YWc7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIERldGVjdCBpbmxpbmUgZm9udC1zaXplIGZyb20gc3R5bGUgb3IgY2xhc3NcclxuICAgICAgY29uc3QgZm9udFNpemUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnRFbGVtKS5mb250U2l6ZTtcclxuICAgICAgaWYgKGZvbnRTaXplKSB7XHJcbiAgICAgICAgY29uc3QgcHggPSBwYXJzZUludChmb250U2l6ZS5yZXBsYWNlKCdweCcsICcnKSwgMTApO1xyXG4gICAgICAgIGlmICghaXNOYU4ocHgpKSB7XHJcbiAgICAgICAgICBkZXRlY3RlZEZvbnQgPSBweC50b1N0cmluZygpO1xyXG4gICAgICAgICAgYnJlYWs7IC8vIGZvdW5kIHRoZSBjbG9zZXN0IHZhbGlkIGZvbnQgc2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcGFyZW50RWxlbSA9IHBhcmVudEVsZW0ucGFyZW50RWxlbWVudCBhcyBIVE1MRWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVcGRhdGUgYm91bmQgcHJvcGVydGllcyBpZiBjaGFuZ2VkXHJcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRIZWFkICE9PSBkZXRlY3RlZEhlYWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhlYWQgPSBkZXRlY3RlZEhlYWQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb250ICE9PSBkZXRlY3RlZEZvbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZvbnQgPSBkZXRlY3RlZEZvbnQ7XHJcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0Rm9udFNpemUoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzaXplID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuXHJcbiAgICBpZiAoIXJhbmdlLmNvbGxhcHNlZCkge1xyXG4gICAgICAvLyBOb24tZW1wdHkgc2VsZWN0aW9uXHJcbiAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgICAgIHNwYW4uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsIGAke3NpemV9cHhgLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XHJcbiAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgIC8vIElmIHNlbGVjdGlvbiBzcGFucyBtdWx0aXBsZSBlbGVtZW50cywgdXNlIGV4ZWNDb21tYW5kIGZhbGxiYWNrXHJcbiAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2ZvbnRTaXplJywgZmFsc2UsICc3Jyk7IC8vIHRlbXBvcmFyeSBsYXJnZXN0IHNpemVcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdmb250W3NpemU9XCI3XCJdJykuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoJ3NpemUnKTtcclxuICAgICAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgICAgZWwuY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBDb2xsYXBzZWQgc2VsZWN0aW9uIChubyB0ZXh0IHNlbGVjdGVkKVxyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgc3Bhbi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpKTsgLy8gemVyby13aWR0aCBzcGFjZVxyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKHNwYW4pO1xyXG5cclxuICAgICAgLy8gTW92ZSBjdXJzb3IgaW5zaWRlIHNwYW5cclxuICAgICAgY29uc3QgbmV3UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpO1xyXG4gICAgICBuZXdSYW5nZS5zZXRTdGFydChzcGFuLmZpcnN0Q2hpbGQgYXMgTm9kZSwgMSk7XHJcbiAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MO1xyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICAgIHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpO1xyXG4gICAgdGhpcy5fY2hhbmdlLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHNldEhlYWRpbmcoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCBzZWxlY3QgPSBldmVudC50YXJnZXQgYXMgSFRNTFNlbGVjdEVsZW1lbnQ7XHJcbiAgICBjb25zdCB0YWcgPSBzZWxlY3QudmFsdWU7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IG5ld0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcblxyXG4gICAgc3dpdGNoICh0YWcpIHtcclxuICAgICAgY2FzZSAnSDEnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICczMnB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0gyJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjhweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIMyc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzI0cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDQnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyMHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g1JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMThweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g2JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMTZweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICc2MDAnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ1AnOlxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcxNHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ25vcm1hbCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcclxuICAgIGlmIChzZWxlY3RlZFRleHQpIHtcclxuICAgICAgbmV3RWxlbS50ZXh0Q29udGVudCA9IHNlbGVjdGVkVGV4dDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG5ld0VsZW0uaW5uZXJIVE1MID0gJ1xcdTIwMEInOyAvLyBLZWVwcyBjdXJzb3IgdmlzaWJsZVxyXG4gICAgfVxyXG5cclxuICAgIHJhbmdlLmRlbGV0ZUNvbnRlbnRzKCk7XHJcbiAgICByYW5nZS5pbnNlcnROb2RlKG5ld0VsZW0pO1xyXG5cclxuICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIG5ld1JhbmdlLnNldFN0YXJ0KG5ld0VsZW0sIG5ld0VsZW0uY2hpbGROb2Rlcy5sZW5ndGgpO1xyXG4gICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG5cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG5cclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBjb25zdCBpbnB1dEV2ZW50ID0gbmV3IEV2ZW50KCdpbnB1dCcsIHsgYnViYmxlczogdHJ1ZSB9KTtcclxuICAgIGVkaXRvci5kaXNwYXRjaEV2ZW50KGlucHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZvcm1hdChjb21tYW5kOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKGNvbW1hbmQsIGZhbHNlLCAnJyk7XHJcbiAgfVxyXG5cclxuICAvL0ltYWdlIFNlY3Rpb25cclxuXHJcbiAgYWxsb3dEcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBpbWFnZSBkcmFnIHN0YXJ0XHJcbiAgZHJhZyhldmVudDogRHJhZ0V2ZW50LCBpbWFnZVVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBldmVudC5kYXRhVHJhbnNmZXI/LnNldERhdGEoXCJ0ZXh0XCIsIGltYWdlVXJsKTtcclxuICB9XHJcblxyXG4gIC8vIEhhbmRsZSBkcm9wIGV2ZW50IGluIHRoZSBlZGl0b3JcclxuICBkcm9wKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcclxuICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBiaW5kSW1hZ2VDbGlja0V2ZW50cygpIHtcclxuICAvLyAgIGNvbnN0IGVkaXRvckVsID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAvLyAgIGNvbnN0IGltYWdlcyA9IGVkaXRvckVsLnF1ZXJ5U2VsZWN0b3JBbGwoJ2ltZycpO1xyXG5cclxuICAvLyAgIGltYWdlcy5mb3JFYWNoKGltZyA9PiB7XHJcbiAgLy8gICAgIC8vIEF2b2lkIGRvdWJsZS1iaW5kaW5nXHJcbiAgLy8gICAgIGltZy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrIGFzIGFueSk7XHJcbiAgLy8gICAgIGltZy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25JbWFnZUNsaWNrLmJpbmQodGhpcykpO1xyXG4gIC8vICAgfSk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBvbkltYWdlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAvLyAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gIC8vICAgY29uc3QgaW1nID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbWFnZUVsZW1lbnQ7XHJcbiAgLy8gICB0aGlzLmVuYWJsZUltYWdlUmVzaXplKGltZyk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBlbmFibGVJbWFnZVJlc2l6ZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAvLyAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgcmVzaXplIGhhbmRsZXMgZmlyc3RcclxuICAvLyAgIHRoaXMucmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCk7XHJcblxyXG4gIC8vICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgd3JhcHBlci5jbGFzc0xpc3QuYWRkKCdpbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaW1nLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZSh3cmFwcGVyLCBpbWcpO1xyXG4gIC8vICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG5cclxuICAvLyAgIC8vIEFkZCByZXNpemFibGUgaGFuZGxlc1xyXG4gIC8vICAgY29uc3QgcmVzaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIC8vICAgcmVzaXplci5jbGFzc0xpc3QuYWRkKCdyZXNpemVyJyk7XHJcbiAgLy8gICB3cmFwcGVyLmFwcGVuZENoaWxkKHJlc2l6ZXIpO1xyXG5cclxuICAvLyAgIC8vIEhhbmRsZSByZXNpemluZyBsb2dpY1xyXG4gIC8vICAgbGV0IHN0YXJ0WCA9IDAsIHN0YXJ0WSA9IDAsIHN0YXJ0V2lkdGggPSAwLCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gIC8vICAgcmVzaXplci5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAoZTogTW91c2VFdmVudCkgPT4ge1xyXG4gIC8vICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgLy8gICAgIHN0YXJ0WCA9IGUuY2xpZW50WDtcclxuICAvLyAgICAgc3RhcnRZID0gZS5jbGllbnRZO1xyXG4gIC8vICAgICBzdGFydFdpZHRoID0gaW1nLndpZHRoO1xyXG4gIC8vICAgICBzdGFydEhlaWdodCA9IGltZy5oZWlnaHQ7XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3V2lkdGggPSBzdGFydFdpZHRoICsgKGUuY2xpZW50WCAtIHN0YXJ0WCk7XHJcbiAgLy8gICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gc3RhcnRIZWlnaHQgKyAoZS5jbGllbnRZIC0gc3RhcnRZKTtcclxuICAvLyAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtuZXdXaWR0aH1weGA7XHJcbiAgLy8gICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke25ld0hlaWdodH1weGA7XHJcbiAgLy8gICAgIH07XHJcblxyXG4gIC8vICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgLy8gICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gIC8vICAgICB9O1xyXG5cclxuICAvLyAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gIC8vICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gcmVtb3ZlSW1hZ2VSZXNpemVIYW5kbGVzKCkge1xyXG4gIC8vICAgY29uc3QgZXhpc3RpbmcgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1yZXNpemUtd3JhcHBlcicpO1xyXG4gIC8vICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgLy8gICAgIGNvbnN0IGltZyA9IGV4aXN0aW5nLnF1ZXJ5U2VsZWN0b3IoJ2ltZycpO1xyXG4gIC8vICAgICBpZiAoaW1nKSB7XHJcbiAgLy8gICAgICAgZXhpc3RpbmcucGFyZW50Tm9kZT8uaW5zZXJ0QmVmb3JlKGltZywgZXhpc3RpbmcpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGV4aXN0aW5nLnJlbW92ZSgpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcblxyXG4gIHJlbW92ZUltYWdlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMudXBsb2FkZWRJbWFnZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICB9XHJcblxyXG4gIGluc2VydEltYWdlSW5FZGl0b3IoaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3JlYXRlIGltYWdlIGVsZW1lbnRcclxuICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgaW1nLnNyYyA9IGltYWdlVXJsO1xyXG4gICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgaW1nLnN0eWxlLndpZHRoID0gJzMwMHB4JztcclxuICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGltYWdlIHRvIGFsbG93IHJlc2l6aW5nXHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOyAgLy8gRW5zdXJlcyB0aGUgd3JhcHBlciBvbmx5IHRha2VzIHVwIHNwYWNlIGZvciB0aGUgaW1hZ2VcclxuICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnOyAvLyBPcHRpb25hbCBib3JkZXIgdG8gaW5kaWNhdGUgdGhlIGltYWdlIGFyZWFcclxuXHJcbiAgICAvLyBBcHBlbmQgdGhlIGltYWdlIHRvIHRoZSB3cmFwcGVyXHJcbiAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSB3cmFwcGVyIHRvIHRoZSBlZGl0b3JcclxuICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcclxuXHJcbiAgICAvLyBNYWtlIHRoZSBpbWFnZSByZXNpemFibGVcclxuICAgIHRoaXMubWFrZUltYWdlUmVzaXphYmxlKHdyYXBwZXIsIGltZyk7XHJcblxyXG4gICAgLy8gT3B0aW9uYWxseSwgYWRkIGEgdGV4dCBub2RlIHRvIG1haW50YWluIGN1cnNvciBwb3NpdGlvbiBhZnRlciBhcHBlbmRpbmcgdGhlIGltYWdlXHJcbiAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7ICAvLyBJbnZpc2libGUgY2hhcmFjdGVyIHRvIG1haW50YWluIHBvc2l0aW9uXHJcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgIHJhbmdlLnNldFN0YXJ0QWZ0ZXIod3JhcHBlcik7XHJcbiAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTtcclxuICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyOiBIVE1MRWxlbWVudCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KTogdm9pZCB7XHJcbiAgICBsZXQgaXNSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgbGV0IHN0YXJ0WCA9IDA7XHJcbiAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgIGxldCBzdGFydFdpZHRoID0gMDtcclxuICAgIGxldCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHJlc2l6ZSBoYW5kbGVzIGZvciB0aGUgaW1hZ2VcclxuICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcclxuICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgIHBvc2l0aW9uU3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxyXG4gICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxyXG4gICAgKSA9PiB7XHJcbiAgICAgIGNvbnN0IGhhbmRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5oZWlnaHQgPSAnMTBweCc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XHJcbiAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgIE9iamVjdC5hc3NpZ24oaGFuZGxlLnN0eWxlLCBwb3NpdGlvblN0eWxlcyk7XHJcblxyXG4gICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgc3RhcnRYID0gcmVzaXplRXZlbnQuY2xpZW50WDtcclxuICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xyXG4gICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgc3RhcnRIZWlnaHQgPSBpbWcub2Zmc2V0SGVpZ2h0O1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWCA9IG1vdmVFdmVudC5jbGllbnRYIC0gc3RhcnRYO1xyXG4gICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcclxuICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGhhbmRsZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vIEFkZCByZXNpemluZyBoYW5kbGVzIHRvIHRoZSB3cmFwcGVyIGZvciB0aGUgaW1hZ2VcclxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgIHsgdG9wOiAnLTVweCcsIGxlZnQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgLSBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAnc2UtcmVzaXplJyxcclxuICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcclxuICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaW5zZXJ0SW1hZ2UoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0Py5maWxlcykge1xyXG4gICAgICBBcnJheS5mcm9tKGlucHV0LmZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgICAgdGhpcy51cGxvYWRlZEltYWdlcy5wdXNoKGltYWdlVXJsKTsgLy8gU3RvcmUgaW1hZ2UgVVJMIGluIHRoZSBhcnJheVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29udmVydEltYWdlKGZpbGU6IEZpbGUpOiBQcm9taXNlPEZpbGU+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmIChmaWxlLnR5cGUgIT09ICdpbWFnZS9wbmcnKSB7XHJcbiAgICAgICAgcmVzb2x2ZShmaWxlKTsgLy8gUmV0dXJuIHRoZSBvcmlnaW5hbCBmaWxlIGlmIGl0J3Mgbm90IGEgUE5HXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgaW1nLnNyYyA9IGUudGFyZ2V0LnJlc3VsdDtcclxuXHJcbiAgICAgICAgaW1nLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgaWYgKCFjdHgpIHtcclxuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGdldCBjYW52YXMgY29udGV4dCcpKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IGltZy53aWR0aDtcclxuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG5cclxuICAgICAgICAgIGN0eC5kcmF3SW1hZ2UoaW1nLCAwLCAwKTtcclxuICAgICAgICAgIGNhbnZhcy50b0Jsb2IoXHJcbiAgICAgICAgICAgIGJsb2IgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChibG9iKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqcGdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlLm5hbWUucmVwbGFjZSgvXFwucG5nJC8sICcuanBnJyksIHsgdHlwZTogJ2ltYWdlL2pwZWcnIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShqcGdGaWxlKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIGNvbnZlcnQgUE5HIHRvIEpQRycpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICdpbWFnZS9qcGVnJyxcclxuICAgICAgICAgICAgMC45NSAvLyBRdWFsaXR5IGZhY3RvciBmb3IgSlBFR1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9O1xyXG4gICAgICB9O1xyXG5cclxuICAgICAgcmVhZGVyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gcmVhZCB0aGUgZmlsZScpKTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaW5zZXJ0SW1hZ2VUb0VkaXRvcihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAgbGV0IGZpbGVUeXBlcyA9IFsnaW1hZ2UvanBlZycsICdpbWFnZS9wbmcnLCAnaW1hZ2UvanBnJ107XHJcblxyXG4gICAgaWYoIWZpbGVUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKVxyXG4gICAgICByZXR1cm47XHJcbiAgICBcclxuICAgIGlmIChmaWxlKSB7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBlLnRhcmdldC5yZXN1bHQ7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoIWVkaXRvcikge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRWRpdG9yIGVsZW1lbnQgbm90IGZvdW5kLicpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgd3JhcHBlci5jb250ZW50RWRpdGFibGUgPSAnZmFsc2UnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyID0gJzFweCBkYXNoZWQgI2NjYyc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5tYXJnaW4gPSAnMTBweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5wYWRkaW5nID0gJzVweCc7XHJcbiAgICAgICAgd3JhcHBlci5zdHlsZS5ib3JkZXJCbG9ja0NvbG9yID0gJyMwMDdCRkYnO1xyXG4gICAgICAgIGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xyXG4gICAgICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgICAgICBpbWcuc3R5bGUubWF4V2lkdGggPSAnMTAwJSc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9ICdhdXRvJztcclxuICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKGltZyk7XHJcbiAgICAgICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICBsZXQgc3RhcnRYID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRZID0gMDtcclxuICAgICAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0SGVpZ2h0ID0gMDtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlUmVzaXplSGFuZGxlID0gKFxyXG4gICAgICAgICAgY3Vyc29yOiBzdHJpbmcsXHJcbiAgICAgICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrOiAoZGVsdGFYOiBudW1iZXIsIGRlbHRhWTogbnVtYmVyKSA9PiB2b2lkXHJcbiAgICAgICAgKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUud2lkdGggPSAnMTBweCc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmJhY2tncm91bmQgPSAncmdiYSgwLCAwLCAwLCAwLjUpJztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5jdXJzb3IgPSBjdXJzb3I7XHJcbiAgICAgICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgICAgIGhhbmRsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCAocmVzaXplRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgaXNSZXNpemluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIHN0YXJ0WSA9IHJlc2l6ZUV2ZW50LmNsaWVudFk7XHJcbiAgICAgICAgICAgIHN0YXJ0V2lkdGggPSBpbWcub2Zmc2V0V2lkdGg7XHJcbiAgICAgICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKG1vdmVFdmVudDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpc1Jlc2l6aW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhWSA9IG1vdmVFdmVudC5jbGllbnRZIC0gc3RhcnRZO1xyXG4gICAgICAgICAgICAgICAgcmVzaXplQ2FsbGJhY2soZGVsdGFYLCBkZWx0YVkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY3JlYXRlUmVzaXplSGFuZGxlKFxyXG4gICAgICAgICAgJ253LXJlc2l6ZScsXHJcbiAgICAgICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoIC0gZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdzZS1yZXNpemUnLFxyXG4gICAgICAgICAgeyBib3R0b206ICctNXB4JywgcmlnaHQ6ICctNXB4JyB9LFxyXG4gICAgICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS53aWR0aCA9IGAke3N0YXJ0V2lkdGggKyBkZWx0YVh9cHhgO1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gYCR7c3RhcnRIZWlnaHQgKyBkZWx0YVl9cHhgO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHdyYXBwZXIpO1xyXG4gICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKTtcclxuICAgICAgICBlZGl0b3IuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVGFibGVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcbiAgICB0aGlzLnJvd3MgPSAxO1xyXG4gICAgdGhpcy5jb2xzID0gMTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKHRoaXMudGFibGVEaWFsb2csIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gICAgICAgIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gICAgICB9LFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRUYWJsZShyZXN1bHQucm93cywgcmVzdWx0LmNvbHMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5TaWduYXR1cmVEaWFsb2coZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5zZXJ0TWFya2VyKCk7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnNpZ25hdHVyZURpYWxvZywge1xyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIC8vIHRvcDogYCR7ZXZlbnQuY2xpZW50WX1weGAsXHJcbiAgICAgICAgLy8gbGVmdDogYCR7ZXZlbnQuY2xpZW50WH1weGAsXHJcbiAgICAgICAgdG9wOiAnMzBweCdcclxuICAgICAgfSxcclxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxyXG4gICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jb250YWluZXInXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBpZihyZXN1bHQpXHJcbiAgICAgICAgLy8gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgKz0gYDxpbWcgc3JjPSR7cmVzdWx0fSBhbHQ9J1NpZ25hdHVyZScgLz5gXHJcbiAgICAgIHRoaXMuaW5zZXJ0SW1hZ2VJbkVkaXRvcihyZXN1bHQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcmV2aWV3KGNvbHM6IG51bWJlciwgcm93czogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmNvbHMgPSBjb2xzO1xyXG4gICAgdGhpcy5yb3dzID0gcm93cztcclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlbGVjdGlvbihjb2xJbmRleDogbnVtYmVyLCByb3dJbmRleDogbnVtYmVyLCBkaWFsb2dSZWY6IGFueSkge1xyXG4gICAgdGhpcy5jb2xzID0gY29sSW5kZXg7XHJcbiAgICB0aGlzLnJvd3MgPSByb3dJbmRleDtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZSh7IHJvd3M6IHRoaXMucm93cywgY29sczogdGhpcy5jb2xzIH0pOyAvLyBDbG9zZSBkaWFsb2cgd2l0aCBzZWxlY3Rpb25cclxuICB9XHJcblxyXG4gIG1ha2VGaXJzdFJvd0hlYWRlcigpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAvLyBDaGVjayBpZiBzZWxlY3Rpb24gaXMgaW5zaWRlIHRoZSBlZGl0b3JcclxuICAgIGlmICghdGhpcy5pc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3IsIHNlbGVjdGlvbikpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gRmluZCB0aGUgY2xvc2VzdCB0YWJsZSB0byB0aGUgc2VsZWN0aW9uXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXI7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRoaXMuZmluZENsb3Nlc3RUYWJsZShzZWxlY3RlZE5vZGUpO1xyXG4gICAgaWYgKCF0YWJsZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCByb3cgY2VsbHMgdG8gaGVhZGVyIGNlbGxzXHJcbiAgICBjb25zdCBmaXJzdFJvdyA9IHRhYmxlLnJvd3NbMF07XHJcbiAgICBpZiAoZmlyc3RSb3cpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaXJzdFJvdy5jZWxscy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGNlbGwgPSBmaXJzdFJvdy5jZWxsc1tpXTtcclxuICAgICAgICBjb25zdCB0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RoJyk7XHJcbiAgICAgICAgdGguaW5uZXJIVE1MID0gY2VsbC5pbm5lckhUTUw7XHJcbiAgICAgICAgdGguc3R5bGUudGV4dEFsaWduID0gJ2NlbnRlcic7XHJcbiAgICAgICAgdGguc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyNGMUYxRjAnO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgYmxhY2snO1xyXG4gICAgICAgIHRoLnN0eWxlLmJvcmRlckNvbGxhcHNlID0gJ2NvbGxhcHNlJztcclxuICAgICAgICB0aC5zdHlsZS5wYWRkaW5nID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkucGFkZGluZzsgLy8gUmV0YWluIHBhZGRpbmdcclxuICAgICAgICB0aC5zdHlsZS53aWR0aCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLndpZHRoOyAvLyBSZXRhaW4gd2lkdGhcclxuICAgICAgICB0aC5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS5oZWlnaHQ7XHJcbiAgICAgICAgZmlyc3RSb3cucmVwbGFjZUNoaWxkKHRoLCBjZWxsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRDbG9zZXN0VGFibGUobm9kZTogTm9kZSk6IEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsIHtcclxuICAgIHdoaWxlIChub2RlICYmIG5vZGUgIT09IGRvY3VtZW50KSB7XHJcbiAgICAgIGlmIChub2RlLm5vZGVOYW1lID09PSAnVEFCTEUnKSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGUgYXMgSFRNTFRhYmxlRWxlbWVudDtcclxuICAgICAgfVxyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRNYXJrZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApLmNsb25lUmFuZ2UoKTtcclxuICAgICAgY29uc3QgbWFya2VyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBtYXJrZXIuaWQgPSAndGFibGUtbWFya2VyJztcclxuICAgICAgbWFya2VyLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgIHJhbmdlLmluc2VydE5vZGUobWFya2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc2VydFRhYmxlKHJvd3M6IHN0cmluZywgY29sczogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCByb3dDb3VudCA9IHBhcnNlSW50KHJvd3MsIDEwKTtcclxuICAgIGNvbnN0IGNvbENvdW50ID0gcGFyc2VJbnQoY29scywgMTApO1xyXG5cclxuICAgIGlmIChpc05hTihyb3dDb3VudCkgfHwgaXNOYU4oY29sQ291bnQpIHx8IHJvd0NvdW50IDwgMSB8fCBjb2xDb3VudCA8IDEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBtYXJrZXIgPSBlZGl0b3IucXVlcnlTZWxlY3RvcignI3RhYmxlLW1hcmtlcicpO1xyXG5cclxuICAgIGNvbnN0IHRhYmxlSFRNTCA9IHRoaXMuY3JlYXRlVGFibGVIVE1MKHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICB0ZW1wRGl2LmlubmVySFRNTCA9IHRhYmxlSFRNTDtcclxuICAgIGNvbnN0IHRhYmxlID0gdGVtcERpdi5maXJzdEVsZW1lbnRDaGlsZDtcclxuXHJcbiAgICBpZiAobWFya2VyICYmIHRhYmxlKSB7XHJcbiAgICAgIG1hcmtlci5wYXJlbnROb2RlIS5yZXBsYWNlQ2hpbGQodGFibGUsIG1hcmtlcik7XHJcbiAgICAgIHRoaXMuc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGUgYXMgSFRNTEVsZW1lbnQpO1xyXG4gICAgICBlZGl0b3IuZm9jdXMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGZhbGxiYWNrIGlmIG5vIG1hcmtlciwganVzdCBhcHBlbmRcclxuICAgICAgdGhpcy5hcHBlbmRUYWJsZShlZGl0b3IsIHJvd0NvdW50LCBjb2xDb3VudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgIGxldCB0YWJsZUhUTUwgPSAnPHRhYmxlIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyB3aWR0aDogMTAwJTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCI+JztcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7IGkrKykge1xyXG4gICAgICB0YWJsZUhUTUwgKz0gJzx0cj4nO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbENvdW50OyBqKyspIHtcclxuICAgICAgICB0YWJsZUhUTUwgKz0gYDx0ZCBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBoZWlnaHQ6IDJlbTsgcGFkZGluZzogLjRlbTsgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cInRleHRib3hcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCI+PC90ZD5gO1xyXG4gICAgICB9XHJcbiAgICAgIHRhYmxlSFRNTCArPSAnPC90cj4nO1xyXG4gICAgfVxyXG4gICAgdGFibGVIVE1MICs9ICc8L3RhYmxlPic7XHJcbiAgICByZXR1cm4gdGFibGVIVE1MO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRUYWJsZShlZGl0b3I6IEhUTUxFbGVtZW50LCByb3dDb3VudDogbnVtYmVyLCBjb2xDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgZWRpdG9yLmlubmVySFRNTCArPSB0YWJsZUhUTUw7XHJcbiAgICBjb25zdCBsYXN0SW5zZXJ0ZWRUYWJsZSA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCd0YWJsZTpsYXN0LWNoaWxkJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB0aGlzLnNldEN1cnNvclRvRmlyc3RDZWxsKGxhc3RJbnNlcnRlZFRhYmxlKTtcclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc1NlbGVjdGlvbkluc2lkZUVkaXRvcihlZGl0b3I6IEhUTUxFbGVtZW50LCBzZWxlY3Rpb246IFNlbGVjdGlvbik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgbGV0IG5vZGUgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jb21tb25BbmNlc3RvckNvbnRhaW5lcjtcclxuICAgIHdoaWxlIChub2RlKSB7XHJcbiAgICAgIGlmIChub2RlID09PSBlZGl0b3IpIHJldHVybiB0cnVlO1xyXG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlITtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q3Vyc29yVG9GaXJzdENlbGwodGFibGU6IEhUTUxFbGVtZW50KTogdm9pZCB7XHJcbiAgICBjb25zdCBmaXJzdENlbGwgPSB0YWJsZS5xdWVyeVNlbGVjdG9yKCd0cjpmaXJzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZCwgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmIChmaXJzdENlbGwpIHtcclxuICAgICAgZmlyc3RDZWxsLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgJ3RydWUnKTtcclxuICAgICAgZmlyc3RDZWxsLmZvY3VzKCk7XHJcbiAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgbmV3UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0Q2VsbCk7IC8vIFNlbGVjdCB0aGUgY29udGVudHMgb2YgdGhlIGNlbGxcclxuICAgICAgbmV3UmFuZ2UuY29sbGFwc2UodHJ1ZSk7IC8vIENvbGxhcHNlIHRvIHRoZSBzdGFydFxyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5zZXJ0UGFnZUJyZWFrKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcGFnZUJyZWFrID0gYDxkaXYgc3R5bGU9XCJwYWdlLWJyZWFrLWFmdGVyOiBhbHdheXM7XCI+PGJyIC8+PC9kaXY+YDtcclxuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHBhZ2VCcmVhayk7XHJcbiAgfVxyXG5cclxuICBzdWJtaXRDb250ZW50KCk6IHZvaWQge1xyXG4gICAgY29uc3QgZWRpdG9yID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudDtcclxuICAgIGlmKCFlZGl0b3IpIHJldHVybjtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBlZGl0b3IuaW5uZXJIVE1MOyAvLyBHZXQgdGhlIEhUTUwgY29udGVudCBmcm9tIHRoZSBlZGl0b3JcclxuICAgIGNvbnN0IHBsYWluVGV4dENvbnRlbnQgPSBlZGl0b3IuaW5uZXJUZXh0OyAvLyBPcHRpb25hbGx5LCBnZXQgcGxhaW4gdGV4dCBjb250ZW50XHJcbiAgICBpZiAoIWVkaXRvci5pbm5lckhUTUwudHJpbSgpKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+JztcclxuICAgICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vbkNoYW5nZShjb250ZW50KTtcclxuICB9XHJcblxyXG4gIC8vU2lnbmF0dXJlXHJcblxyXG4gIGNsb3NlU2lnbkRpYWxvZyhkaWFsb2dSZWY6IGFueSl7XHJcbiAgICBkaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcbiAgc3VibWl0U2lnbkRpYWxvZyhkaWFsb2dSZWY6IGFueSl7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5zaWduYXR1cmVQYWQudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcclxuICAgIGRpYWxvZ1JlZi5jbG9zZShkYXRhKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRpbWVuc2lvblwiPlxyXG4gIDxkaXYgY2xhc3M9XCJyaWNoLXRleHQtZWRpdG9yXCI+XHJcbiAgICA8IS0tIFRvb2xiYXIgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxyXG4gICAgICA8c2VsZWN0ICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udGV4dEZvcm1hdCA/PyB0cnVlXCIgY2xhc3M9XCJzZWxlY3Qtd3JhcHBlclwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIZWFkXCIgKGNoYW5nZSk9XCJzZXRIZWFkaW5nKCRldmVudClcIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUFwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4ICFpbXBvcnRhbnQ7XCI+UGFyYWdyYXBoPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgxXCIgc3R5bGU9XCJmb250LXNpemU6IDMycHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIMlwiIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDI8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDNcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgzPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg0XCIgc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5INDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INTwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJINlwiIHN0eWxlPVwiZm9udC1zaXplOiAxNnB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcIj5INjwvb3B0aW9uPlxyXG4gICAgICA8L3NlbGVjdD5cclxuICAgICAgPHNlbGVjdCAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmZvbnRTaXplID8/IHRydWVcIiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEZvbnRcIlxyXG4gICAgICAgIChjaGFuZ2UpPVwic2V0Rm9udFNpemUoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDEycHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjEyXCI+MTJweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE0XCIgc2VsZWN0ZWQ+MTRweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE2XCI+MTZweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjE4XCI+MThweDwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gc3R5bGU9XCJmb250LXNpemU6IDIwcHggIWltcG9ydGFudDtcIiB2YWx1ZT1cIjIwXCI+MjBweDwvb3B0aW9uPiAgXHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjRcIj4yNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjhcIj4yOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMzJcIj4zMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogNDhweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiNDhcIj40OHB4PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYm9sZCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnYm9sZCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJCb2xkXCIgdGl0bGU9XCJCb2xkXCIgPlxyXG4gICAgICAgIDxzdmcgIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIi02LjUgMCAyOCAzMlwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDx0aXRsZT5ib2xkPC90aXRsZT4gPHBhdGggZD1cIk0wIDI1LjUzMXYxLjM0NGMxLjA2My0wLjAzMSAxLjkzOC0wLjA2MyAyLjU2My0wLjA5NCAwLjYyNSAwIDEuMDk0LTAuMDMxIDEuMzEzLTAuMDMxIDEuNjU2LTAuMTI1IDMuMDYzLTAuMjE5IDQuMjgxLTAuMTg4bDIuODEzIDAuMDYzYzIuNDM4IDAgNC4yNS0wLjMxMyA1Ljc1LTEgMC43MTktMC4zNDQgMS4zNDQtMC44NDQgMS45NjktMS41MzEgMC40NjktMC40NjkgMC44MTMtMS4wMzEgMS4wMzEtMS42NTYgMC4yNS0wLjg0NCAwLjM3NS0xLjU5NCAwLjM3NS0yLjI4MSAwLTIuNS0xLjcxOS00LjYyNS01LjA5NC01LjQwNiAwLjUzMS0wLjI1IDEuMDMxLTAuNSAxLjM3NS0wLjY4OHMwLjYyNS0wLjMxMyAwLjc4MS0wLjQzOGMxLjE4OC0wLjg3NSAxLjc4MS0xLjkwNiAxLjc4MS0zLjI4MSAwLTAuNTk0LTAuMDk0LTEuMTg4LTAuMjgxLTEuNzE5LTAuMzc1LTEuMDk0LTEuMjE5LTItMi40MDYtMi41NjMtMC41MzEtMC4zMTMtMS4wMzEtMC40NjktMS4zNzUtMC41MzEtMC45MzgtMC4yNS0xLjg0NC0wLjM3NS0yLjcxOS0wLjM3NWgtMS4wOTRjLTAuMjE5IDAtMC40MDYgMC0wLjUzMS0wLjAzMWgtMC41Yy0wLjA2MyAwLTAuMTU2IDAtMC4yNSAwLjAzMWgtMC42MjVsLTUuNDA2IDAuMTU2LTMuNzE5IDAuMDk0IDAuMDYzIDEuMTg4YzAuODc1IDAuMTI1IDEuNDA2IDAuMTg4IDEuNjI1IDAuMTg4IDAuNDM4IDAgMC43ODEgMC4wOTQgMC45NjkgMC4yMTkgMC4wOTQgMCAwLjE1NiAwLjA2MyAwLjE4OCAwLjEyNSAwLjA2MyAwLjIxOSAwLjEyNSAwLjY4OCAwLjE1NiAxLjU2MyAwLjA2MyAxLjU2MyAwLjA2MyAyLjgxMyAwLjA2MyAzLjc1IDAuMDMxIDAuOTY5IDAuMDMxIDEuNjI1IDAuMDk0IDJ2Ny4wMzFjMCAxLjIxOS0wLjAzMSAyLjEyNS0wLjE1NiAyLjc1LTAuMDMxIDAuMjE5LTAuMTI1IDAuNDM4LTAuMjgxIDAuNjg4LTAuNDM4IDAuMTg4LTEgMC4zNzUtMS43NSAwLjQ2OS0wLjM3NSAwLjA2My0wLjcxOSAwLjEyNS0xIDAuMTU2ek03LjcxOSAxNC4yODF2LTIuNDY5YzAuMDYzLTEuNzE5IDAtMi45NjktMC4wMzEtMy45NjktMC4wNjMtMC40MzgtMC4wNjMtMC44NDQtMC4wNjMtMS4wNjMgMC43NS0wLjE1NiAxLjM0NC0wLjIxOSAxLjg0NC0wLjIxOSAxLjYyNSAwIDIuODQ0IDAuMzQ0IDMuNjU2IDEuMDk0IDAuODEzIDAuNjg4IDEuMjE5IDEuNTYzIDEuMjE5IDIuNjU2IDAgMi45NjktMS43NSA0LjA5NC01LjA2MyA0LjA5NC0wLjU2MyAwLTEuMDk0LTAuMDMxLTEuNTYzLTAuMTI1ek03LjcxOSAyMC40MDZ2LTQuNWMwLjMxMy0wLjA2MyAwLjc1LTAuMTI1IDEuNDM4LTAuMTI1IDEuNTk0LTAuMDMxIDIuODEzIDAuMTI1IDMuNTYzIDAuNDM4IDEuNTMxIDAuNTYzIDIuNTk0IDIuMTg4IDIuNTk0IDQuMzQ0IDAgMS4wMzEtMC4yMTkgMS44NDQtMC41NjMgMi41NjMtMC4zNzUgMC43MTktMC45MDYgMS4yMTktMS43MTkgMS41OTQtMS42NTYgMC43ODEtMy43MTkgMC43MTktNS4xMjUgMC4xMjUtMC4wOTQtMC4yNS0wLjEyNS0wLjQzOC0wLjEyNS0wLjU5NHpcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uaXRhbGljID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpdGFsaWMnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSXRhbGljXCIgdGl0bGU9XCJJdGFsaWNcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfaXRhbGljPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDIwIDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIEl0YWxpY1wiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNOCAxOUgxME0xMCAxOUgxMk0xMCAxOUwxNCA1TTEyIDVIMTRNMTQgNUgxNlwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udW5kZXJsaW5lID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCd1bmRlcmxpbmUnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiVW5kZXJsaW5lXCIgdGl0bGU9XCJVbmRlcmxpbmVcIj5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfdW5kZXJsaW5lPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDE4IDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIFVuZGVybGluZVwiPiA8cGF0aCBpZD1cIlZlY3RvclwiIGQ9XCJNNiAxOUgxOE04IDVWMTFDOCAxMy4yMDkxIDkuNzkwODYgMTUgMTIgMTVDMTQuMjA5MSAxNSAxNiAxMy4yMDkxIDE2IDExVjVcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnN0cmlrZXRocm91Z2ggPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ3N0cmlrZXRocm91Z2gnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiU3RyaWtldGhyb3VnaFwiIHRpdGxlPVwiU3RyaWtldGhyb3VnaFwiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPnN0cmlrZXRocm91Z2hfczwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjQgMCAyMCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8ZyBpZD1cIkVkaXQgLyBTdHJpa2V0aHJvdWdoXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk0xMi4wMDA1IDEyLjAwMDFDMTIuODk1OSAxMi4wMDAxIDEzLjc3NDkgMTIuMTkyNSAxNC41NDU3IDEyLjU1NzFDMTQuODkzOSAxMi43MjE4IDE1LjIxNDYgMTIuOTE5MiAxNS41MDA5IDEzLjE0MzdDMTUuODQ4NCAxMy40MTYyIDE2LjE0NTcgMTMuNzI5IDE2LjM4MjIgMTQuMDczMkMxNi44MTM2IDE0LjcwMDkgMTcuMDI2MyAxNS40MDk2IDE2Ljk5ODIgMTYuMTI1NkMxNi45NyAxNi44NDE2IDE2LjcwMiAxNy41Mzg1IDE2LjIyMjIgMTguMTQzM0MxNS43NDI0IDE4Ljc0ODEgMTUuMDY4NCAxOS4yMzg2IDE0LjI3MDUgMTkuNTYzOEMxMy40NzI3IDE5Ljg4OSAxMi41ODAyIDIwLjAzNzMgMTEuNjg2NSAxOS45OTIzQzEwLjc5MjggMTkuOTQ3MyA5LjkzMTA0IDE5LjcxMDggOS4xOTA0MyAxOS4zMDgyQzguNDQ5ODIgMTguOTA1NSA3Ljg1NzgyIDE4LjM1MTQgNy40NzY1NiAxNy43MDMyTTEyLjAwMDUgMTIuMDAwMUg0TTEyLjAwMDUgMTIuMDAwMUgyME0xNi41MjQzIDYuMjk3MThDMTYuMTQzIDUuNjQ5IDE1LjU1MTIgNS4wOTQ2MiAxNC44MTA1IDQuNjkxOTdDMTQuMDY5OSA0LjI4OTMyIDEzLjIwNzYgNC4wNTI4NyAxMi4zMTQgNC4wMDc4OUMxMS40MjAzIDMuOTYyOTEgMTAuNTI3OCA0LjExMDkxIDkuNzI5OTggNC40MzYxM0M4LjkzMjEzIDQuNzYxMzUgOC4yNTgxMiA1LjI1MjA1IDcuNzc4MzIgNS44NTY4OUM3LjI5ODUyIDYuNDYxNzMgNy4wMzA1NyA3LjE1ODg1IDcuMDAyNDQgNy44NzQ4NUM2Ljk5NDIgOC4wODQ2MyA3LjAwNjY5IDguMjkzNDUgNy4wMzkyNCA4LjUwMDE0XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5hbGlnbkxlZnQgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlMZWZ0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIExlZnRcIiB0aXRsZT1cIkFsaWduIExlZnRcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2xlZnQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTEgMUgxVjNIMTFWMVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xIDVIMTVWN0gxVjVaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTEgOUgxVjExSDExVjlaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgMTNIMVYxNUgxNVYxM1pcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5hbGlnbkNlbnRlciA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUNlbnRlcicpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJDZW50ZXJcIiB0aXRsZT1cIkFsaWduIENlbnRlclwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fY2VudGVyPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE1IDFIMVYzSDE1VjFaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMSA1SDE1VjdIMVY1WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDlIMVYxMUgxNVY5WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTExIDEzSDFWMTVIMTFWMTNaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uYWxpZ25SaWdodCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeVJpZ2h0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkFsaWduIFJpZ2h0XCIgdGl0bGU9XCJBbGlnbiBSaWdodFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fcmlnaHQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xNSAxSDVWM0gxNVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSA5SDVWMTFIMTVWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/Lmp1c3RpZnkgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2p1c3RpZnlGdWxsJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkp1c3RpZnlcIiB0aXRsZT1cIkp1c3RpZnlcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2FsaWduX2p1c3RpZnk8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgLTIuNSAyOSAyOVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj48cGF0aCBkPVwibTEuMzM0IDIuNjY2aDI2LjY2NWMuMDExIDAgLjAyNC4wMDEuMDM3LjAwMS43MzcgMCAxLjMzNC0uNTk3IDEuMzM0LTEuMzM0cy0uNTk3LTEuMzM0LTEuMzM0LTEuMzM0Yy0uMDEzIDAtLjAyNiAwLS4wMzkuMDAxaC4wMDItMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMnpcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgNS4zMzNoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy4wMTEgMCAuMDI0LjAwMS4wMzcuMDAxLjczNyAwIDEuMzM0LS41OTcgMS4zMzQtMS4zMzRzLS41OTctMS4zMzQtMS4zMzQtMS4zMzRjLS4wMTMgMC0uMDI2IDAtLjAzOS4wMDF6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDEwLjY2N2gtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjcyLS4wMjEgMS4yOTYtLjYxIDEuMjk2LTEuMzMzcy0uNTc2LTEuMzEyLTEuMjk0LTEuMzMzelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAyMS4zMzNoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMTZoLTI2LjY2NWMtLjcyLjAyMS0xLjI5Ni42MS0xLjI5NiAxLjMzM3MuNTc2IDEuMzEyIDEuMjk0IDEuMzMzaC4wMDIgMjYuNjY1Yy43Mi0uMDIxIDEuMjk2LS42MSAxLjI5Ni0xLjMzM3MtLjU3Ni0xLjMxMi0xLjI5NC0xLjMzM3pcIj48L3BhdGg+PC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5idWxsZXRMaXN0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRVbm9yZGVyZWRMaXN0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIlVub3JkZXJlZCBMaXN0XCIgdGl0bGU9XCJCdWxsZXQgTGlzdFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9idWxsZXRlZDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgMCAzNiA0OFwiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPjxwYXRoIGQ9XCJNOCAyMWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6TTggOWMtMS42NiAwLTMgMS4zNC0zIDNzMS4zNCAzIDMgMyAzLTEuMzQgMy0zLTEuMzQtMy0zLTN6bTAgMjQuMzNjLTEuNDcgMC0yLjY3IDEuMTktMi42NyAyLjY3czEuMiAyLjY3IDIuNjcgMi42NyAyLjY3LTEuMTkgMi42Ny0yLjY3LTEuMi0yLjY3LTIuNjctMi42N3pNMTQgMzhoMjh2LTRIMTR2NHptMC0xMmgyOHYtNEgxNHY0em0wLTE2djRoMjh2LTRIMTR6XCI+PC9wYXRoPjwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8ubnVtYmVyZWRMaXN0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdpbnNlcnRPcmRlcmVkTGlzdCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJPcmRlcmVkIExpc3RcIiB0aXRsZT1cIk51bWJlcmVkIExpc3RcIiA+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Zm9ybWF0X2xpc3RfbnVtYmVyZWQ8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmVyc2lvbj1cIjEuMVwiIGlkPVwiQ2FwYV8xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIHZpZXdCb3g9XCIwIDAgOTQuNDc5IDk0LjQ3OVwiIHhtbDpzcGFjZT1cInByZXNlcnZlXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnPiA8Zz4gPHBhdGggZD1cIk05Mi40NzksNi44MjFIMjYuODIzYy0xLjEwNCwwLTIsMC44OTYtMiwyVjE5LjU4YzAsMS4xMDQsMC44OTYsMiwyLDJoNjUuNjU2YzEuMTA0LDAsMi0wLjg5NiwyLTJWOC44MjEgQzk0LjQ3OSw3LjcxNyw5My41ODQsNi44MjEsOTIuNDc5LDYuODIxelwiPjwvcGF0aD4gPHBhdGggZD1cIk05Mi40NzksNDAuNDU3SDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMnYxMC43NjFjMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY0Mi40NTcgQzk0LjQ3OSw0MS4zNTIsOTMuNTg0LDQwLjQ1Nyw5Mi40NzksNDAuNDU3elwiPjwvcGF0aD4gPHBhdGggZD1cIk05Mi40NzksNzUuMTA5SDI2LjgyM2MtMS4xMDQsMC0yLDAuODk2LTIsMnYxMC43NTljMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY3Ny4xMDkgQzk0LjQ3OSw3Ni4wMDQsOTMuNTg0LDc1LjEwOSw5Mi40NzksNzUuMTA5elwiPjwvcGF0aD4gPHBhdGggZD1cIk0xLjg0MiwxMS4xMDRjMC40MjMsMC4wNTEsMC44NDgtMC4wOCwxLjE2Ny0wLjM2bDAuOTE0LTAuNzk5djEyLjk3M2MwLDAuODI4LDAuNjcyLDEuNSwxLjUsMS41aDEuNTQ2IGMwLjgyOCwwLDEuNS0wLjY3MiwxLjUtMS41VjUuNTY3YzAtMC44MjgtMC42NzItMS41LTEuNS0xLjVINS4zNzhjLTAuMzU2LDAtMC43MDEsMC4xMjctMC45NzMsMC4zNThMMC41MjcsNy43MjggYy0wLjU4OSwwLjUwMS0wLjcsMS4zNjktMC4yNTYsMi4wMDNsMC41MjIsMC43NDVDMS4wNCwxMC44MjUsMS40MiwxMS4wNTMsMS44NDIsMTEuMTA0elwiPjwvcGF0aD4gPHBhdGggZD1cIk0yLjU0NiwzNy41Yy0wLjY0NywwLjIzLTEuMDU2LDAuODcyLTAuOTksMS41NTZsMC4wOTYsMC45OTljMC4wNDgsMC40OTcsMC4zMzksMC45MzgsMC43NzgsMS4xNzYgYzAuNDM4LDAuMjM4LDAuOTY3LDAuMjQzLDEuNDA5LDAuMDExYzEuMTgtMC42MTUsMS45MjMtMC43NzUsMi45MjItMC41MzRjMC43MSwwLjE2MywxLjE4OCwwLjU4NiwxLjQzOCwxLjIyNSBjMC4zNzgsMS4xNDMsMC4zOTUsMi45NTctMi44NTQsNi44NzNsLTIuNTA2LDIuOTk2Yy0wLjU4OSwwLjY4OC0wLjk5LDEuMTE5LTEuMzAyLDEuNDA0Yy0wLjMxMiwwLjI4NC0wLjQ4OCwwLjY4OC0wLjQ4OCwxLjEwNyB2MS40NzVjMCwwLjgyOCwwLjY3MiwxLjUsMS41LDEuNWg5LjEzMmMwLjgyOCwwLDEuNS0wLjY3MiwxLjUtMS41VjU1LjAxYzAtMC44MjgtMC42NzItMS41LTEuNS0xLjVINi44OTYgYzAuNDU4LTAuNTE1LDEuMDM3LTEuMjExLDEuNzE2LTIuMDYzYzIuODAzLTMuNDY4LDUuMDYxLTYuNjQ1LDQuMjkyLTEwLjM3NmMtMC4zMDktMS42NzItMS4yNDctMi45NjYtMi43MzEtMy43NTIgYy0wLjgyNi0wLjQyNC0xLjg3OS0wLjYzOS0zLjEyNy0wLjYzOUM1LjYyOSwzNi42OCw0LjAzMSwzNi45NzEsMi41NDYsMzcuNXpcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTAuNDkxLDc5LjUxNmMwLjI1LTAuMTM1LDAuNDg3LTAuMjg5LDAuNzQtMC40ODNjMS43MTgtMS4zMTMsMS44MDEtMy4zMzUsMS43ODYtMy44ODUgYy0wLjAwMS0xLjg3OC0wLjcxMi0zLjMxOC0yLjE2Ni00LjQwMWMtMS4wMjYtMC43Ny0yLjUzNC0xLjE3Ny00LjM2MS0xLjE3N2MtMS4zNDcsMC0yLjc4NywwLjIxMi00LjA1NywwLjU5NiBjLTAuNjY4LDAuMjAyLTEuMTA3LDAuODM5LTEuMDYzLDEuNTMzbDAuMDU4LDAuODhjMC4wMzEsMC40NzEsMC4yOCwwLjg5NiwwLjY3MywxLjE1NWMwLjM5NCwwLjI1OSwwLjg4NiwwLjMxOSwxLjMyNywwLjE1OSBjMC44NjQtMC4zMDcsMS41NzEtMC40NSwyLjIyMy0wLjQ1YzAuMjI5LDAsMC40NTcsMC4wMTksMC43MjIsMC4wNjNjMC45NCwwLjEyNywxLjU2MywwLjU0OSwxLjksMS4yODMgYzAuMjM3LDAuNTIsMC4xOSwxLjQ0NS0wLjA4MywxLjg4NWMtMC42NTQsMS4wMTQtMi40MzgsMS4yMTctMy40NDMsMS4yNWMtMC44MSwwLjAyNC0xLjQ1MywwLjY4OC0xLjQ1MywxLjQ5OHYwLjY1OCBjMCwwLjgyOCwwLjY4NywxLjUsMS41MTUsMS41YzEuNTc1LDAsMi4zMTEsMC4zMDksMi41OTYsMC40ODVjMC43MzcsMC40NjUsMS4wNjUsMS4wNDMsMS4wNjYsMS45MTggYzAuMDI1LDAuOTEyLTAuMzQ4LDEuNjA2LTEuMTI5LDIuMTIxYy0xLjAxNCwwLjY1MS0yLjY0LDAuNjQ3LTQuNTA1LDAuMDMyYy0wLjQzOC0wLjE0Ni0wLjkxOC0wLjA4Mi0xLjMwMiwwLjE3NSBjLTAuMzg0LDAuMjU1LTAuNjI5LDAuNjcyLTAuNjY1LDEuMTMybC0wLjA2OCwwLjg3MkMwLjc1LDg4Ljk3MywxLjEzNSw4OS41ODgsMS43NSw4OS44M2MwLjMzLDAuMTMsMC41NTEsMC4xODMsMS4wMjIsMC4yODEgYzAuODU3LDAuMTk2LDEuODQsMC4zMDIsMi44NDIsMC4zMDJjMS40OTMsMCw0LjI0OC0wLjI0Nyw1Ljk0NC0xLjkxOWMxLjY1Ny0xLjY5LDEuOTc0LTQuMTEsMS41Ni01LjcyOSBDMTIuNjM2LDgwLjcwNCwxMS40NjEsNzkuOTQ2LDEwLjQ5MSw3OS41MTZ6XCI+PC9wYXRoPiA8L2c+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5pbWFnZSA/PyB0cnVlXCIgYXJpYS1sYWJlbD1cIkluc2VydCBJbWFnZVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBkaXNwbGF5OiBpbmxpbmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XCIgdGl0bGU9XCJJbnNlcnQgSW1hZ2VcIiA+XHJcbiAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwiLnBuZywuanBnLC5qcGVnXCIgIChjaGFuZ2UpPVwiaW5zZXJ0SW1hZ2VUb0VkaXRvcigkZXZlbnQpXCJcclxuICAgICAgICAgIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtNTAlOyB0b3A6IDA7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IG9wYWNpdHk6IDA7IGN1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbiBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lO1wiPmluc2VydF9waG90b19vdXRsaW5lZDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjIgMSAyMCAyMlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE0LjI2NDcgMTUuOTM3N0wxMi41NDczIDE0LjIzNDZDMTEuNzU4IDEzLjQ1MTkgMTEuMzYzMyAxMy4wNjA1IDEwLjkwODkgMTIuOTEzN0MxMC41MDkyIDEyLjc4NDUgMTAuMDc5IDEyLjc4NDUgOS42NzkyMiAxMi45MTM3QzkuMjI0ODUgMTMuMDYwNSA4LjgzMDE3IDEzLjQ1MTkgOC4wNDA4MiAxNC4yMzQ2TDQuMDQxOTMgMTguMjYyMk0xNC4yNjQ3IDE1LjkzNzdMMTQuNjA2IDE1LjU5OTFDMTUuNDEyIDE0Ljc5OTkgMTUuODE0OSAxNC40MDAzIDE2LjI3NzMgMTQuMjU0NUMxNi42ODM5IDE0LjEyNjIgMTcuMTIwOCAxNC4xMzEyIDE3LjUyNDQgMTQuMjY4OEMxNy45ODMyIDE0LjQyNTMgMTguMzc2OSAxNC44MzQgMTkuMTY0MiAxNS42NTE1TDIwIDE2LjUwMDFNMTQuMjY0NyAxNS45Mzc3TDE4LjIyIDE5Ljk2MjhNMTguMjIgMTkuOTYyOEMxNy44NzAzIDIwIDE3LjQyMTMgMjAgMTYuOCAyMEg3LjJDNi4wNzk4OSAyMCA1LjUxOTg0IDIwIDUuMDkyMDIgMTkuNzgyQzQuNzE1NyAxOS41OTAzIDQuNDA5NzMgMTkuMjg0MyA0LjIxNzk5IDE4LjkwOEM0LjEyNTgzIDE4LjcyNzEgNC4wNzI2NCAxOC41MjI2IDQuMDQxOTMgMTguMjYyMk0xOC4yMiAxOS45NjI4QzE4LjUwMDcgMTkuOTMyOSAxOC43MTc1IDE5Ljg3OTEgMTguOTA4IDE5Ljc4MkMxOS4yODQzIDE5LjU5MDMgMTkuNTkwMyAxOS4yODQzIDE5Ljc4MiAxOC45MDhDMjAgMTguNDgwMiAyMCAxNy45MjAxIDIwIDE2LjhWMTNNMTEgNEg3LjJDNi4wNzk4OSA0IDUuNTE5ODQgNCA1LjA5MjAyIDQuMjE3OTlDNC43MTU3IDQuNDA5NzMgNC40MDk3MyA0LjcxNTY5IDQuMjE3OTkgNS4wOTIwMkM0IDUuNTE5ODQgNCA2LjA3OTkgNCA3LjJWMTYuOEM0IDE3LjQ0NjYgNCAxNy45MDY2IDQuMDQxOTMgMTguMjYyMk0xOCA5VjZNMTggNlYzTTE4IDZIMjFNMTggNkgxNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnRhYmxlID8/IHRydWVcIiAoY2xpY2spPVwib3BlblRhYmxlRGlhbG9nKCRldmVudClcIiB0eXBlPVwiYnV0dG9uXCIgIHRpdGxlPVwiVGFibGVcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDaG9vc2UgdGFibGUgcm93cyBhbmQgY29sdW1uc1wiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmJvcmRlcl9hbGw8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjU2cHhcIiBoZWlnaHQ9XCIyNTZweFwiIHZpZXdCb3g9XCIyIDEyIDIwIDNcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0zIDlIMjFNMyAxNUgyMU05IDlMOSAyME0xNSA5TDE1IDIwTTYuMiAyMEgxNy44QzE4LjkyMDEgMjAgMTkuNDgwMiAyMCAxOS45MDggMTkuNzgyQzIwLjI4NDMgMTkuNTkwMyAyMC41OTAzIDE5LjI4NDMgMjAuNzgyIDE4LjkwOEMyMSAxOC40ODAyIDIxIDE3LjkyMDEgMjEgMTYuOFY3LjJDMjEgNi4wNzk5IDIxIDUuNTE5ODQgMjAuNzgyIDUuMDkyMDJDMjAuNTkwMyA0LjcxNTY5IDIwLjI4NDMgNC40MDk3MyAxOS45MDggNC4yMTc5OUMxOS40ODAyIDQgMTguOTIwMSA0IDE3LjggNEg2LjJDNS4wNzk5IDQgNC41MTk4NCA0IDQuMDkyMDIgNC4yMTc5OUMzLjcxNTY5IDQuNDA5NzMgMy40MDk3MyA0LjcxNTY5IDMuMjE3OTkgNS4wOTIwMkMzIDUuNTE5ODQgMyA2LjA3OTg5IDMgNy4yVjE2LjhDMyAxNy45MjAxIDMgMTguNDgwMiAzLjIxNzk5IDE4LjkwOEMzLjQwOTczIDE5LjI4NDMgMy43MTU2OSAxOS41OTAzIDQuMDkyMDIgMTkuNzgyQzQuNTE5ODQgMjAgNS4wNzk4OSAyMCA2LjIgMjBaXCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udGFibGVIZWFkZXIgPz8gdHJ1ZVwiIGNsYXNzPVwibWItMVwiIChjbGljayk9XCJtYWtlRmlyc3RSb3dIZWFkZXIoKVwiIHR5cGU9XCJidXR0b25cIiAgYXJpYS1sYWJlbD1cIk1ha2UgSGVhZGVyXCIgdGl0bGU9XCJUYWJsZSBIZWFkZXJcIiA+XHJcbiAgICAgICAgPCEtLSA8c3BhbiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweDtcIiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5cclxuICAgICAgICAgIHBhZ2VfaGVhZGVyXHJcbiAgICAgICAgPC9zcGFuPiAtLT5cclxuICAgICAgICA8c3ZnIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgdmlld0JveD1cIjAgMCAxOTIwIDE5MjBcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0yMTMuMzMzIDBDOTUuNTEyNiAwIDAgOTUuNTEyNiAwIDIxMy4zMzNWMTcwNi42N0MwIDE4MjQuNDkgOTUuNTEyNiAxOTIwIDIxMy4zMzMgMTkyMEgxNzA2LjY3QzE4MjQuNDkgMTkyMCAxOTIwIDE4MjQuNDkgMTkyMCAxNzA2LjY3VjIxMy4zMzNDMTkyMCA5NS41MTI2IDE4MjQuNDkgMCAxNzA2LjY3IDBIMjEzLjMzM1pNMjY2LjY2NyA3NDYuNjY3QzIzNy4yMTEgNzQ2LjY2NyAyMTMuMzMzIDcyMi43ODggMjEzLjMzMyA2OTMuMzMzVjM3My4zMzNDMjEzLjMzMyAzNDMuODc4IDIzNy4yMTEgMzIwIDI2Ni42NjcgMzIwSDE2NTMuMzNDMTY4Mi43OSAzMjAgMTcwNi42NyAzNDMuODc4IDE3MDYuNjcgMzczLjMzM1Y2OTMuMzMzQzE3MDYuNjcgNzIyLjc4OCAxNjgyLjc5IDc0Ni42NjcgMTY1My4zMyA3NDYuNjY3SDI2Ni42NjdaXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LnNpZ25hdHVyZSA/PyB0cnVlXCIgKGNsaWNrKT1cIm9wZW5TaWduYXR1cmVEaWFsb2coJGV2ZW50KVwiIHR5cGU9XCJidXR0b25cIiAgdGl0bGU9XCJTaWduYXR1cmVcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDaG9vc2UgdGFibGUgcm93cyBhbmQgY29sdW1uc1wiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmJvcmRlcl9hbGw8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMjggMjhcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiIGZpbGw9XCIjMDAwMDAwXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDwhLS0gVXBsb2FkZWQgdG86IFNWRyBSZXBvLCB3d3cuc3ZncmVwby5jb20sIEdlbmVyYXRvcjogU1ZHIFJlcG8gTWl4ZXIgVG9vbHMgLS0+IDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPiA8ZyBpZD1cIvCflI0tUHJvZHVjdC1JY29uc1wiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+IDxnIGlkPVwiaWNfZmx1ZW50X3NpZ25hdHVyZV8yOF9yZWd1bGFyXCIgZmlsbD1cIiMyMTIxMjFcIiBmaWxsLXJ1bGU9XCJub256ZXJvXCI+IDxwYXRoIGQ9XCJNMTYuNDc5ODk1NiwyMS4wMDE5NTc4IEwxNi43NSwyMSBDMTcuOTcwMjM1MiwyMSAxOC42MTEyNDQxLDIxLjUwNTgwMzIgMTkuNDAyMDYyNywyMi43MDQxNjYyIEwxOS43OTU4Mjc4LDIzLjMxMjQ0MDkgQzIwLjEwMjgyNjYsMjMuNzY2OTM4IDIwLjI5NDQzNzQsMjMuOTU3MzI0NyAyMC41MzU3ODQsMjQuMDU2NzkyOSBDMjAuOTY4NDg3MywyNC4yMzUxMjY2IDIxLjMyNzEwMDgsMjQuMTQ3NDQ0NiAyMi42NDQwNzgyLDIzLjUxMzMyMTMgTDIzLjA0NzMyNzMsMjMuMzE3MDMxOSBDMjMuODcwOTk4MiwyMi45MTI2NzExIDI0LjQzMzAyODYsMjIuNjgxMTYwNiAyNS4wNjgwOTgzLDIyLjUyMjM5MzEgQzI1LjQ2OTk0NDUsMjIuNDIxOTMxNiAyNS44NzcxNDUzLDIyLjY2NjI1MjEgMjUuOTc3NjA2OSwyMy4wNjgwOTgzIEMyNi4wNzgwNjg0LDIzLjQ2OTk0NDUgMjUuODMzNzQ3OSwyMy44NzcxNDUzIDI1LjQzMTkwMTcsMjMuOTc3NjA2OSBDMjUuMDM3MTYwNiwyNC4wNzYyOTIyIDI0LjY1ODk0NjUsMjQuMjE3ODgxOSAyNC4xNjQxMzY0LDI0LjQ0NTg5OTcgTDIzLjAwNTQ4OTksMjUuMDAzMjY3MyBDMjEuNDM3NjMwMiwyNS43NDM2OTQ0IDIwLjkwNTkwMDksMjUuODMxNzMyMSAxOS45NjQyMTYsMjUuNDQzNjI3NSBDMTkuMzM5MTIzNywyNS4xODYwMDI4IDE4Ljk4MzY3NjUsMjQuODEzMjk4IDE4LjQ2MzU2MzksMjQuMDE4MDIyNyBMMTguMjY4ODkwMywyMy43MTQwODQ5IEMxNy43MDcxMTEyLDIyLjgyODg3MzEgMTcuNDA1Nzc5NCwyMi41Mzg0NTM4IDE2Ljg2ODg0NDQsMjIuNTAzNjY1NSBMMTYuNzUsMjIuNSBDMTYuMjAxNzMwNiwyMi41IDE2LjA5MzMxMDQsMjIuNTY4NDU3MiAxNC4wMDkyODEsMjQuMTE1MDI0MSBDMTIuMjY3MDM5NSwyNS40MDc5NDg4IDEwLjkzODMzNTksMjYuMDI1NDk4NCA5LjI0ODY0MjQzLDI2LjAyNTQ5ODQgQzcuMTg4NzI4NjksMjYuMDI1NDk4NCA1LjI0NzczMzY3LDI1LjY0NzA2NyAzLjQzMTQ1ODc1LDI0Ljg5MDUzNjMgTDYuMzEzNzc4MDMsMjQuMjI0MTc4NCBDNy4yNTc2OTQwNCwyNC40MjUwNzYyIDguMjM1NjcxNDMsMjQuNTI1NDk4NCA5LjI0ODY0MjQzLDI0LjUyNTQ5ODQgQzEwLjUzOTMwMzUsMjQuNTI1NDk4NCAxMS42MDkxMjksMjQuMDI4MjY5MSAxMy4xMTUzNzk2LDIyLjkxMDQ3NDMgTDE0LjI3NTQ0NCwyMi4wNTQ1NDg4IEMxNS41NDY4MDY1LDIxLjEzMDQ5MDMgMTUuODI5NjExMywyMS4wMTYwMzIgMTYuNDc5ODk1NiwyMS4wMDE5NTc4IEwxNi40Nzk4OTU2LDIxLjAwMTk1NzggWiBNMjIuNzc3MDk4OCwzLjIyMjA4OTc5IEMyNC40NTA3MjIzLDQuODk1NzEzMyAyNC40NTA3NTY2LDcuNjA5MTYwNzkgMjIuNzc3MTg4OSw5LjI4MjgxMzI0IEwyMS43NDE2NTUsMTAuMzE4NDQ3NSBDMjIuODkzNjI2MywxMS43MTk5NjU3IDIyLjg1MjE1MjYsMTMuMjA1Mzc3NCAyMS43ODExMDMxLDE0LjI3OTU1NiBMMTguNzgwMDcyNywxNy4yODA1ODc0IEwxOC43ODAwNzI3LDE3LjI4MDU4NzQgQzE4LjQ4NzAzNzQsMTcuNTczMzM4NCAxOC4wMTIxNjM3LDE3LjU3MzEwOCAxNy43MTk0MTI2LDE3LjI4MDA3MjcgQzE3LjQyNjY2MTYsMTYuOTg3MDM3NCAxNy40MjY4OTIsMTYuNTEyMTYzNyAxNy43MTk5MjczLDE2LjIxOTQxMjYgTDIwLjcxODg5NjksMTMuMjIwNDQ0IEMyMS4yMDM5NTcxLDEyLjczMzk2NjggMjEuMjYwMDAyMSwxMi4xMjk5OTgzIDIwLjY3ODk0MSwxMS4zODE4OTQ1IEwxMC4wODQ1NDM3LDIxLjk3NjEwMTEgQzkuNzg2MzU0NTksMjIuMjc0MzA1MyA5LjQxMDM2MTE3LDIyLjQ4MjcwNSA4Ljk5OTQ0NzAzLDIyLjU3NzUzMTMgTDIuOTE4NjQ0NjMsMjMuOTgwNzkzNCBDMi4zNzg1OTA2MSwyNC4xMDU0MjEyIDEuODk0NTc4NzUsMjMuNjIxNDA5NCAyLjAxOTIwNjYsMjMuMDgxMzU1NCBMMy40MjI0Nzc5NCwxNy4wMDA1MTI5IEMzLjUxNzI5NTU3LDE2LjU4OTYzNjUgMy43MjU2NjU4OSwxNi4yMTM2NzM2IDQuMDIzODI3NiwxNS45MTU0OTY4IEwxNi43MTY1MDE5LDMuMjIyMTc5OTIgQzE4LjM5MDA0MTUsMS41NDg1NTU1NSAyMS4xMDM0MzQ5LDEuNTQ4NTEwNTkgMjIuNzc3MDk4OCwzLjIyMjA4OTc5IFogTTE3Ljc3NzE4ODksNC4yODI4MTMyNCBMNS4wODQ1MTQ2MiwxNi45NzYxMzAyIEM0Ljk4NTEyNzM4LDE3LjA3NTUyMjQgNC45MTU2NzA2MSwxNy4yMDA4NDM0IDQuODg0MDY0NzMsMTcuMzM3ODAyMiBMMy43NTA2MjQ4LDIyLjI0OTM3NTIgTDguNjYyMTU3NzcsMjEuMTE1OTQ0NSBDOC43OTkxMjkxNSwyMS4wODQzMzU3IDguOTI0NDYwMjksMjEuMDE0ODY5MiA5LjAyMzg1NjY1LDIwLjkxNTQ2NzggTDIxLjcxNjUwMTksOC4yMjIxNzk5MiBDMjIuODA0MzA2Myw3LjEzNDMyMDQ5IDIyLjgwNDI4NjIsNS4zNzA2MDQ3OCAyMS43MTY0NTg4LDQuMjgyNzcwMSBDMjAuNjI4NTkxNCwzLjE5NDk2NTA3IDE4Ljg2NDk1MDYsMy4xOTQ5OTY1MyAxNy43NzcxODg5LDQuMjgyODEzMjQgWlwiIGlkPVwi8J+OqC1Db2xvclwiPiA8L3BhdGg+IDwvZz4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImVkaXRvclwiIGlkPVwiZWRpdG9yXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiICNlZGl0b3IgKGlucHV0KT1cInN1Ym1pdENvbnRlbnQoKVwiIChibHVyKT1cIm9uQmx1cigpXCIgKGtleXVwKT1cIm9uRWRpdG9yS2V5VXAoJGV2ZW50KVwiIChtb3VzZXVwKT1cInVwZGF0ZUN1cnJlbnRGb3JtYXQoKVwiXHJcbiAgICAgIChkcm9wKT1cImRyb3AoJGV2ZW50KVwiIChkcmFnb3Zlcik9XCJhbGxvd0Ryb3AoJGV2ZW50KVwiPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLXRlbXBsYXRlICN0YWJsZURpYWxvZyBsZXQtZGlhbG9nUmVmPVwiZGlhbG9nUmVmXCI+XHJcbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5DaG9vc2UgVGFibGUgU2l6ZTwvaDI+XHJcbiAgICA8bWF0LWRpYWxvZy1jb250ZW50PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjZWxsIG9mIGdyaWQ7IGxldCBpID0gaW5kZXhcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgJ2dyaWQtaXRlbSc6IHRydWUsXHJcbiAgICAgICAgJ2hpZ2hsaWdodGVkJzogaSAlIDcgPCBjb2xzICYmIE1hdGguZmxvb3IoaSAvIDcpIDwgcm93c1xyXG4gICAgICB9XCIgKG1vdXNlZW50ZXIpPVwidXBkYXRlUHJldmlldyhpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZVNlbGVjdGlvbihpICUgNyArIDEsIE1hdGguZmxvb3IoaSAvIDcpICsgMSwgZGlhbG9nUmVmKVwiPjwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHA+e3sgcm93cyB9fSB4IHt7IGNvbHMgfX0gPC9wPlxyXG4gICAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNzaWduYXR1cmVEaWFsb2cgbGV0LWRpYWxvZ1JlZj1cImRpYWxvZ1JlZlwiPlxyXG4gICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+RHJhdyBhIFNpZ25hdHVyZTwvaDI+XHJcbiAgICA8c2lnbmF0dXJlLXBhZCAjc2lnUGFkIFtvcHRpb25zXT1cInNpZ25hdHVyZVBhZE9wdGlvbnNcIiBjbGFzcz1cInNpZ25cIiA+PC9zaWduYXR1cmUtcGFkPlxyXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvblwiID5cclxuICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5vcm1hbFwiID4gQ2xvc2UgPC9idXR0b24+IC0tPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIm5vcm1hbFwiIChjbGljayk9XCJjbG9zZVNpZ25EaWFsb2coZGlhbG9nUmVmKVwiID4gQ2xvc2UgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwic3VibWl0XCIgKGNsaWNrKT1cInN1Ym1pdFNpZ25EaWFsb2coZGlhbG9nUmVmKVwiID4gU3VibWl0IDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICBcclxuICA8L25nLXRlbXBsYXRlPlxyXG48L2Rpdj5cclxuIl19
912
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFwaWQtdGV4dC1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvcmFwaWQtdGV4dC1lZGl0b3Ivc3JjL2xpYi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9yYXBpZC10ZXh0LWVkaXRvci9zcmMvbGliL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsS0FBSyxFQUFFLE1BQU0sRUFBVSxTQUFTLEVBQTBCLFVBQVUsRUFBRSxZQUFZLEVBQXdELE1BQU0sZUFBZSxDQUFDO0FBRWhNLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7O0FBc0N6RSxNQUFNLE9BQU8sd0JBQXdCO0lBZ0RuQyxZQUFvQixNQUFpQixFQUMzQixFQUFjLEVBQ2QsUUFBbUIsRUFDbkIsS0FBaUIsRUFDakIsT0FBMEI7UUFKaEIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUMzQixPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQ2QsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUNuQixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBbEQ1Qix5QkFBb0IsR0FBb0I7WUFDOUMsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixRQUFRLEVBQUUsSUFBSTtnQkFDZCxJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTtnQkFDWixTQUFTLEVBQUUsSUFBSTtnQkFDZixhQUFhLEVBQUUsSUFBSTtnQkFDbkIsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLElBQUk7Z0JBQ2hCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixPQUFPLEVBQUUsSUFBSTtnQkFDYixVQUFVLEVBQUUsSUFBSTtn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NUZhLHdCQUF3QjtrQkFicEMsU0FBUzsrQkFDRSxtQkFBbUIsYUFHbEI7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLENBQUM7NEJBQ3ZELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOzBNQTJCUSxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDa0IsYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNaLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ2dDLE1BQU07c0JBQTVDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDWCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ00sZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ1AsWUFBWTtzQkFBaEMsU0FBUzt1QkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT3V0cHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgT25DaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgZm9yd2FyZFJlZiwgRXZlbnRFbWl0dGVyLCBBZnRlclZpZXdJbml0LCBTaW1wbGVDaGFuZ2UsIFNpbXBsZUNoYW5nZXMsIFJlbmRlcmVyMn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2lnbmF0dXJlUGFkIH0gZnJvbSAnYW5ndWxhcjItc2lnbmF0dXJlcGFkJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUkRFZGl0b3JPcHRpb25zIHtcclxuICBvcHRpb25zOiB7XHJcbiAgICB0ZXh0Rm9ybWF0PzogYm9vbGVhbixcclxuICAgIGZvbnRTaXplPzogYm9vbGVhbixcclxuICAgIGJvbGQ6IGJvb2xlYW4sXHJcbiAgICBpdGFsaWM6IGJvb2xlYW4sXHJcbiAgICB1bmRlcmxpbmU6IGJvb2xlYW4sXHJcbiAgICBzdHJpa2V0aHJvdWdoOiBib29sZWFuLFxyXG4gICAgYWxpZ25MZWZ0OiBib29sZWFuLFxyXG4gICAgYWxpZ25SaWdodDogYm9vbGVhbixcclxuICAgIGFsaWduQ2VudGVyOiBib29sZWFuLFxyXG4gICAganVzdGlmeTogYm9vbGVhbixcclxuICAgIGJ1bGxldExpc3Q6IGJvb2xlYW4sXHJcbiAgICBudW1iZXJlZExpc3Q6IGJvb2xlYW4sXHJcbiAgICBpbWFnZT86IGJvb2xlYW4sXHJcbiAgICB0YWJsZT86IGJvb2xlYW4sIFxyXG4gICAgdGFibGVIZWFkZXI/OiBib29sZWFuLFxyXG4gICAgc2lnbmF0dXJlPzogYm9vbGVhblxyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdyYXBpZC10ZXh0LWVkaXRvcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JhcGlkLXRleHQtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYXBpZC10ZXh0LWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUmFwaWRUZXh0RWRpdG9yQ29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbiAgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYXBpZFRleHRFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBwcml2YXRlIGRlZmF1bHRFZGl0b3JPcHRpb25zOiBSREVkaXRvck9wdGlvbnMgPSB7XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgIHRleHRGb3JtYXQ6IHRydWUsXHJcbiAgICAgIGZvbnRTaXplOiB0cnVlLFxyXG4gICAgICBib2xkOiB0cnVlLFxyXG4gICAgICBpdGFsaWM6IHRydWUsXHJcbiAgICAgIHVuZGVybGluZTogdHJ1ZSxcclxuICAgICAgc3RyaWtldGhyb3VnaDogdHJ1ZSxcclxuICAgICAgYWxpZ25MZWZ0OiB0cnVlLFxyXG4gICAgICBhbGlnblJpZ2h0OiB0cnVlLFxyXG4gICAgICBhbGlnbkNlbnRlcjogdHJ1ZSxcclxuICAgICAganVzdGlmeTogdHJ1ZSxcclxuICAgICAgYnVsbGV0TGlzdDogdHJ1ZSxcclxuICAgICAgbnVtYmVyZWRMaXN0OiB0cnVlLFxyXG4gICAgICBpbWFnZTogdHJ1ZSxcclxuICAgICAgdGFibGU6IHRydWUsXHJcbiAgICAgIHRhYmxlSGVhZGVyOiB0cnVlLFxyXG4gICAgICBzaWduYXR1cmU6IHRydWVcclxuICAgIH1cclxuICB9O1xyXG5cclxuXHJcbiAgQElucHV0KCkgY29udGVudENhcHR1cmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBoZWlnaHQ6IHN0cmluZyA9IFwiYXV0b1wiO1xyXG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmcgPSBcImF1dG9cIjtcclxuICBASW5wdXQoKSBpY29uQ29sb3I6IHN0cmluZyA9ICcjMzMzMzMzJ1xyXG4gIEBJbnB1dCgnZWRpdG9yT3B0aW9ucycpIGVkaXRvck9wdGlvbnMhOiBSREVkaXRvck9wdGlvbnM7XHJcbiAgQE91dHB1dCgpIGNvbnRlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBAVmlld0NoaWxkKCdlZGl0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0b3IhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlRGlhbG9nJykgdGFibGVEaWFsb2chOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBWaWV3Q2hpbGQoJ3NpZ25hdHVyZURpYWxvZycpIHNpZ25hdHVyZURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc2lnUGFkJykgc2lnbmF0dXJlUGFkITogU2lnbmF0dXJlUGFkO1xyXG5cclxuICBwcml2YXRlIGVkaXRvckNvbnRlbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHJvd3M6IG51bWJlciA9IDE7XHJcbiAgY29sczogbnVtYmVyID0gMTtcclxuICBncmlkID0gQXJyYXkoNDkpLmZpbGwoMCk7XHJcbiAgTWF0aCA9IE1hdGg7XHJcbiAgdXBsb2FkZWRJbWFnZXM6IHN0cmluZ1tdID0gW107XHJcbiAgXHJcbiAgc2lnbmF0dXJlUGFkT3B0aW9ucyA9IHtcclxuICAgIG1pbldpZHRoOiAxLFxyXG4gICAgY2FudmFzV2lkdGg6IDQwMCxcclxuICAgIGNhbnZhc0hlaWdodDogMjAwXHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZywgXHJcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLCBcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgXHJcbiAgICBwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSBfY2hhbmdlOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgY29uc29sZS5sb2coJ0J1aWxkIC0xJylcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuY29udGVudENhcHR1cmUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnQgY2FwdHVyZSBpcyBlbmFibGVkLicpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5sb2coJ0NvbnRlbnQgY2FwdHVyZSBpcyBkaXNhYmxlZC4nKTtcclxuICAgIH1cclxuICAgIGlmKCF0aGlzLmVkaXRvck9wdGlvbnMpe1xyXG4gICAgICB0aGlzLmVkaXRvck9wdGlvbnMgPSB0aGlzLmRlZmF1bHRFZGl0b3JPcHRpb25zO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5pbml0aWFsaXplRWRpdG9yQ29udGVudCgnJyk7XHJcbiAgICAvLyB0aGlzLmVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snaGVpZ2h0J10gfHwgY2hhbmdlc1snd2lkdGgnXSkge1xyXG4gICAgICB0aGlzLmFwcGx5RGltZW5zaW9ucygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBseURpbWVuc2lvbnMoKTogdm9pZCB7XHJcbiAgICBjb25zdCBkaW1lbnNpb25FbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5kaW1lbnNpb24nKTtcclxuICAgIGlmICh0aGlzLndpZHRoKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZGltZW5zaW9uRWxlbWVudCwgJ3dpZHRoJywgdGhpcy53aWR0aCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBlZGl0b3JFbGVtZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKTtcclxuICAgIGlmKHRoaXMuaGVpZ2h0KXtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShlZGl0b3JFbGVtZW50LCAnaGVpZ2h0JywgdGhpcy5oZWlnaHQpO1xyXG4gICAgfSAgICBcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpO1xyXG4gICAgXHJcbiAgICBpZiAoZWRpdG9yICYmIChlZGl0b3IuaW5uZXJIVE1MLnRyaW0oKSA9PT0gXCJcIiB8fCBlZGl0b3IuaW5uZXJIVE1MLnRyaW0oKSA9PT0gXCI8YnI+XCIpKSB7XHJcbiAgICAgIC8vIGVkaXRvci5mb2N1cygpO1xyXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIHJhbmdlLnNldFN0YXJ0KGVkaXRvciwgMCk7XHJcbiAgICAgIHJhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgfVxyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj5cXHUyMDBCPC9wPidcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB0aGlzLnVwZGF0ZUN1cnJlbnRGb3JtYXQoKSk7XHJcbiAgICAgIG9ic2VydmVyLm9ic2VydmUodGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xyXG5cclxuICAgIC8vIHRoaXMuaW5pdGlhbGl6ZUVkaXRvckNvbnRlbnQoJycpO1xyXG4gICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG5cclxuICB9XHJcblxyXG4gIGVuc3VyZVBhcmFncmFwaEFuZEZvY3VzKCkge1xyXG5cclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlZGl0b3InKTtcclxuICAgIGlmICghZWRpdG9yKSByZXR1cm47XHJcblxyXG4gICAgLy8gSWYgZWRpdG9yIGlzIGVtcHR5IG9yIGRvZXNuJ3QgaGF2ZSBhIDxwPiBhcyB0aGUgbGFzdCBlbGVtZW50XHJcbiAgICBpZiAoIWVkaXRvci5pbm5lckhUTUwudHJpbSgpKSB7XHJcbiAgICAgIGVkaXRvci5pbm5lckhUTUwgPSAnPHAgc3R5bGU9XCJmb250LXNpemU6MTRweDsgZm9udC13ZWlnaHQ6bm9ybWFsO1wiPlxcdTIwMEI8L3A+JztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlZGl0b3IuZmlyc3RDaGlsZCBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgaWYgKCFmaXJzdENoaWxkIHx8IGZpcnN0Q2hpbGQudGFnTmFtZSAhPT0gJ1AnKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IGVkaXRvci5pbm5lckhUTUw7XHJcbiAgICAgICAgZWRpdG9yLmlubmVySFRNTCA9IGA8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDpub3JtYWw7XCI+JHtjb250ZW50fTwvcD5gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcCA9IGVkaXRvci5xdWVyeVNlbGVjdG9yKCdwJyk7XHJcbiAgICBpZiAocCkge1xyXG4gICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhwKTtcclxuICAgICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7IFxyXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgIGlmIChzZWxlY3Rpb24pIHtcclxuICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvY3VzIHRoZSBlZGl0b3JcclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUVkaXRvckNvbnRlbnQoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZWRpdG9yJyk7XHJcbiAgICBpZiAoIWVkaXRvcikgcmV0dXJuO1xyXG5cclxuICAgIC8vIElmIGNvbnRlbnQgaGFzIG5vIEhUTUwgdGFncywgd3JhcCB3aXRoIDxwPlxyXG4gICAgY29uc3QgaGFzSHRtbFRhZ3MgPSAvPFtePl0rPi8udGVzdChkYXRhKTtcclxuICAgIGlmICghaGFzSHRtbFRhZ3MpIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9IGA8cCBzdHlsZT1cImZvbnQtc2l6ZToxNHB4OyBmb250LXdlaWdodDogbm9ybWFsO1wiPiR7ZGF0YX08L3A+YDtcclxuICAgICAgLy8gdGhpcy5lbnN1cmVQYXJhZ3JhcGhBbmRGb2N1cygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZWRpdG9yLmlubmVySFRNTCA9IGRhdGE7XHJcbiAgICB9XHJcbiAgICBcclxuICB9XHJcblxyXG5cclxuICBvbkNvbnRlbnRDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jb250ZW50Q2FwdHVyZSkge1xyXG4gICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmVkaXRvcicpO1xyXG4gICAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0b3JDb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDtcclxuICAgICAgICBjb25zb2xlLmxvZygnQ2FwdHVyZWQgQ29udGVudCAoQ2hpbGQpOicsIHRoaXMuZWRpdG9yQ29udGVudCk7XHJcbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlLmVtaXQodGhpcy5lZGl0b3JDb250ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFZGl0b3IgZWxlbWVudCBub3QgZm91bmQuJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmVkaXRvckNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RlZEhlYWQ6IGFueSA9ICdQJztcclxuICBzZWxlY3RlZEZvbnQ6IGFueSA9ICcxNCc7XHJcblxyXG4gIHB1YmxpYyBvbkNoYW5nZSA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcclxuICAgIGlmICh0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9PSAnPGJyPicgfHwgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5pbm5lckhUTUwgPT0gJycpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEhlYWQgPSAnUCc7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gJzE0JztcclxuICAgIH1cclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBvblRvdWNoZWQgPSAoKSA9PiB7IH07XHJcblxyXG4gIHdyaXRlVmFsdWUoY29udGVudDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5lZGl0b3IgJiYgdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQgfHwgJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcclxuICB9XHJcblxyXG4gIG9uQmx1cigpIHtcclxuICAgIHRoaXMub25Ub3VjaGVkKCk7XHJcbiAgfVxyXG5cclxuICAvLyBzZXRGb250U2l6ZShldmVudDogRXZlbnQpIHtcclxuICAvLyAgIGNvbnN0IHNlbGVjdCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudDtcclxuICAvLyAgIGNvbnN0IHNpemUgPSBzZWxlY3QudmFsdWU7XHJcbiAgLy8gICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgLy8gICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG4gIC8vICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAvLyAgIGlmICghcmFuZ2UuY29sbGFwc2VkKSB7XHJcbiAgLy8gICAgIGNvbnN0IHBhcmVudCA9IHNlbGVjdGlvbi5hbmNob3JOb2RlPy5wYXJlbnRFbGVtZW50O1xyXG4gIC8vICAgICBpZiAoXHJcbiAgLy8gICAgICAgcGFyZW50ICYmXHJcbiAgLy8gICAgICAgcGFyZW50LmNsYXNzTGlzdCAmJlxyXG4gIC8vICAgICAgIEFycmF5LmZyb20ocGFyZW50LmNsYXNzTGlzdCkuc29tZSgoYzogc3RyaW5nKSA9PiBjLnN0YXJ0c1dpdGgoJ2ZzLScpKVxyXG4gIC8vICAgICApIHtcclxuICAvLyAgICAgICBwYXJlbnQuc3R5bGUuZm9udFNpemUgPSBgJHtzaXplfXB4YDtcclxuICAvLyAgICAgICBwYXJlbnQuY2xhc3NOYW1lID0gYGZzLSR7c2l6ZX1gO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XHJcbiAgLy8gICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9IGAke3NpemV9cHhgO1xyXG4gIC8vICAgICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gIC8vICAgICAgIHJhbmdlLnN1cnJvdW5kQ29udGVudHMoc3Bhbik7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH1cclxuICAvLyAgIGVsc2Uge1xyXG4gIC8vICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gIC8vICAgICBzcGFuLnN0eWxlLmZvbnRTaXplID0gYCR7c2l6ZX1weGA7XHJcbiAgLy8gICAgIHNwYW4uY2xhc3NMaXN0LmFkZChgZnMtJHtzaXplfWApO1xyXG4gIC8vICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJykpOyAvLyB6ZXJvLXdpZHRoIHNwYWNlXHJcbiAgLy8gICAgIHJhbmdlLmluc2VydE5vZGUoc3Bhbik7XHJcbiAgLy8gICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAvLyAgICAgbmV3UmFuZ2Uuc2V0U3RhcnQoc3Bhbi5maXJzdENoaWxkIGFzIE5vZGUsIDEpO1xyXG4gIC8vICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAvLyAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gIC8vICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgb25FZGl0b3JLZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgLy8gaGFuZGxlIEVudGVyIG9yIGFycm93IGtleXNcclxuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJyB8fCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0JhY2tTcGFjZScgKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ3VycmVudEZvcm1hdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ3VycmVudEZvcm1hdCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgYW5jaG9yTm9kZSA9IHNlbGVjdGlvbi5hbmNob3JOb2RlO1xyXG4gICAgaWYgKCFhbmNob3JOb2RlKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHBhcmVudEVsZW0gPSBhbmNob3JOb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERVxyXG4gICAgICA/IChhbmNob3JOb2RlIGFzIEhUTUxFbGVtZW50KVxyXG4gICAgICA6IChhbmNob3JOb2RlLnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xyXG5cclxuICAgIGlmICghcGFyZW50RWxlbSkgcmV0dXJuO1xyXG5cclxuICAgIGxldCBkZXRlY3RlZEhlYWQgPSAnUCc7XHJcbiAgICBsZXQgZGV0ZWN0ZWRGb250ID0gJzE0JzsgLy8gZGVmYXVsdFxyXG5cclxuICAgIC8vIFRyYXZlcnNlIHVwd2FyZCB0byBkZXRlY3QgZm9ybWF0dGluZ1xyXG4gICAgd2hpbGUgKHBhcmVudEVsZW0gJiYgcGFyZW50RWxlbSAhPT0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBjb25zdCB0YWcgPSBwYXJlbnRFbGVtLnRhZ05hbWUudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAgIC8vIERldGVjdCBoZWFkaW5nXHJcbiAgICAgIGlmIChbJ0gxJywgJ0gyJywgJ0gzJywgJ0g0JywgJ0g1JywgJ0g2JywgJ1AnXS5pbmNsdWRlcyh0YWcpKSB7XHJcbiAgICAgICAgZGV0ZWN0ZWRIZWFkID0gdGFnO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBEZXRlY3QgaW5saW5lIGZvbnQtc2l6ZSBmcm9tIHN0eWxlIG9yIGNsYXNzXHJcbiAgICAgIGNvbnN0IGZvbnRTaXplID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUocGFyZW50RWxlbSkuZm9udFNpemU7XHJcbiAgICAgIGlmIChmb250U2l6ZSkge1xyXG4gICAgICAgIGNvbnN0IHB4ID0gcGFyc2VJbnQoZm9udFNpemUucmVwbGFjZSgncHgnLCAnJyksIDEwKTtcclxuICAgICAgICBpZiAoIWlzTmFOKHB4KSkge1xyXG4gICAgICAgICAgZGV0ZWN0ZWRGb250ID0gcHgudG9TdHJpbmcoKTtcclxuICAgICAgICAgIGJyZWFrOyAvLyBmb3VuZCB0aGUgY2xvc2VzdCB2YWxpZCBmb250IHNpemVcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHBhcmVudEVsZW0gPSBwYXJlbnRFbGVtLnBhcmVudEVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVXBkYXRlIGJvdW5kIHByb3BlcnRpZXMgaWYgY2hhbmdlZFxyXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkSGVhZCAhPT0gZGV0ZWN0ZWRIZWFkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRIZWFkID0gZGV0ZWN0ZWRIZWFkO1xyXG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9udCAhPT0gZGV0ZWN0ZWRGb250KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGb250ID0gZGV0ZWN0ZWRGb250O1xyXG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlZCkge1xyXG4gICAgICB0aGlzLl9jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNldEZvbnRTaXplKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gICAgY29uc3Qgc2l6ZSA9IHNlbGVjdC52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJhbmdlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7XHJcblxyXG4gICAgaWYgKCFyYW5nZS5jb2xsYXBzZWQpIHtcclxuICAgICAgLy8gTm9uLWVtcHR5IHNlbGVjdGlvblxyXG4gICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gICAgICBzcGFuLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCBgJHtzaXplfXB4YCwgJ2ltcG9ydGFudCcpO1xyXG4gICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICByYW5nZS5zdXJyb3VuZENvbnRlbnRzKHNwYW4pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICAvLyBJZiBzZWxlY3Rpb24gc3BhbnMgbXVsdGlwbGUgZWxlbWVudHMsIHVzZSBleGVjQ29tbWFuZCBmYWxsYmFja1xyXG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdmb250U2l6ZScsIGZhbHNlLCAnNycpOyAvLyB0ZW1wb3JhcnkgbGFyZ2VzdCBzaXplXHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZm9udFtzaXplPVwiN1wiXScpLmZvckVhY2goKGVsOiBIVE1MRWxlbWVudCkgPT4ge1xyXG4gICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKCdzaXplJyk7XHJcbiAgICAgICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgYCR7c2l6ZX1weGAsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICAgIGVsLmNsYXNzTGlzdC5hZGQoYGZzLSR7c2l6ZX1gKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gQ29sbGFwc2VkIHNlbGVjdGlvbiAobm8gdGV4dCBzZWxlY3RlZClcclxuICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgc3Bhbi5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgYCR7c2l6ZX1weGAsICdpbXBvcnRhbnQnKTtcclxuICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKGBmcy0ke3NpemV9YCk7XHJcbiAgICAgIHNwYW4uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ1xcdTIwMEInKSk7IC8vIHplcm8td2lkdGggc3BhY2VcclxuICAgICAgcmFuZ2UuaW5zZXJ0Tm9kZShzcGFuKTtcclxuXHJcbiAgICAgIC8vIE1vdmUgY3Vyc29yIGluc2lkZSBzcGFuXHJcbiAgICAgIGNvbnN0IG5ld1JhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTtcclxuICAgICAgbmV3UmFuZ2Uuc2V0U3RhcnQoc3Bhbi5maXJzdENoaWxkIGFzIE5vZGUsIDEpO1xyXG4gICAgICBuZXdSYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UobmV3UmFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcclxuICAgIHRoaXMub25DaGFuZ2UoY29udGVudCk7XHJcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRGb3JtYXQoKTtcclxuICAgIHRoaXMuX2NoYW5nZS5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRIZWFkaW5nKGV2ZW50OiBFdmVudCkge1xyXG4gICAgY29uc3Qgc2VsZWN0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxTZWxlY3RFbGVtZW50O1xyXG4gICAgY29uc3QgdGFnID0gc2VsZWN0LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xyXG4gICAgY29uc3QgZWRpdG9yID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VkaXRvcicpO1xyXG4gICAgaWYgKCFlZGl0b3IpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBuZXdFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xyXG5cclxuICAgIHN3aXRjaCAodGFnKSB7XHJcbiAgICAgIGNhc2UgJ0gxJzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMzJweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdIMic6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzI4cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnYm9sZCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnSDMnOlxyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtc2l6ZScsICcyNHB4JywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIG5ld0VsZW0uc3R5bGUuc2V0UHJvcGVydHkoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ0g0JzpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMjBweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdib2xkJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdINSc6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzE4cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnNjAwJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdINic6XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC1zaXplJywgJzE2cHgnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgbmV3RWxlbS5zdHlsZS5zZXRQcm9wZXJ0eSgnZm9udC13ZWlnaHQnLCAnNjAwJywgJ2ltcG9ydGFudCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdQJzpcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXNpemUnLCAnMTRweCcsICdpbXBvcnRhbnQnKTtcclxuICAgICAgICBuZXdFbGVtLnN0eWxlLnNldFByb3BlcnR5KCdmb250LXdlaWdodCcsICdub3JtYWwnLCAnaW1wb3J0YW50Jyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7XHJcbiAgICAgIG5ld0VsZW0udGV4dENvbnRlbnQgPSBzZWxlY3RlZFRleHQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdFbGVtLmlubmVySFRNTCA9ICdcXHUyMDBCJzsgLy8gS2VlcHMgY3Vyc29yIHZpc2libGVcclxuICAgIH1cclxuXHJcbiAgICByYW5nZS5kZWxldGVDb250ZW50cygpO1xyXG4gICAgcmFuZ2UuaW5zZXJ0Tm9kZShuZXdFbGVtKTtcclxuXHJcbiAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICBuZXdSYW5nZS5zZXRTdGFydChuZXdFbGVtLCBuZXdFbGVtLmNoaWxkTm9kZXMubGVuZ3RoKTtcclxuICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpO1xyXG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTtcclxuXHJcbiAgICBlZGl0b3IuZm9jdXMoKTtcclxuXHJcbiAgICB0aGlzLl9jaGFuZ2UuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgY29uc3QgaW5wdXRFdmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUgfSk7XHJcbiAgICBlZGl0b3IuZGlzcGF0Y2hFdmVudChpbnB1dEV2ZW50KTtcclxuICB9XHJcblxyXG5cclxuICBmb3JtYXQoY29tbWFuZDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZChjb21tYW5kLCBmYWxzZSwgJycpO1xyXG4gIH1cclxuXHJcbiAgLy9JbWFnZSBTZWN0aW9uXHJcblxyXG4gIGFsbG93RHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAvL2V2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgaW1hZ2UgZHJhZyBzdGFydFxyXG4gIGRyYWcoZXZlbnQ6IERyYWdFdmVudCwgaW1hZ2VVcmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgZXZlbnQuZGF0YVRyYW5zZmVyPy5zZXREYXRhKFwidGV4dFwiLCBpbWFnZVVybCk7XHJcbiAgfVxyXG5cclxuICAvLyBIYW5kbGUgZHJvcCBldmVudCBpbiB0aGUgZWRpdG9yXHJcbiAgZHJvcChldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XHJcbiAgICAvLyBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgLy8gYmluZEltYWdlQ2xpY2tFdmVudHMoKSB7XHJcbiAgLy8gICBjb25zdCBlZGl0b3JFbCA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgLy8gICBjb25zdCBpbWFnZXMgPSBlZGl0b3JFbC5xdWVyeVNlbGVjdG9yQWxsKCdpbWcnKTtcclxuXHJcbiAgLy8gICBpbWFnZXMuZm9yRWFjaChpbWcgPT4ge1xyXG4gIC8vICAgICAvLyBBdm9pZCBkb3VibGUtYmluZGluZ1xyXG4gIC8vICAgICBpbWcucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW1hZ2VDbGljayBhcyBhbnkpO1xyXG4gIC8vICAgICBpbWcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uSW1hZ2VDbGljay5iaW5kKHRoaXMpKTtcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gb25JbWFnZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgLy8gICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAvLyAgIGNvbnN0IGltZyA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gIC8vICAgdGhpcy5lbmFibGVJbWFnZVJlc2l6ZShpbWcpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gZW5hYmxlSW1hZ2VSZXNpemUoaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgLy8gICAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIHJlc2l6ZSBoYW5kbGVzIGZpcnN0XHJcbiAgLy8gICB0aGlzLnJlbW92ZUltYWdlUmVzaXplSGFuZGxlcygpO1xyXG5cclxuICAvLyAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAvLyAgIHdyYXBwZXIuY2xhc3NMaXN0LmFkZCgnaW1hZ2UtcmVzaXplLXdyYXBwZXInKTtcclxuICAvLyAgIGltZy5wYXJlbnROb2RlPy5pbnNlcnRCZWZvcmUod3JhcHBlciwgaW1nKTtcclxuICAvLyAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaW1nKTtcclxuXHJcbiAgLy8gICAvLyBBZGQgcmVzaXphYmxlIGhhbmRsZXNcclxuICAvLyAgIGNvbnN0IHJlc2l6ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAvLyAgIHJlc2l6ZXIuY2xhc3NMaXN0LmFkZCgncmVzaXplcicpO1xyXG4gIC8vICAgd3JhcHBlci5hcHBlbmRDaGlsZChyZXNpemVyKTtcclxuXHJcbiAgLy8gICAvLyBIYW5kbGUgcmVzaXppbmcgbG9naWNcclxuICAvLyAgIGxldCBzdGFydFggPSAwLCBzdGFydFkgPSAwLCBzdGFydFdpZHRoID0gMCwgc3RhcnRIZWlnaHQgPSAwO1xyXG5cclxuICAvLyAgIHJlc2l6ZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGU6IE1vdXNlRXZlbnQpID0+IHtcclxuICAvLyAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIC8vICAgICBzdGFydFggPSBlLmNsaWVudFg7XHJcbiAgLy8gICAgIHN0YXJ0WSA9IGUuY2xpZW50WTtcclxuICAvLyAgICAgc3RhcnRXaWR0aCA9IGltZy53aWR0aDtcclxuICAvLyAgICAgc3RhcnRIZWlnaHQgPSBpbWcuaGVpZ2h0O1xyXG5cclxuICAvLyAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAoZTogTW91c2VFdmVudCkgPT4ge1xyXG4gIC8vICAgICAgIGNvbnN0IG5ld1dpZHRoID0gc3RhcnRXaWR0aCArIChlLmNsaWVudFggLSBzdGFydFgpO1xyXG4gIC8vICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHN0YXJ0SGVpZ2h0ICsgKGUuY2xpZW50WSAtIHN0YXJ0WSk7XHJcbiAgLy8gICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7bmV3V2lkdGh9cHhgO1xyXG4gIC8vICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtuZXdIZWlnaHR9cHhgO1xyXG4gIC8vICAgICB9O1xyXG5cclxuICAvLyAgICAgY29uc3Qgb25Nb3VzZVVwID0gKCkgPT4ge1xyXG4gIC8vICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAvLyAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAvLyAgICAgfTtcclxuXHJcbiAgLy8gICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG9uTW91c2VNb3ZlKTtcclxuICAvLyAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgLy8gICB9KTtcclxuICAvLyB9XHJcblxyXG4gIC8vIHJlbW92ZUltYWdlUmVzaXplSGFuZGxlcygpIHtcclxuICAvLyAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5lZGl0b3IubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuaW1hZ2UtcmVzaXplLXdyYXBwZXInKTtcclxuICAvLyAgIGlmIChleGlzdGluZykge1xyXG4gIC8vICAgICBjb25zdCBpbWcgPSBleGlzdGluZy5xdWVyeVNlbGVjdG9yKCdpbWcnKTtcclxuICAvLyAgICAgaWYgKGltZykge1xyXG4gIC8vICAgICAgIGV4aXN0aW5nLnBhcmVudE5vZGU/Lmluc2VydEJlZm9yZShpbWcsIGV4aXN0aW5nKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBleGlzdGluZy5yZW1vdmUoKTtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG5cclxuICByZW1vdmVJbWFnZShpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwbG9hZGVkSW1hZ2VzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgfVxyXG5cclxuICBpbnNlcnRJbWFnZUluRWRpdG9yKGltYWdlVXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIGlmICghZWRpdG9yKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENyZWF0ZSBpbWFnZSBlbGVtZW50XHJcbiAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgIGltZy5zcmMgPSBpbWFnZVVybDtcclxuICAgIGltZy5zdHlsZS5tYXhXaWR0aCA9ICcxMDAlJztcclxuICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIGltZy5zdHlsZS53aWR0aCA9ICczMDBweCc7XHJcbiAgICBpbWcuc3R5bGUuaGVpZ2h0ID0gJ2F1dG8nO1xyXG5cclxuICAgIC8vIENyZWF0ZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBpbWFnZSB0byBhbGxvdyByZXNpemluZ1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICdyZWxhdGl2ZSc7XHJcbiAgICB3cmFwcGVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJzsgIC8vIEVuc3VyZXMgdGhlIHdyYXBwZXIgb25seSB0YWtlcyB1cCBzcGFjZSBmb3IgdGhlIGltYWdlXHJcbiAgICB3cmFwcGVyLnN0eWxlLm1hcmdpbiA9ICcxMHB4JztcclxuICAgIHdyYXBwZXIuc3R5bGUucGFkZGluZyA9ICc1cHgnO1xyXG4gICAgd3JhcHBlci5zdHlsZS5ib3JkZXIgPSAnMXB4IGRhc2hlZCAjY2NjJzsgLy8gT3B0aW9uYWwgYm9yZGVyIHRvIGluZGljYXRlIHRoZSBpbWFnZSBhcmVhXHJcblxyXG4gICAgLy8gQXBwZW5kIHRoZSBpbWFnZSB0byB0aGUgd3JhcHBlclxyXG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG5cclxuICAgIC8vIEFwcGVuZCB0aGUgd3JhcHBlciB0byB0aGUgZWRpdG9yXHJcbiAgICBlZGl0b3IuYXBwZW5kQ2hpbGQod3JhcHBlcik7XHJcblxyXG4gICAgLy8gTWFrZSB0aGUgaW1hZ2UgcmVzaXphYmxlXHJcbiAgICB0aGlzLm1ha2VJbWFnZVJlc2l6YWJsZSh3cmFwcGVyLCBpbWcpO1xyXG5cclxuICAgIC8vIE9wdGlvbmFsbHksIGFkZCBhIHRleHQgbm9kZSB0byBtYWludGFpbiBjdXJzb3IgcG9zaXRpb24gYWZ0ZXIgYXBwZW5kaW5nIHRoZSBpbWFnZVxyXG4gICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnXFx1MjAwQicpOyAgLy8gSW52aXNpYmxlIGNoYXJhY3RlciB0byBtYWludGFpbiBwb3NpdGlvblxyXG4gICAgZWRpdG9yLmFwcGVuZENoaWxkKHRleHROb2RlKTtcclxuXHJcbiAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICByYW5nZS5zZXRTdGFydEFmdGVyKHdyYXBwZXIpO1xyXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XHJcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtYWtlSW1hZ2VSZXNpemFibGUod3JhcHBlcjogSFRNTEVsZW1lbnQsIGltZzogSFRNTEltYWdlRWxlbWVudCk6IHZvaWQge1xyXG4gICAgbGV0IGlzUmVzaXppbmcgPSBmYWxzZTtcclxuICAgIGxldCBzdGFydFggPSAwO1xyXG4gICAgbGV0IHN0YXJ0WSA9IDA7XHJcbiAgICBsZXQgc3RhcnRXaWR0aCA9IDA7XHJcbiAgICBsZXQgc3RhcnRIZWlnaHQgPSAwO1xyXG5cclxuICAgIC8vIENyZWF0ZSByZXNpemUgaGFuZGxlcyBmb3IgdGhlIGltYWdlXHJcbiAgICBjb25zdCBjcmVhdGVSZXNpemVIYW5kbGUgPSAoXHJcbiAgICAgIGN1cnNvcjogc3RyaW5nLFxyXG4gICAgICBwb3NpdGlvblN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPixcclxuICAgICAgcmVzaXplQ2FsbGJhY2s6IChkZWx0YVg6IG51bWJlciwgZGVsdGFZOiBudW1iZXIpID0+IHZvaWRcclxuICAgICkgPT4ge1xyXG4gICAgICBjb25zdCBoYW5kbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgaGFuZGxlLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgICAgaGFuZGxlLnN0eWxlLndpZHRoID0gJzEwcHgnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUuaGVpZ2h0ID0gJzEwcHgnO1xyXG4gICAgICBoYW5kbGUuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDAsIDAsIDAsIDAuNSknO1xyXG4gICAgICBoYW5kbGUuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xyXG4gICAgICBPYmplY3QuYXNzaWduKGhhbmRsZS5zdHlsZSwgcG9zaXRpb25TdHlsZXMpO1xyXG5cclxuICAgICAgaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIChyZXNpemVFdmVudCkgPT4ge1xyXG4gICAgICAgIGlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICAgIHN0YXJ0WCA9IHJlc2l6ZUV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgc3RhcnRZID0gcmVzaXplRXZlbnQuY2xpZW50WTtcclxuICAgICAgICBzdGFydFdpZHRoID0gaW1nLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHN0YXJ0SGVpZ2h0ID0gaW1nLm9mZnNldEhlaWdodDtcclxuXHJcbiAgICAgICAgY29uc3Qgb25Nb3VzZU1vdmUgPSAobW92ZUV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNSZXNpemluZykge1xyXG4gICAgICAgICAgICBjb25zdCBkZWx0YVggPSBtb3ZlRXZlbnQuY2xpZW50WCAtIHN0YXJ0WDtcclxuICAgICAgICAgICAgY29uc3QgZGVsdGFZID0gbW92ZUV2ZW50LmNsaWVudFkgLSBzdGFydFk7XHJcbiAgICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrKGRlbHRhWCwgZGVsdGFZKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgICBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCBvbk1vdXNlTW92ZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIG9uTW91c2VVcCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChoYW5kbGUpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBBZGQgcmVzaXppbmcgaGFuZGxlcyB0byB0aGUgd3JhcHBlciBmb3IgdGhlIGltYWdlXHJcbiAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICdudy1yZXNpemUnLFxyXG4gICAgICB7IHRvcDogJy01cHgnLCBsZWZ0OiAnLTVweCcgfSxcclxuICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCAtIGRlbHRhWH1weGA7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0IC0gZGVsdGFZfXB4YDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgJ3NlLXJlc2l6ZScsXHJcbiAgICAgIHsgYm90dG9tOiAnLTVweCcsIHJpZ2h0OiAnLTVweCcgfSxcclxuICAgICAgKGRlbHRhWCwgZGVsdGFZKSA9PiB7XHJcbiAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCArIGRlbHRhWH1weGA7XHJcbiAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0ICsgZGVsdGFZfXB4YDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGluc2VydEltYWdlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgIGlmIChpbnB1dD8uZmlsZXMpIHtcclxuICAgICAgQXJyYXkuZnJvbShpbnB1dC5maWxlcykuZm9yRWFjaChmaWxlID0+IHtcclxuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpbWFnZVVybCA9IGUudGFyZ2V0LnJlc3VsdDtcclxuICAgICAgICAgIHRoaXMudXBsb2FkZWRJbWFnZXMucHVzaChpbWFnZVVybCk7IC8vIFN0b3JlIGltYWdlIFVSTCBpbiB0aGUgYXJyYXlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnZlcnRJbWFnZShmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoZmlsZS50eXBlICE9PSAnaW1hZ2UvcG5nJykge1xyXG4gICAgICAgIHJlc29sdmUoZmlsZSk7IC8vIFJldHVybiB0aGUgb3JpZ2luYWwgZmlsZSBpZiBpdCdzIG5vdCBhIFBOR1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XHJcbiAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcblxyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGltZy5zcmMgPSBlLnRhcmdldC5yZXN1bHQ7XHJcblxyXG4gICAgICAgIGltZy5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAgIGlmICghY3R4KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgY2FudmFzIGNvbnRleHQnKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XHJcbiAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcclxuXHJcbiAgICAgICAgICBjdHguZHJhd0ltYWdlKGltZywgMCwgMCk7XHJcbiAgICAgICAgICBjYW52YXMudG9CbG9iKFxyXG4gICAgICAgICAgICBibG9iID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYmxvYikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QganBnRmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZS5uYW1lLnJlcGxhY2UoL1xcLnBuZyQvLCAnLmpwZycpLCB7IHR5cGU6ICdpbWFnZS9qcGVnJyB9KTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoanBnRmlsZSk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBjb252ZXJ0IFBORyB0byBKUEcnKSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAnaW1hZ2UvanBlZycsXHJcbiAgICAgICAgICAgIDAuOTUgLy8gUXVhbGl0eSBmYWN0b3IgZm9yIEpQRUdcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignRmFpbGVkIHRvIHJlYWQgdGhlIGZpbGUnKSk7XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGluc2VydEltYWdlVG9FZGl0b3IoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlc1swXTtcclxuICAgIGxldCBmaWxlVHlwZXMgPSBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJ2ltYWdlL2pwZyddO1xyXG5cclxuICAgIGlmKCFmaWxlVHlwZXMuaW5jbHVkZXMoZmlsZS50eXBlKSlcclxuICAgICAgcmV0dXJuO1xyXG4gICAgXHJcbiAgICBpZiAoZmlsZSkge1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG4gICAgICByZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGltYWdlVXJsID0gZS50YXJnZXQucmVzdWx0O1xyXG4gICAgICAgIGNvbnN0IGVkaXRvciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5lZGl0b3InKSBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICAgICAgaWYgKCFlZGl0b3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXRvciBlbGVtZW50IG5vdCBmb3VuZC4nKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgICAgIHdyYXBwZXIuY29udGVudEVkaXRhYmxlID0gJ2ZhbHNlJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLnBvc2l0aW9uID0gJ3JlbGF0aXZlJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICB3cmFwcGVyLnN0eWxlLmJvcmRlciA9ICcxcHggZGFzaGVkICNjY2MnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUubWFyZ2luID0gJzEwcHgnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUucGFkZGluZyA9ICc1cHgnO1xyXG4gICAgICAgIHdyYXBwZXIuc3R5bGUuYm9yZGVyQmxvY2tDb2xvciA9ICcjMDA3QkZGJztcclxuICAgICAgICBjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuICAgICAgICBpbWcuc3JjID0gaW1hZ2VVcmw7XHJcbiAgICAgICAgaW1nLnN0eWxlLm1heFdpZHRoID0gJzEwMCUnO1xyXG4gICAgICAgIGltZy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICBpbWcuc3R5bGUud2lkdGggPSAnMzAwcHgnO1xyXG4gICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XHJcbiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChpbWcpO1xyXG4gICAgICAgIGxldCBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IHN0YXJ0WCA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0WSA9IDA7XHJcbiAgICAgICAgbGV0IHN0YXJ0V2lkdGggPSAwO1xyXG4gICAgICAgIGxldCBzdGFydEhlaWdodCA9IDA7XHJcblxyXG4gICAgICAgIGNvbnN0IGNyZWF0ZVJlc2l6ZUhhbmRsZSA9IChcclxuICAgICAgICAgIGN1cnNvcjogc3RyaW5nLFxyXG4gICAgICAgICAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXHJcbiAgICAgICAgICByZXNpemVDYWxsYmFjazogKGRlbHRhWDogbnVtYmVyLCBkZWx0YVk6IG51bWJlcikgPT4gdm9pZFxyXG4gICAgICAgICkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgaGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLndpZHRoID0gJzEwcHgnO1xyXG4gICAgICAgICAgaGFuZGxlLnN0eWxlLmhlaWdodCA9ICcxMHB4JztcclxuICAgICAgICAgIGhhbmRsZS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwgMCwgMCwgMC41KSc7XHJcbiAgICAgICAgICBoYW5kbGUuc3R5bGUuY3Vyc29yID0gY3Vyc29yO1xyXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihoYW5kbGUuc3R5bGUsIHBvc2l0aW9uU3R5bGVzKTtcclxuXHJcbiAgICAgICAgICBoYW5kbGUuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKHJlc2l6ZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIGlzUmVzaXppbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICBzdGFydFggPSByZXNpemVFdmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICBzdGFydFkgPSByZXNpemVFdmVudC5jbGllbnRZO1xyXG4gICAgICAgICAgICBzdGFydFdpZHRoID0gaW1nLm9mZnNldFdpZHRoO1xyXG4gICAgICAgICAgICBzdGFydEhlaWdodCA9IGltZy5vZmZzZXRIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChtb3ZlRXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNSZXNpemluZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGVsdGFYID0gbW92ZUV2ZW50LmNsaWVudFggLSBzdGFydFg7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZWx0YVkgPSBtb3ZlRXZlbnQuY2xpZW50WSAtIHN0YXJ0WTtcclxuICAgICAgICAgICAgICAgIHJlc2l6ZUNhbGxiYWNrKGRlbHRhWCwgZGVsdGFZKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IG9uTW91c2VVcCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBpc1Jlc2l6aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBvbk1vdXNlVXApO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgb25Nb3VzZU1vdmUpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgb25Nb3VzZVVwKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoaGFuZGxlKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNyZWF0ZVJlc2l6ZUhhbmRsZShcclxuICAgICAgICAgICdudy1yZXNpemUnLFxyXG4gICAgICAgICAgeyB0b3A6ICctNXB4JywgbGVmdDogJy01cHgnIH0sXHJcbiAgICAgICAgICAoZGVsdGFYLCBkZWx0YVkpID0+IHtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLndpZHRoID0gYCR7c3RhcnRXaWR0aCAtIGRlbHRhWH1weGA7XHJcbiAgICAgICAgICAgIGltZy5zdHlsZS5oZWlnaHQgPSBgJHtzdGFydEhlaWdodCAtIGRlbHRhWX1weGA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICBjcmVhdGVSZXNpemVIYW5kbGUoXHJcbiAgICAgICAgICAnc2UtcmVzaXplJyxcclxuICAgICAgICAgIHsgYm90dG9tOiAnLTVweCcsIHJpZ2h0OiAnLTVweCcgfSxcclxuICAgICAgICAgIChkZWx0YVgsIGRlbHRhWSkgPT4ge1xyXG4gICAgICAgICAgICBpbWcuc3R5bGUud2lkdGggPSBgJHtzdGFydFdpZHRoICsgZGVsdGFYfXB4YDtcclxuICAgICAgICAgICAgaW1nLnN0eWxlLmhlaWdodCA9IGAke3N0YXJ0SGVpZ2h0ICsgZGVsdGFZfXB4YDtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIGVkaXRvci5hcHBlbmRDaGlsZCh3cmFwcGVyKTtcclxuICAgICAgICBjb25zdCB0ZXh0Tm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdcXHUyMDBCJyk7XHJcbiAgICAgICAgZWRpdG9yLmFwcGVuZENoaWxkKHRleHROb2RlKTtcclxuICAgICAgICBjb25zdCByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgICAgcmFuZ2Uuc2V0U3RhcnRBZnRlcih3cmFwcGVyKTtcclxuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcclxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKHNlbGVjdGlvbikge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlblRhYmxlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmluc2VydE1hcmtlcigpO1xyXG4gICAgdGhpcy5yb3dzID0gMTtcclxuICAgIHRoaXMuY29scyA9IDE7XHJcblxyXG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3Blbih0aGlzLnRhYmxlRGlhbG9nLCB7XHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgdG9wOiBgJHtldmVudC5jbGllbnRZfXB4YCxcclxuICAgICAgICBsZWZ0OiBgJHtldmVudC5jbGllbnRYfXB4YCxcclxuICAgICAgfSxcclxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0VGFibGUocmVzdWx0LnJvd3MsIHJlc3VsdC5jb2xzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvcGVuU2lnbmF0dXJlRGlhbG9nKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmluc2VydE1hcmtlcigpO1xyXG5cclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4odGhpcy5zaWduYXR1cmVEaWFsb2csIHtcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAvLyB0b3A6IGAke2V2ZW50LmNsaWVudFl9cHhgLFxyXG4gICAgICAgIC8vIGxlZnQ6IGAke2V2ZW50LmNsaWVudFh9cHhgLFxyXG4gICAgICAgIHRvcDogJzMwcHgnXHJcbiAgICAgIH0sXHJcbiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSxcclxuICAgICAgcGFuZWxDbGFzczogJ2N1c3RvbS1kaWFsb2ctY29udGFpbmVyJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYocmVzdWx0KVxyXG4gICAgICAgIC8vIHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MICs9IGA8aW1nIHNyYz0ke3Jlc3VsdH0gYWx0PSdTaWduYXR1cmUnIC8+YFxyXG4gICAgICB0aGlzLmluc2VydEltYWdlSW5FZGl0b3IocmVzdWx0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUHJldmlldyhjb2xzOiBudW1iZXIsIHJvd3M6IG51bWJlcikge1xyXG4gICAgdGhpcy5jb2xzID0gY29scztcclxuICAgIHRoaXMucm93cyA9IHJvd3M7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWxlY3Rpb24oY29sSW5kZXg6IG51bWJlciwgcm93SW5kZXg6IG51bWJlciwgZGlhbG9nUmVmOiBhbnkpIHtcclxuICAgIHRoaXMuY29scyA9IGNvbEluZGV4O1xyXG4gICAgdGhpcy5yb3dzID0gcm93SW5kZXg7XHJcbiAgICBkaWFsb2dSZWYuY2xvc2UoeyByb3dzOiB0aGlzLnJvd3MsIGNvbHM6IHRoaXMuY29scyB9KTsgLy8gQ2xvc2UgZGlhbG9nIHdpdGggc2VsZWN0aW9uXHJcbiAgfVxyXG5cclxuICBtYWtlRmlyc3RSb3dIZWFkZXIoKTogdm9pZCB7XHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgLy8gQ2hlY2sgaWYgc2VsZWN0aW9uIGlzIGluc2lkZSB0aGUgZWRpdG9yXHJcbiAgICBpZiAoIXRoaXMuaXNTZWxlY3Rpb25JbnNpZGVFZGl0b3IoZWRpdG9yLCBzZWxlY3Rpb24pKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEZpbmQgdGhlIGNsb3Nlc3QgdGFibGUgdG8gdGhlIHNlbGVjdGlvblxyXG4gICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkTm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyO1xyXG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmZpbmRDbG9zZXN0VGFibGUoc2VsZWN0ZWROb2RlKTtcclxuICAgIGlmICghdGFibGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gQ29udmVydCB0aGUgZmlyc3Qgcm93IGNlbGxzIHRvIGhlYWRlciBjZWxsc1xyXG4gICAgY29uc3QgZmlyc3RSb3cgPSB0YWJsZS5yb3dzWzBdO1xyXG4gICAgaWYgKGZpcnN0Um93KSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlyc3RSb3cuY2VsbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBjZWxsID0gZmlyc3RSb3cuY2VsbHNbaV07XHJcbiAgICAgICAgY29uc3QgdGggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0aCcpO1xyXG4gICAgICAgIHRoLmlubmVySFRNTCA9IGNlbGwuaW5uZXJIVE1MO1xyXG4gICAgICAgIHRoLnN0eWxlLnRleHRBbGlnbiA9ICdjZW50ZXInO1xyXG4gICAgICAgIHRoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjRjFGMUYwJztcclxuICAgICAgICB0aC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIGJsYWNrJztcclxuICAgICAgICB0aC5zdHlsZS5ib3JkZXJDb2xsYXBzZSA9ICdjb2xsYXBzZSc7XHJcbiAgICAgICAgdGguc3R5bGUucGFkZGluZyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNlbGwpLnBhZGRpbmc7IC8vIFJldGFpbiBwYWRkaW5nXHJcbiAgICAgICAgdGguc3R5bGUud2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsKS53aWR0aDsgLy8gUmV0YWluIHdpZHRoXHJcbiAgICAgICAgdGguc3R5bGUuaGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2VsbCkuaGVpZ2h0O1xyXG4gICAgICAgIGZpcnN0Um93LnJlcGxhY2VDaGlsZCh0aCwgY2VsbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVkaXRvci5mb2N1cygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kQ2xvc2VzdFRhYmxlKG5vZGU6IE5vZGUpOiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCB7XHJcbiAgICB3aGlsZSAobm9kZSAmJiBub2RlICE9PSBkb2N1bWVudCkge1xyXG4gICAgICBpZiAobm9kZS5ub2RlTmFtZSA9PT0gJ1RBQkxFJykge1xyXG4gICAgICAgIHJldHVybiBub2RlIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XHJcbiAgICAgIH1cclxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5zZXJ0TWFya2VyKCk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHtcclxuICAgICAgY29uc3QgcmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKS5jbG9uZVJhbmdlKCk7XHJcbiAgICAgIGNvbnN0IG1hcmtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcclxuICAgICAgbWFya2VyLmlkID0gJ3RhYmxlLW1hcmtlcic7XHJcbiAgICAgIG1hcmtlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICByYW5nZS5pbnNlcnROb2RlKG1hcmtlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnNlcnRUYWJsZShyb3dzOiBzdHJpbmcsIGNvbHM6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3Qgcm93Q291bnQgPSBwYXJzZUludChyb3dzLCAxMCk7XHJcbiAgICBjb25zdCBjb2xDb3VudCA9IHBhcnNlSW50KGNvbHMsIDEwKTtcclxuXHJcbiAgICBpZiAoaXNOYU4ocm93Q291bnQpIHx8IGlzTmFOKGNvbENvdW50KSB8fCByb3dDb3VudCA8IDEgfHwgY29sQ291bnQgPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlZGl0b3IgPSB0aGlzLmVkaXRvci5uYXRpdmVFbGVtZW50O1xyXG4gICAgY29uc3QgbWFya2VyID0gZWRpdG9yLnF1ZXJ5U2VsZWN0b3IoJyN0YWJsZS1tYXJrZXInKTtcclxuXHJcbiAgICBjb25zdCB0YWJsZUhUTUwgPSB0aGlzLmNyZWF0ZVRhYmxlSFRNTChyb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gICAgdGVtcERpdi5pbm5lckhUTUwgPSB0YWJsZUhUTUw7XHJcbiAgICBjb25zdCB0YWJsZSA9IHRlbXBEaXYuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcblxyXG4gICAgaWYgKG1hcmtlciAmJiB0YWJsZSkge1xyXG4gICAgICBtYXJrZXIucGFyZW50Tm9kZSEucmVwbGFjZUNoaWxkKHRhYmxlLCBtYXJrZXIpO1xyXG4gICAgICB0aGlzLnNldEN1cnNvclRvRmlyc3RDZWxsKHRhYmxlIGFzIEhUTUxFbGVtZW50KTtcclxuICAgICAgZWRpdG9yLmZvY3VzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBmYWxsYmFjayBpZiBubyBtYXJrZXIsIGp1c3QgYXBwZW5kXHJcbiAgICAgIHRoaXMuYXBwZW5kVGFibGUoZWRpdG9yLCByb3dDb3VudCwgY29sQ291bnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVUYWJsZUhUTUwocm93Q291bnQ6IG51bWJlciwgY29sQ291bnQ6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBsZXQgdGFibGVIVE1MID0gJzx0YWJsZSBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgd2lkdGg6IDEwMCU7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1wiPic7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcclxuICAgICAgdGFibGVIVE1MICs9ICc8dHI+JztcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb2xDb3VudDsgaisrKSB7XHJcbiAgICAgICAgdGFibGVIVE1MICs9IGA8dGQgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgaGVpZ2h0OiAyZW07IHBhZGRpbmc6IC40ZW07IFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJ0ZXh0Ym94XCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiPjwvdGQ+YDtcclxuICAgICAgfVxyXG4gICAgICB0YWJsZUhUTUwgKz0gJzwvdHI+JztcclxuICAgIH1cclxuICAgIHRhYmxlSFRNTCArPSAnPC90YWJsZT4nO1xyXG4gICAgcmV0dXJuIHRhYmxlSFRNTDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwZW5kVGFibGUoZWRpdG9yOiBIVE1MRWxlbWVudCwgcm93Q291bnQ6IG51bWJlciwgY29sQ291bnQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgdGFibGVIVE1MID0gdGhpcy5jcmVhdGVUYWJsZUhUTUwocm93Q291bnQsIGNvbENvdW50KTtcclxuICAgIGVkaXRvci5pbm5lckhUTUwgKz0gdGFibGVIVE1MO1xyXG4gICAgY29uc3QgbGFzdEluc2VydGVkVGFibGUgPSBlZGl0b3IucXVlcnlTZWxlY3RvcigndGFibGU6bGFzdC1jaGlsZCcpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdGhpcy5zZXRDdXJzb3JUb0ZpcnN0Q2VsbChsYXN0SW5zZXJ0ZWRUYWJsZSk7XHJcbiAgICBlZGl0b3IuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNTZWxlY3Rpb25JbnNpZGVFZGl0b3IoZWRpdG9yOiBIVE1MRWxlbWVudCwgc2VsZWN0aW9uOiBTZWxlY3Rpb24pOiBib29sZWFuIHtcclxuICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBub2RlID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCkuY29tbW9uQW5jZXN0b3JDb250YWluZXI7XHJcbiAgICB3aGlsZSAobm9kZSkge1xyXG4gICAgICBpZiAobm9kZSA9PT0gZWRpdG9yKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZSE7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEN1cnNvclRvRmlyc3RDZWxsKHRhYmxlOiBIVE1MRWxlbWVudCk6IHZvaWQge1xyXG4gICAgY29uc3QgZmlyc3RDZWxsID0gdGFibGUucXVlcnlTZWxlY3RvcigndHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGQsIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBpZiAoZmlyc3RDZWxsKSB7XHJcbiAgICAgIGZpcnN0Q2VsbC5zZXRBdHRyaWJ1dGUoJ2NvbnRlbnRlZGl0YWJsZScsICd0cnVlJyk7XHJcbiAgICAgIGZpcnN0Q2VsbC5mb2N1cygpO1xyXG4gICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7XHJcbiAgICAgIG5ld1JhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhmaXJzdENlbGwpOyAvLyBTZWxlY3QgdGhlIGNvbnRlbnRzIG9mIHRoZSBjZWxsXHJcbiAgICAgIG5ld1JhbmdlLmNvbGxhcHNlKHRydWUpOyAvLyBDb2xsYXBzZSB0byB0aGUgc3RhcnRcclxuICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpO1xyXG4gICAgICBpZiAoc2VsZWN0aW9uKSB7XHJcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShuZXdSYW5nZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluc2VydFBhZ2VCcmVhaygpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhZ2VCcmVhayA9IGA8ZGl2IHN0eWxlPVwicGFnZS1icmVhay1hZnRlcjogYWx3YXlzO1wiPjxiciAvPjwvZGl2PmA7XHJcbiAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBwYWdlQnJlYWspO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0Q29udGVudCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuZWRpdG9yLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBpZighZWRpdG9yKSByZXR1cm47XHJcbiAgICBjb25zdCBjb250ZW50ID0gZWRpdG9yLmlubmVySFRNTDsgLy8gR2V0IHRoZSBIVE1MIGNvbnRlbnQgZnJvbSB0aGUgZWRpdG9yXHJcbiAgICBjb25zdCBwbGFpblRleHRDb250ZW50ID0gZWRpdG9yLmlubmVyVGV4dDsgLy8gT3B0aW9uYWxseSwgZ2V0IHBsYWluIHRleHQgY29udGVudFxyXG4gICAgaWYgKCFlZGl0b3IuaW5uZXJIVE1MLnRyaW0oKSkge1xyXG4gICAgICBlZGl0b3IuaW5uZXJIVE1MID0gJzxwIHN0eWxlPVwiZm9udC1zaXplOjE0cHg7IGZvbnQtd2VpZ2h0Om5vcm1hbDtcIj5cXHUyMDBCPC9wPic7XHJcbiAgICAgIC8vIHRoaXMuZW5zdXJlUGFyYWdyYXBoQW5kRm9jdXMoKTtcclxuICAgIH1cclxuICAgIHRoaXMub25DaGFuZ2UoY29udGVudCk7XHJcbiAgfVxyXG5cclxuICAvL1NpZ25hdHVyZVxyXG5cclxuICBjbG9zZVNpZ25EaWFsb2coZGlhbG9nUmVmOiBhbnkpe1xyXG4gICAgZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG4gIHN1Ym1pdFNpZ25EaWFsb2coZGlhbG9nUmVmOiBhbnkpe1xyXG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc2lnbmF0dXJlUGFkLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICBkaWFsb2dSZWYuY2xvc2UoZGF0YSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJkaW1lbnNpb25cIiA+XHJcbiAgPGRpdiBjbGFzcz1cInJpY2gtdGV4dC1lZGl0b3JcIj5cclxuICAgIDwhLS0gVG9vbGJhciAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyXCI+XHJcbiAgICAgIDxzZWxlY3QgKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy50ZXh0Rm9ybWF0ID8/IHRydWVcIiBjbGFzcz1cInNlbGVjdC13cmFwcGVyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhlYWRcIiAoY2hhbmdlKT1cInNldEhlYWRpbmcoJGV2ZW50KVwiPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJQXCIgc3R5bGU9XCJmb250LXNpemU6IDE0cHggIWltcG9ydGFudDtcIj5QYXJhZ3JhcGg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMzJweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkgxPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkgyXCIgc3R5bGU9XCJmb250LXNpemU6IDI4cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IGJvbGQgIWltcG9ydGFudDtcIj5IMjwvb3B0aW9uPlxyXG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCJIM1wiIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0OiBib2xkICFpbXBvcnRhbnQ7XCI+SDM8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSDRcIiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50OyBmb250LXdlaWdodDogYm9sZCAhaW1wb3J0YW50O1wiPkg0PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg1XCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1wiPkg1PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkg2XCIgc3R5bGU9XCJmb250LXNpemU6IDE2cHggIWltcG9ydGFudDsgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1wiPkg2PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgICA8c2VsZWN0ICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uZm9udFNpemUgPz8gdHJ1ZVwiIGNsYXNzPVwic2VsZWN0LXdyYXBwZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRm9udFwiXHJcbiAgICAgICAgKGNoYW5nZSk9XCJzZXRGb250U2l6ZSgkZXZlbnQpXCI+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTJweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMTJcIj4xMnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMTRcIiBzZWxlY3RlZD4xNHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMTZcIj4xNnB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMThcIj4xOHB4PC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiBzdHlsZT1cImZvbnQtc2l6ZTogMjBweCAhaW1wb3J0YW50O1wiIHZhbHVlPVwiMjBcIj4yMHB4PC9vcHRpb24+ICBcclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAyNHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIyNFwiPjI0cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAyOHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIyOFwiPjI4cHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCIzMlwiPjMycHg8L29wdGlvbj5cclxuICAgICAgICA8b3B0aW9uIHN0eWxlPVwiZm9udC1zaXplOiA0OHB4ICFpbXBvcnRhbnQ7XCIgdmFsdWU9XCI0OFwiPjQ4cHg8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5ib2xkID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdib2xkJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkJvbGRcIiB0aXRsZT1cIkJvbGRcIiA+XHJcbiAgICAgICAgPHN2ZyAgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiLTYuNSAwIDI4IDMyXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHRpdGxlPmJvbGQ8L3RpdGxlPiA8cGF0aCBkPVwiTTAgMjUuNTMxdjEuMzQ0YzEuMDYzLTAuMDMxIDEuOTM4LTAuMDYzIDIuNTYzLTAuMDk0IDAuNjI1IDAgMS4wOTQtMC4wMzEgMS4zMTMtMC4wMzEgMS42NTYtMC4xMjUgMy4wNjMtMC4yMTkgNC4yODEtMC4xODhsMi44MTMgMC4wNjNjMi40MzggMCA0LjI1LTAuMzEzIDUuNzUtMSAwLjcxOS0wLjM0NCAxLjM0NC0wLjg0NCAxLjk2OS0xLjUzMSAwLjQ2OS0wLjQ2OSAwLjgxMy0xLjAzMSAxLjAzMS0xLjY1NiAwLjI1LTAuODQ0IDAuMzc1LTEuNTk0IDAuMzc1LTIuMjgxIDAtMi41LTEuNzE5LTQuNjI1LTUuMDk0LTUuNDA2IDAuNTMxLTAuMjUgMS4wMzEtMC41IDEuMzc1LTAuNjg4czAuNjI1LTAuMzEzIDAuNzgxLTAuNDM4YzEuMTg4LTAuODc1IDEuNzgxLTEuOTA2IDEuNzgxLTMuMjgxIDAtMC41OTQtMC4wOTQtMS4xODgtMC4yODEtMS43MTktMC4zNzUtMS4wOTQtMS4yMTktMi0yLjQwNi0yLjU2My0wLjUzMS0wLjMxMy0xLjAzMS0wLjQ2OS0xLjM3NS0wLjUzMS0wLjkzOC0wLjI1LTEuODQ0LTAuMzc1LTIuNzE5LTAuMzc1aC0xLjA5NGMtMC4yMTkgMC0wLjQwNiAwLTAuNTMxLTAuMDMxaC0wLjVjLTAuMDYzIDAtMC4xNTYgMC0wLjI1IDAuMDMxaC0wLjYyNWwtNS40MDYgMC4xNTYtMy43MTkgMC4wOTQgMC4wNjMgMS4xODhjMC44NzUgMC4xMjUgMS40MDYgMC4xODggMS42MjUgMC4xODggMC40MzggMCAwLjc4MSAwLjA5NCAwLjk2OSAwLjIxOSAwLjA5NCAwIDAuMTU2IDAuMDYzIDAuMTg4IDAuMTI1IDAuMDYzIDAuMjE5IDAuMTI1IDAuNjg4IDAuMTU2IDEuNTYzIDAuMDYzIDEuNTYzIDAuMDYzIDIuODEzIDAuMDYzIDMuNzUgMC4wMzEgMC45NjkgMC4wMzEgMS42MjUgMC4wOTQgMnY3LjAzMWMwIDEuMjE5LTAuMDMxIDIuMTI1LTAuMTU2IDIuNzUtMC4wMzEgMC4yMTktMC4xMjUgMC40MzgtMC4yODEgMC42ODgtMC40MzggMC4xODgtMSAwLjM3NS0xLjc1IDAuNDY5LTAuMzc1IDAuMDYzLTAuNzE5IDAuMTI1LTEgMC4xNTZ6TTcuNzE5IDE0LjI4MXYtMi40NjljMC4wNjMtMS43MTkgMC0yLjk2OS0wLjAzMS0zLjk2OS0wLjA2My0wLjQzOC0wLjA2My0wLjg0NC0wLjA2My0xLjA2MyAwLjc1LTAuMTU2IDEuMzQ0LTAuMjE5IDEuODQ0LTAuMjE5IDEuNjI1IDAgMi44NDQgMC4zNDQgMy42NTYgMS4wOTQgMC44MTMgMC42ODggMS4yMTkgMS41NjMgMS4yMTkgMi42NTYgMCAyLjk2OS0xLjc1IDQuMDk0LTUuMDYzIDQuMDk0LTAuNTYzIDAtMS4wOTQtMC4wMzEtMS41NjMtMC4xMjV6TTcuNzE5IDIwLjQwNnYtNC41YzAuMzEzLTAuMDYzIDAuNzUtMC4xMjUgMS40MzgtMC4xMjUgMS41OTQtMC4wMzEgMi44MTMgMC4xMjUgMy41NjMgMC40MzggMS41MzEgMC41NjMgMi41OTQgMi4xODggMi41OTQgNC4zNDQgMCAxLjAzMS0wLjIxOSAxLjg0NC0wLjU2MyAyLjU2My0wLjM3NSAwLjcxOS0wLjkwNiAxLjIxOS0xLjcxOSAxLjU5NC0xLjY1NiAwLjc4MS0zLjcxOSAwLjcxOS01LjEyNSAwLjEyNS0wLjA5NC0wLjI1LTAuMTI1LTAuNDM4LTAuMTI1LTAuNTk0elwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5pdGFsaWMgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2l0YWxpYycpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJJdGFsaWNcIiB0aXRsZT1cIkl0YWxpY1wiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9pdGFsaWM8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCI0IDAgMjAgMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGcgaWQ9XCJFZGl0IC8gSXRhbGljXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk04IDE5SDEwTTEwIDE5SDEyTTEwIDE5TDE0IDVNMTIgNUgxNE0xNCA1SDE2XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy51bmRlcmxpbmUgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ3VuZGVybGluZScpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJVbmRlcmxpbmVcIiB0aXRsZT1cIlVuZGVybGluZVwiPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF91bmRlcmxpbmU8L21hdC1pY29uPiAtLT5cclxuICAgICAgICA8c3ZnIHZpZXdCb3g9XCI0IDAgMTggMjJcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGcgaWQ9XCJFZGl0IC8gVW5kZXJsaW5lXCI+IDxwYXRoIGlkPVwiVmVjdG9yXCIgZD1cIk02IDE5SDE4TTggNVYxMUM4IDEzLjIwOTEgOS43OTA4NiAxNSAxMiAxNUMxNC4yMDkxIDE1IDE2IDEzLjIwOTEgMTYgMTFWNVwiIFthdHRyLnN0cm9rZV09XCJpY29uQ29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uc3RyaWtldGhyb3VnaCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnc3RyaWtldGhyb3VnaCcpXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJTdHJpa2V0aHJvdWdoXCIgdGl0bGU9XCJTdHJpa2V0aHJvdWdoXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+c3RyaWtldGhyb3VnaF9zPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiNCAwIDIwIDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxnIGlkPVwiRWRpdCAvIFN0cmlrZXRocm91Z2hcIj4gPHBhdGggaWQ9XCJWZWN0b3JcIiBkPVwiTTEyLjAwMDUgMTIuMDAwMUMxMi44OTU5IDEyLjAwMDEgMTMuNzc0OSAxMi4xOTI1IDE0LjU0NTcgMTIuNTU3MUMxNC44OTM5IDEyLjcyMTggMTUuMjE0NiAxMi45MTkyIDE1LjUwMDkgMTMuMTQzN0MxNS44NDg0IDEzLjQxNjIgMTYuMTQ1NyAxMy43MjkgMTYuMzgyMiAxNC4wNzMyQzE2LjgxMzYgMTQuNzAwOSAxNy4wMjYzIDE1LjQwOTYgMTYuOTk4MiAxNi4xMjU2QzE2Ljk3IDE2Ljg0MTYgMTYuNzAyIDE3LjUzODUgMTYuMjIyMiAxOC4xNDMzQzE1Ljc0MjQgMTguNzQ4MSAxNS4wNjg0IDE5LjIzODYgMTQuMjcwNSAxOS41NjM4QzEzLjQ3MjcgMTkuODg5IDEyLjU4MDIgMjAuMDM3MyAxMS42ODY1IDE5Ljk5MjNDMTAuNzkyOCAxOS45NDczIDkuOTMxMDQgMTkuNzEwOCA5LjE5MDQzIDE5LjMwODJDOC40NDk4MiAxOC45MDU1IDcuODU3ODIgMTguMzUxNCA3LjQ3NjU2IDE3LjcwMzJNMTIuMDAwNSAxMi4wMDAxSDRNMTIuMDAwNSAxMi4wMDAxSDIwTTE2LjUyNDMgNi4yOTcxOEMxNi4xNDMgNS42NDkgMTUuNTUxMiA1LjA5NDYyIDE0LjgxMDUgNC42OTE5N0MxNC4wNjk5IDQuMjg5MzIgMTMuMjA3NiA0LjA1Mjg3IDEyLjMxNCA0LjAwNzg5QzExLjQyMDMgMy45NjI5MSAxMC41Mjc4IDQuMTEwOTEgOS43Mjk5OCA0LjQzNjEzQzguOTMyMTMgNC43NjEzNSA4LjI1ODEyIDUuMjUyMDUgNy43NzgzMiA1Ljg1Njg5QzcuMjk4NTIgNi40NjE3MyA3LjAzMDU3IDcuMTU4ODUgNy4wMDI0NCA3Ljg3NDg1QzYuOTk0MiA4LjA4NDYzIDcuMDA2NjkgOC4yOTM0NSA3LjAzOTI0IDguNTAwMTRcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmFsaWduTGVmdCA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUxlZnQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQWxpZ24gTGVmdFwiIHRpdGxlPVwiQWxpZ24gTGVmdFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fbGVmdDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgICA8c3ZnIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZD1cIk0xMSAxSDFWM0gxMVYxWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEgNUgxNVY3SDFWNVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xMSA5SDFWMTFIMTFWOVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xNSAxM0gxVjE1SDE1VjEzWlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmFsaWduQ2VudGVyID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5Q2VudGVyJylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIkNlbnRlclwiIHRpdGxlPVwiQWxpZ24gQ2VudGVyXCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9jZW50ZXI8L21hdC1pY29uPiAtLT5cclxuICAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTUgMUgxVjNIMTVWMVpcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPHBhdGggZD1cIk0xIDVIMTVWN0gxVjVaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTUgOUgxVjExSDE1VjlaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMTEgMTNIMVYxNUgxMVYxM1pcIiBbYXR0ci5maWxsXT1cImljb25Db2xvclwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5hbGlnblJpZ2h0ID8/IHRydWVcIiAoY2xpY2spPVwiZm9ybWF0KCdqdXN0aWZ5UmlnaHQnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQWxpZ24gUmlnaHRcIiB0aXRsZT1cIkFsaWduIFJpZ2h0XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9hbGlnbl9yaWdodDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAxNiAxNlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTE1IDFINVYzSDE1VjFaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDxwYXRoIGQ9XCJNMSA1SDE1VjdIMVY1WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDlINVYxMUgxNVY5WlwiIFthdHRyLmZpbGxdPVwiaWNvbkNvbG9yXCI+PC9wYXRoPiA8cGF0aCBkPVwiTTE1IDEzSDFWMTVIMTVWMTNaXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uanVzdGlmeSA/PyB0cnVlXCIgKGNsaWNrKT1cImZvcm1hdCgnanVzdGlmeUZ1bGwnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiSnVzdGlmeVwiIHRpdGxlPVwiSnVzdGlmeVwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfYWxpZ25fanVzdGlmeTwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAtMi41IDI5IDI5XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPjxwYXRoIGQ9XCJtMS4zMzQgMi42NjZoMjYuNjY1Yy4wMTEgMCAuMDI0LjAwMS4wMzcuMDAxLjczNyAwIDEuMzM0LS41OTcgMS4zMzQtMS4zMzRzLS41OTctMS4zMzQtMS4zMzQtMS4zMzRjLS4wMTMgMC0uMDI2IDAtLjAzOS4wMDFoLjAwMi0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSA1LjMzM2gtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjAxMSAwIC4wMjQuMDAxLjAzNy4wMDEuNzM3IDAgMS4zMzQtLjU5NyAxLjMzNC0xLjMzNHMtLjU5Ny0xLjMzNC0xLjMzNC0xLjMzNGMtLjAxMyAwLS4wMjYgMC0uMDM5LjAwMXpcIj48L3BhdGg+PHBhdGggZD1cIm0yNy45OTkgMTAuNjY3aC0yNi42NjVjLS43Mi4wMjEtMS4yOTYuNjEtMS4yOTYgMS4zMzNzLjU3NiAxLjMxMiAxLjI5NCAxLjMzM2guMDAyIDI2LjY2NWMuNzItLjAyMSAxLjI5Ni0uNjEgMS4yOTYtMS4zMzNzLS41NzYtMS4zMTItMS4yOTQtMS4zMzN6XCI+PC9wYXRoPjxwYXRoIGQ9XCJtMjcuOTk5IDIxLjMzM2gtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjcyLS4wMjEgMS4yOTYtLjYxIDEuMjk2LTEuMzMzcy0uNTc2LTEuMzEyLTEuMjk0LTEuMzMzelwiPjwvcGF0aD48cGF0aCBkPVwibTI3Ljk5OSAxNmgtMjYuNjY1Yy0uNzIuMDIxLTEuMjk2LjYxLTEuMjk2IDEuMzMzcy41NzYgMS4zMTIgMS4yOTQgMS4zMzNoLjAwMiAyNi42NjVjLjcyLS4wMjEgMS4yOTYtLjYxIDEuMjk2LTEuMzMzcy0uNTc2LTEuMzEyLTEuMjk0LTEuMzMzelwiPjwvcGF0aD48L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmJ1bGxldExpc3QgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydFVub3JkZXJlZExpc3QnKVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiVW5vcmRlcmVkIExpc3RcIiB0aXRsZT1cIkJ1bGxldCBMaXN0XCIgPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uPmZvcm1hdF9saXN0X2J1bGxldGVkPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAwIDM2IDQ4XCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+PHBhdGggZD1cIk04IDIxYy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3pNOCA5Yy0xLjY2IDAtMyAxLjM0LTMgM3MxLjM0IDMgMyAzIDMtMS4zNCAzLTMtMS4zNC0zLTMtM3ptMCAyNC4zM2MtMS40NyAwLTIuNjcgMS4xOS0yLjY3IDIuNjdzMS4yIDIuNjcgMi42NyAyLjY3IDIuNjctMS4xOSAyLjY3LTIuNjctMS4yLTIuNjctMi42Ny0yLjY3ek0xNCAzOGgyOHYtNEgxNHY0em0wLTEyaDI4di00SDE0djR6bTAtMTZ2NGgyOHYtNEgxNHpcIj48L3BhdGg+PC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy5udW1iZXJlZExpc3QgPz8gdHJ1ZVwiIChjbGljayk9XCJmb3JtYXQoJ2luc2VydE9yZGVyZWRMaXN0JylcIiB0eXBlPVwiYnV0dG9uXCIgYXJpYS1sYWJlbD1cIk9yZGVyZWQgTGlzdFwiIHRpdGxlPVwiTnVtYmVyZWQgTGlzdFwiID5cclxuICAgICAgICA8IS0tIDxtYXQtaWNvbj5mb3JtYXRfbGlzdF9udW1iZXJlZDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2ZXJzaW9uPVwiMS4xXCIgaWQ9XCJDYXBhXzFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgdmlld0JveD1cIjAgMCA5NC40NzkgOTQuNDc5XCIgeG1sOnNwYWNlPVwicHJlc2VydmVcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPGc+IDxnPiA8cGF0aCBkPVwiTTkyLjQ3OSw2LjgyMUgyNi44MjNjLTEuMTA0LDAtMiwwLjg5Ni0yLDJWMTkuNThjMCwxLjEwNCwwLjg5NiwyLDIsMmg2NS42NTZjMS4xMDQsMCwyLTAuODk2LDItMlY4LjgyMSBDOTQuNDc5LDcuNzE3LDkzLjU4NCw2LjgyMSw5Mi40NzksNi44MjF6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTkyLjQ3OSw0MC40NTdIMjYuODIzYy0xLjEwNCwwLTIsMC44OTYtMiwydjEwLjc2MWMwLDEuMTA0LDAuODk2LDIsMiwyaDY1LjY1NmMxLjEwNCwwLDItMC44OTYsMi0yVjQyLjQ1NyBDOTQuNDc5LDQxLjM1Miw5My41ODQsNDAuNDU3LDkyLjQ3OSw0MC40NTd6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTkyLjQ3OSw3NS4xMDlIMjYuODIzYy0xLjEwNCwwLTIsMC44OTYtMiwydjEwLjc1OWMwLDEuMTA0LDAuODk2LDIsMiwyaDY1LjY1NmMxLjEwNCwwLDItMC44OTYsMi0yVjc3LjEwOSBDOTQuNDc5LDc2LjAwNCw5My41ODQsNzUuMTA5LDkyLjQ3OSw3NS4xMDl6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTEuODQyLDExLjEwNGMwLjQyMywwLjA1MSwwLjg0OC0wLjA4LDEuMTY3LTAuMzZsMC45MTQtMC43OTl2MTIuOTczYzAsMC44MjgsMC42NzIsMS41LDEuNSwxLjVoMS41NDYgYzAuODI4LDAsMS41LTAuNjcyLDEuNS0xLjVWNS41NjdjMC0wLjgyOC0wLjY3Mi0xLjUtMS41LTEuNUg1LjM3OGMtMC4zNTYsMC0wLjcwMSwwLjEyNy0wLjk3MywwLjM1OEwwLjUyNyw3LjcyOCBjLTAuNTg5LDAuNTAxLTAuNywxLjM2OS0wLjI1NiwyLjAwM2wwLjUyMiwwLjc0NUMxLjA0LDEwLjgyNSwxLjQyLDExLjA1MywxLjg0MiwxMS4xMDR6XCI+PC9wYXRoPiA8cGF0aCBkPVwiTTIuNTQ2LDM3LjVjLTAuNjQ3LDAuMjMtMS4wNTYsMC44NzItMC45OSwxLjU1NmwwLjA5NiwwLjk5OWMwLjA0OCwwLjQ5NywwLjMzOSwwLjkzOCwwLjc3OCwxLjE3NiBjMC40MzgsMC4yMzgsMC45NjcsMC4yNDMsMS40MDksMC4wMTFjMS4xOC0wLjYxNSwxLjkyMy0wLjc3NSwyLjkyMi0wLjUzNGMwLjcxLDAuMTYzLDEuMTg4LDAuNTg2LDEuNDM4LDEuMjI1IGMwLjM3OCwxLjE0MywwLjM5NSwyLjk1Ny0yLjg1NCw2Ljg3M2wtMi41MDYsMi45OTZjLTAuNTg5LDAuNjg4LTAuOTksMS4xMTktMS4zMDIsMS40MDRjLTAuMzEyLDAuMjg0LTAuNDg4LDAuNjg4LTAuNDg4LDEuMTA3IHYxLjQ3NWMwLDAuODI4LDAuNjcyLDEuNSwxLjUsMS41aDkuMTMyYzAuODI4LDAsMS41LTAuNjcyLDEuNS0xLjVWNTUuMDFjMC0wLjgyOC0wLjY3Mi0xLjUtMS41LTEuNUg2Ljg5NiBjMC40NTgtMC41MTUsMS4wMzctMS4yMTEsMS43MTYtMi4wNjNjMi44MDMtMy40NjgsNS4wNjEtNi42NDUsNC4yOTItMTAuMzc2Yy0wLjMwOS0xLjY3Mi0xLjI0Ny0yLjk2Ni0yLjczMS0zLjc1MiBjLTAuODI2LTAuNDI0LTEuODc5LTAuNjM5LTMuMTI3LTAuNjM5QzUuNjI5LDM2LjY4LDQuMDMxLDM2Ljk3MSwyLjU0NiwzNy41elwiPjwvcGF0aD4gPHBhdGggZD1cIk0xMC40OTEsNzkuNTE2YzAuMjUtMC4xMzUsMC40ODctMC4yODksMC43NC0wLjQ4M2MxLjcxOC0xLjMxMywxLjgwMS0zLjMzNSwxLjc4Ni0zLjg4NSBjLTAuMDAxLTEuODc4LTAuNzEyLTMuMzE4LTIuMTY2LTQuNDAxYy0xLjAyNi0wLjc3LTIuNTM0LTEuMTc3LTQuMzYxLTEuMTc3Yy0xLjM0NywwLTIuNzg3LDAuMjEyLTQuMDU3LDAuNTk2IGMtMC42NjgsMC4yMDItMS4xMDcsMC44MzktMS4wNjMsMS41MzNsMC4wNTgsMC44OGMwLjAzMSwwLjQ3MSwwLjI4LDAuODk2LDAuNjczLDEuMTU1YzAuMzk0LDAuMjU5LDAuODg2LDAuMzE5LDEuMzI3LDAuMTU5IGMwLjg2NC0wLjMwNywxLjU3MS0wLjQ1LDIuMjIzLTAuNDVjMC4yMjksMCwwLjQ1NywwLjAxOSwwLjcyMiwwLjA2M2MwLjk0LDAuMTI3LDEuNTYzLDAuNTQ5LDEuOSwxLjI4MyBjMC4yMzcsMC41MiwwLjE5LDEuNDQ1LTAuMDgzLDEuODg1Yy0wLjY1NCwxLjAxNC0yLjQzOCwxLjIxNy0zLjQ0MywxLjI1Yy0wLjgxLDAuMDI0LTEuNDUzLDAuNjg4LTEuNDUzLDEuNDk4djAuNjU4IGMwLDAuODI4LDAuNjg3LDEuNSwxLjUxNSwxLjVjMS41NzUsMCwyLjMxMSwwLjMwOSwyLjU5NiwwLjQ4NWMwLjczNywwLjQ2NSwxLjA2NSwxLjA0MywxLjA2NiwxLjkxOCBjMC4wMjUsMC45MTItMC4zNDgsMS42MDYtMS4xMjksMi4xMjFjLTEuMDE0LDAuNjUxLTIuNjQsMC42NDctNC41MDUsMC4wMzJjLTAuNDM4LTAuMTQ2LTAuOTE4LTAuMDgyLTEuMzAyLDAuMTc1IGMtMC4zODQsMC4yNTUtMC42MjksMC42NzItMC42NjUsMS4xMzJsLTAuMDY4LDAuODcyQzAuNzUsODguOTczLDEuMTM1LDg5LjU4OCwxLjc1LDg5LjgzYzAuMzMsMC4xMywwLjU1MSwwLjE4MywxLjAyMiwwLjI4MSBjMC44NTcsMC4xOTYsMS44NCwwLjMwMiwyLjg0MiwwLjMwMmMxLjQ5MywwLDQuMjQ4LTAuMjQ3LDUuOTQ0LTEuOTE5YzEuNjU3LTEuNjksMS45NzQtNC4xMSwxLjU2LTUuNzI5IEMxMi42MzYsODAuNzA0LDExLjQ2MSw3OS45NDYsMTAuNDkxLDc5LjUxNnpcIj48L3BhdGg+IDwvZz4gPC9nPiA8L2c+PC9zdmc+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGJ1dHRvbiAqbmdJZj1cImVkaXRvck9wdGlvbnM/Lm9wdGlvbnM/LmltYWdlID8/IHRydWVcIiBhcmlhLWxhYmVsPVwiSW5zZXJ0IEltYWdlXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7IGRpc3BsYXk6IGlubGluZS1mbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcIiB0aXRsZT1cIkluc2VydCBJbWFnZVwiID5cclxuICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCIucG5nLC5qcGcsLmpwZWdcIiAgKGNoYW5nZSk9XCJpbnNlcnRJbWFnZVRvRWRpdG9yKCRldmVudClcIlxyXG4gICAgICAgICAgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IC01MCU7IHRvcDogMDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgb3BhY2l0eTogMDsgY3Vyc29yOiBwb2ludGVyO1wiXHJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxyXG4gICAgICAgIDwhLS0gPG1hdC1pY29uIHN0eWxlPVwicG9pbnRlci1ldmVudHM6IG5vbmU7XCI+aW5zZXJ0X3Bob3RvX291dGxpbmVkPC9tYXQtaWNvbj4gLS0+XHJcbiAgICAgICAgPHN2ZyB2aWV3Qm94PVwiMiAxIDIwIDIyXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+PGcgaWQ9XCJTVkdSZXBvX2ljb25DYXJyaWVyXCI+IDxwYXRoIGQ9XCJNMTQuMjY0NyAxNS45Mzc3TDEyLjU0NzMgMTQuMjM0NkMxMS43NTggMTMuNDUxOSAxMS4zNjMzIDEzLjA2MDUgMTAuOTA4OSAxMi45MTM3QzEwLjUwOTIgMTIuNzg0NSAxMC4wNzkgMTIuNzg0NSA5LjY3OTIyIDEyLjkxMzdDOS4yMjQ4NSAxMy4wNjA1IDguODMwMTcgMTMuNDUxOSA4LjA0MDgyIDE0LjIzNDZMNC4wNDE5MyAxOC4yNjIyTTE0LjI2NDcgMTUuOTM3N0wxNC42MDYgMTUuNTk5MUMxNS40MTIgMTQuNzk5OSAxNS44MTQ5IDE0LjQwMDMgMTYuMjc3MyAxNC4yNTQ1QzE2LjY4MzkgMTQuMTI2MiAxNy4xMjA4IDE0LjEzMTIgMTcuNTI0NCAxNC4yNjg4QzE3Ljk4MzIgMTQuNDI1MyAxOC4zNzY5IDE0LjgzNCAxOS4xNjQyIDE1LjY1MTVMMjAgMTYuNTAwMU0xNC4yNjQ3IDE1LjkzNzdMMTguMjIgMTkuOTYyOE0xOC4yMiAxOS45NjI4QzE3Ljg3MDMgMjAgMTcuNDIxMyAyMCAxNi44IDIwSDcuMkM2LjA3OTg5IDIwIDUuNTE5ODQgMjAgNS4wOTIwMiAxOS43ODJDNC43MTU3IDE5LjU5MDMgNC40MDk3MyAxOS4yODQzIDQuMjE3OTkgMTguOTA4QzQuMTI1ODMgMTguNzI3MSA0LjA3MjY0IDE4LjUyMjYgNC4wNDE5MyAxOC4yNjIyTTE4LjIyIDE5Ljk2MjhDMTguNTAwNyAxOS45MzI5IDE4LjcxNzUgMTkuODc5MSAxOC45MDggMTkuNzgyQzE5LjI4NDMgMTkuNTkwMyAxOS41OTAzIDE5LjI4NDMgMTkuNzgyIDE4LjkwOEMyMCAxOC40ODAyIDIwIDE3LjkyMDEgMjAgMTYuOFYxM00xMSA0SDcuMkM2LjA3OTg5IDQgNS41MTk4NCA0IDUuMDkyMDIgNC4yMTc5OUM0LjcxNTcgNC40MDk3MyA0LjQwOTczIDQuNzE1NjkgNC4yMTc5OSA1LjA5MjAyQzQgNS41MTk4NCA0IDYuMDc5OSA0IDcuMlYxNi44QzQgMTcuNDQ2NiA0IDE3LjkwNjYgNC4wNDE5MyAxOC4yNjIyTTE4IDlWNk0xOCA2VjNNMTggNkgyMU0xOCA2SDE1XCIgW2F0dHIuc3Ryb2tlXT1cImljb25Db2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8udGFibGUgPz8gdHJ1ZVwiIChjbGljayk9XCJvcGVuVGFibGVEaWFsb2coJGV2ZW50KVwiIHR5cGU9XCJidXR0b25cIiAgdGl0bGU9XCJUYWJsZVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Ym9yZGVyX2FsbDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNTZweFwiIGhlaWdodD1cIjI1NnB4XCIgdmlld0JveD1cIjIgMTIgMjAgM1wiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxnIGlkPVwiU1ZHUmVwb19iZ0NhcnJpZXJcIiBzdHJva2Utd2lkdGg9XCIwXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPjxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPiA8cGF0aCBkPVwiTTMgOUgyMU0zIDE1SDIxTTkgOUw5IDIwTTE1IDlMMTUgMjBNNi4yIDIwSDE3LjhDMTguOTIwMSAyMCAxOS40ODAyIDIwIDE5LjkwOCAxOS43ODJDMjAuMjg0MyAxOS41OTAzIDIwLjU5MDMgMTkuMjg0MyAyMC43ODIgMTguOTA4QzIxIDE4LjQ4MDIgMjEgMTcuOTIwMSAyMSAxNi44VjcuMkMyMSA2LjA3OTkgMjEgNS41MTk4NCAyMC43ODIgNS4wOTIwMkMyMC41OTAzIDQuNzE1NjkgMjAuMjg0MyA0LjQwOTczIDE5LjkwOCA0LjIxNzk5QzE5LjQ4MDIgNCAxOC45MjAxIDQgMTcuOCA0SDYuMkM1LjA3OTkgNCA0LjUxOTg0IDQgNC4wOTIwMiA0LjIxNzk5QzMuNzE1NjkgNC40MDk3MyAzLjQwOTczIDQuNzE1NjkgMy4yMTc5OSA1LjA5MjAyQzMgNS41MTk4NCAzIDYuMDc5ODkgMyA3LjJWMTYuOEMzIDE3LjkyMDEgMyAxOC40ODAyIDMuMjE3OTkgMTguOTA4QzMuNDA5NzMgMTkuMjg0MyAzLjcxNTY5IDE5LjU5MDMgNC4wOTIwMiAxOS43ODJDNC41MTk4NCAyMCA1LjA3OTg5IDIwIDYuMiAyMFpcIiBbYXR0ci5zdHJva2VdPVwiaWNvbkNvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD4gPC9nPjwvc3ZnPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDxidXR0b24gKm5nSWY9XCJlZGl0b3JPcHRpb25zPy5vcHRpb25zPy50YWJsZUhlYWRlciA/PyB0cnVlXCIgY2xhc3M9XCJtYi0xXCIgKGNsaWNrKT1cIm1ha2VGaXJzdFJvd0hlYWRlcigpXCIgdHlwZT1cImJ1dHRvblwiICBhcmlhLWxhYmVsPVwiTWFrZSBIZWFkZXJcIiB0aXRsZT1cIlRhYmxlIEhlYWRlclwiID5cclxuICAgICAgICA8IS0tIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAyMHB4O1wiIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgcGFnZV9oZWFkZXJcclxuICAgICAgICA8L3NwYW4+IC0tPlxyXG4gICAgICAgIDxzdmcgW2F0dHIuZmlsbF09XCJpY29uQ29sb3JcIiB2aWV3Qm94PVwiMCAwIDE5MjAgMTkyMFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTIxMy4zMzMgMEM5NS41MTI2IDAgMCA5NS41MTI2IDAgMjEzLjMzM1YxNzA2LjY3QzAgMTgyNC40OSA5NS41MTI2IDE5MjAgMjEzLjMzMyAxOTIwSDE3MDYuNjdDMTgyNC40OSAxOTIwIDE5MjAgMTgyNC40OSAxOTIwIDE3MDYuNjdWMjEzLjMzM0MxOTIwIDk1LjUxMjYgMTgyNC40OSAwIDE3MDYuNjcgMEgyMTMuMzMzWk0yNjYuNjY3IDc0Ni42NjdDMjM3LjIxMSA3NDYuNjY3IDIxMy4zMzMgNzIyLjc4OCAyMTMuMzMzIDY5My4zMzNWMzczLjMzM0MyMTMuMzMzIDM0My44NzggMjM3LjIxMSAzMjAgMjY2LjY2NyAzMjBIMTY1My4zM0MxNjgyLjc5IDMyMCAxNzA2LjY3IDM0My44NzggMTcwNi42NyAzNzMuMzMzVjY5My4zMzNDMTcwNi42NyA3MjIuNzg4IDE2ODIuNzkgNzQ2LjY2NyAxNjUzLjMzIDc0Ni42NjdIMjY2LjY2N1pcIj48L3BhdGg+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8YnV0dG9uICpuZ0lmPVwiZWRpdG9yT3B0aW9ucz8ub3B0aW9ucz8uc2lnbmF0dXJlID8/IHRydWVcIiAoY2xpY2spPVwib3BlblNpZ25hdHVyZURpYWxvZygkZXZlbnQpXCIgdHlwZT1cImJ1dHRvblwiICB0aXRsZT1cIlNpZ25hdHVyZVwiXHJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkNob29zZSB0YWJsZSByb3dzIGFuZCBjb2x1bW5zXCI+XHJcbiAgICAgICAgPCEtLSA8bWF0LWljb24+Ym9yZGVyX2FsbDwvbWF0LWljb24+IC0tPlxyXG4gICAgICAgIDxzdmcgdmlld0JveD1cIjAgMCAyOCAyOFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCIgZmlsbD1cIiMwMDAwMDBcIj48ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9fdHJhY2VyQ2FycmllclwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvZz48ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj4gPCEtLSBVcGxvYWRlZCB0bzogU1ZHIFJlcG8sIHd3dy5zdmdyZXBvLmNvbSwgR2VuZXJhdG9yOiBTVkcgUmVwbyBNaXhlciBUb29scyAtLT4gPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+IDxnIGlkPVwi8J+UjS1Qcm9kdWN0LUljb25zXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj4gPGcgaWQ9XCJpY19mbHVlbnRfc2lnbmF0dXJlXzI4X3JlZ3VsYXJcIiBmaWxsPVwiIzIxMjEyMVwiIGZpbGwtcnVsZT1cIm5vbnplcm9cIj4gPHBhdGggZD1cIk0xNi40Nzk4OTU2LDIxLjAwMTk1NzggTDE2Ljc1LDIxIEMxNy45NzAyMzUyLDIxIDE4LjYxMTI0NDEsMjEuNTA1ODAzMiAxOS40MDIwNjI3LDIyLjcwNDE2NjIgTDE5Ljc5NTgyNzgsMjMuMzEyNDQwOSBDMjAuMTAyODI2NiwyMy43NjY5MzggMjAuMjk0NDM3NCwyMy45NTczMjQ3IDIwLjUzNTc4NCwyNC4wNTY3OTI5IEMyMC45Njg0ODczLDI0LjIzNTEyNjYgMjEuMzI3MTAwOCwyNC4xNDc0NDQ2IDIyLjY0NDA3ODIsMjMuNTEzMzIxMyBMMjMuMDQ3MzI3MywyMy4zMTcwMzE5IEMyMy44NzA5OTgyLDIyLjkxMjY3MTEgMjQuNDMzMDI4NiwyMi42ODExNjA2IDI1LjA2ODA5ODMsMjIuNTIyMzkzMSBDMjUuNDY5OTQ0NSwyMi40MjE5MzE2IDI1Ljg3NzE0NTMsMjIuNjY2MjUyMSAyNS45Nzc2MDY5LDIzLjA2ODA5ODMgQzI2LjA3ODA2ODQsMjMuNDY5OTQ0NSAyNS44MzM3NDc5LDIzLjg3NzE0NTMgMjUuNDMxOTAxNywyMy45Nzc2MDY5IEMyNS4wMzcxNjA2LDI0LjA3NjI5MjIgMjQuNjU4OTQ2NSwyNC4yMTc4ODE5IDI0LjE2NDEzNjQsMjQuNDQ1ODk5NyBMMjMuMDA1NDg5OSwyNS4wMDMyNjczIEMyMS40Mzc2MzAyLDI1Ljc0MzY5NDQgMjAuOTA1OTAwOSwyNS44MzE3MzIxIDE5Ljk2NDIxNiwyNS40NDM2Mjc1IEMxOS4zMzkxMjM3LDI1LjE4NjAwMjggMTguOTgzNjc2NSwyNC44MTMyOTggMTguNDYzNTYzOSwyNC4wMTgwMjI3IEwxOC4yNjg4OTAzLDIzLjcxNDA4NDkgQzE3LjcwNzExMTIsMjIuODI4ODczMSAxNy40MDU3Nzk0LDIyLjUzODQ1MzggMTYuODY4ODQ0NCwyMi41MDM2NjU1IEwxNi43NSwyMi41IEMxNi4yMDE3MzA2LDIyLjUgMTYuMDkzMzEwNCwyMi41Njg0NTcyIDE0LjAwOTI4MSwyNC4xMTUwMjQxIEMxMi4yNjcwMzk1LDI1LjQwNzk0ODggMTAuOTM4MzM1OSwyNi4wMjU0OTg0IDkuMjQ4NjQyNDMsMjYuMDI1NDk4NCBDNy4xODg3Mjg2OSwyNi4wMjU0OTg0IDUuMjQ3NzMzNjcsMjUuNjQ3MDY3IDMuNDMxNDU4NzUsMjQuODkwNTM2MyBMNi4zMTM3NzgwMywyNC4yMjQxNzg0IEM3LjI1NzY5NDA0LDI0LjQyNTA3NjIgOC4yMzU2NzE0MywyNC41MjU0OTg0IDkuMjQ4NjQyNDMsMjQuNTI1NDk4NCBDMTAuNTM5MzAzNSwyNC41MjU0OTg0IDExLjYwOTEyOSwyNC4wMjgyNjkxIDEzLjExNTM3OTYsMjIuOTEwNDc0MyBMMTQuMjc1NDQ0LDIyLjA1NDU0ODggQzE1LjU0NjgwNjUsMjEuMTMwNDkwMyAxNS44Mjk2MTEzLDIxLjAxNjAzMiAxNi40Nzk4OTU2LDIxLjAwMTk1NzggTDE2LjQ3OTg5NTYsMjEuMDAxOTU3OCBaIE0yMi43NzcwOTg4LDMuMjIyMDg5NzkgQzI0LjQ1MDcyMjMsNC44OTU3MTMzIDI0LjQ1MDc1NjYsNy42MDkxNjA3OSAyMi43NzcxODg5LDkuMjgyODEzMjQgTDIxLjc0MTY1NSwxMC4zMTg0NDc1IEMyMi44OTM2MjYzLDExLjcxOTk2NTcgMjIuODUyMTUyNiwxMy4yMDUzNzc0IDIxLjc4MTEwMzEsMTQuMjc5NTU2IEwxOC43ODAwNzI3LDE3LjI4MDU4NzQgTDE4Ljc4MDA3MjcsMTcuMjgwNTg3NCBDMTguNDg3MDM3NCwxNy41NzMzMzg0IDE4LjAxMjE2MzcsMTcuNTczMTA4IDE3LjcxOTQxMjYsMTcuMjgwMDcyNyBDMTcuNDI2NjYxNiwxNi45ODcwMzc0IDE3LjQyNjg5MiwxNi41MTIxNjM3IDE3LjcxOTkyNzMsMTYuMjE5NDEyNiBMMjAuNzE4ODk2OSwxMy4yMjA0NDQgQzIxLjIwMzk1NzEsMTIuNzMzOTY2OCAyMS4yNjAwMDIxLDEyLjEyOTk5ODMgMjAuNjc4OTQxLDExLjM4MTg5NDUgTDEwLjA4NDU0MzcsMjEuOTc2MTAxMSBDOS43ODYzNTQ1OSwyMi4yNzQzMDUzIDkuNDEwMzYxMTcsMjIuNDgyNzA1IDguOTk5NDQ3MDMsMjIuNTc3NTMxMyBMMi45MTg2NDQ2MywyMy45ODA3OTM0IEMyLjM3ODU5MDYxLDI0LjEwNTQyMTIgMS44OTQ1Nzg3NSwyMy42MjE0MDk0IDIuMDE5MjA2NiwyMy4wODEzNTU0IEwzLjQyMjQ3Nzk0LDE3LjAwMDUxMjkgQzMuNTE3Mjk1NTcsMTYuNTg5NjM2NSAzLjcyNTY2NTg5LDE2LjIxMzY3MzYgNC4wMjM4Mjc2LDE1LjkxNTQ5NjggTDE2LjcxNjUwMTksMy4yMjIxNzk5MiBDMTguMzkwMDQxNSwxLjU0ODU1NTU1IDIxLjEwMzQzNDksMS41NDg1MTA1OSAyMi43NzcwOTg4LDMuMjIyMDg5NzkgWiBNMTcuNzc3MTg4OSw0LjI4MjgxMzI0IEw1LjA4NDUxNDYyLDE2Ljk3NjEzMDIgQzQuOTg1MTI3MzgsMTcuMDc1NTIyNCA0LjkxNTY3MDYxLDE3LjIwMDg0MzQgNC44ODQwNjQ3MywxNy4zMzc4MDIyIEwzLjc1MDYyNDgsMjIuMjQ5Mzc1MiBMOC42NjIxNTc3NywyMS4xMTU5NDQ1IEM4Ljc5OTEyOTE1LDIxLjA4NDMzNTcgOC45MjQ0NjAyOSwyMS4wMTQ4NjkyIDkuMDIzODU2NjUsMjAuOTE1NDY3OCBMMjEuNzE2NTAxOSw4LjIyMjE3OTkyIEMyMi44MDQzMDYzLDcuMTM0MzIwNDkgMjIuODA0Mjg2Miw1LjM3MDYwNDc4IDIxLjcxNjQ1ODgsNC4yODI3NzAxIEMyMC42Mjg1OTE0LDMuMTk0OTY1MDcgMTguODY0OTUwNiwzLjE5NDk5NjUzIDE3Ljc3NzE4ODksNC4yODI4MTMyNCBaXCIgaWQ9XCLwn46oLUNvbG9yXCI+IDwvcGF0aD4gPC9nPiA8L2c+IDwvZz48L3N2Zz5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yXCIgaWQ9XCJlZGl0b3JcIiBjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCIgI2VkaXRvciAoaW5wdXQpPVwic3VibWl0Q29udGVudCgpXCIgKGJsdXIpPVwib25CbHVyKClcIiAoa2V5dXApPVwib25FZGl0b3JLZXlVcCgkZXZlbnQpXCIgKG1vdXNldXApPVwidXBkYXRlQ3VycmVudEZvcm1hdCgpXCJcclxuICAgICAgKGRyb3ApPVwiZHJvcCgkZXZlbnQpXCIgKGRyYWdvdmVyKT1cImFsbG93RHJvcCgkZXZlbnQpXCI+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8bmctdGVtcGxhdGUgI3RhYmxlRGlhbG9nIGxldC1kaWFsb2dSZWY9XCJkaWFsb2dSZWZcIj5cclxuICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkNob29zZSBUYWJsZSBTaXplPC9oMj5cclxuICAgIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNlbGwgb2YgZ3JpZDsgbGV0IGkgPSBpbmRleFwiIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAnZ3JpZC1pdGVtJzogdHJ1ZSxcclxuICAgICAgICAnaGlnaGxpZ2h0ZWQnOiBpICUgNyA8IGNvbHMgJiYgTWF0aC5mbG9vcihpIC8gNykgPCByb3dzXHJcbiAgICAgIH1cIiAobW91c2VlbnRlcik9XCJ1cGRhdGVQcmV2aWV3KGkgJSA3ICsgMSwgTWF0aC5mbG9vcihpIC8gNykgKyAxKVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwidXBkYXRlU2VsZWN0aW9uKGkgJSA3ICsgMSwgTWF0aC5mbG9vcihpIC8gNykgKyAxLCBkaWFsb2dSZWYpXCI+PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cD57eyByb3dzIH19IHgge3sgY29scyB9fSA8L3A+XHJcbiAgICA8L21hdC1kaWFsb2ctY29udGVudD5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI3NpZ25hdHVyZURpYWxvZyBsZXQtZGlhbG9nUmVmPVwiZGlhbG9nUmVmXCI+XHJcbiAgICA8aDIgbWF0LWRpYWxvZy10aXRsZT5EcmF3IGEgU2lnbmF0dXJlPC9oMj5cclxuICAgIDxzaWduYXR1cmUtcGFkICNzaWdQYWQgW29wdGlvbnNdPVwic2lnbmF0dXJlUGFkT3B0aW9uc1wiIGNsYXNzPVwic2lnblwiID48L3NpZ25hdHVyZS1wYWQ+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uXCIgPlxyXG4gICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibm9ybWFsXCIgPiBDbG9zZSA8L2J1dHRvbj4gLS0+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwibm9ybWFsXCIgKGNsaWNrKT1cImNsb3NlU2lnbkRpYWxvZyhkaWFsb2dSZWYpXCIgPiBDbG9zZSA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJzdWJtaXRcIiAoY2xpY2spPVwic3VibWl0U2lnbkRpYWxvZyhkaWFsb2dSZWYpXCIgPiBTdWJtaXQgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIFxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvZGl2PlxyXG4iXX0=