dotnetreport-ng 6.2.0 → 6.2.1-beta-v2

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.
@@ -1,5 +1,6 @@
1
1
  import { Component, Inject } from '@angular/core';
2
2
  import { BASE_URL_TOKEN } from './../dotnetreport-lib.di';
3
+ import { CommonModule } from '@angular/common';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/platform-browser";
5
6
  import * as i2 from "@angular/common/http";
@@ -12,7 +13,7 @@ export class DotnetsetupComponent {
12
13
  route;
13
14
  baseServiceUrl;
14
15
  reportTemplates;
15
- queryParams;
16
+ queryParams = {};
16
17
  constructor(injector, sanitizer, cdref, baseUrl, http, route) {
17
18
  this.sanitizer = sanitizer;
18
19
  this.cdref = cdref;
@@ -3179,14 +3180,14 @@ export class DotnetsetupComponent {
3179
3180
  `);
3180
3181
  this.cdref.detectChanges();
3181
3182
  }
3182
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DotnetsetupComponent, deps: [{ token: i0.Injector }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }, { token: BASE_URL_TOKEN }, { token: i2.HttpClient }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
3183
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DotnetsetupComponent, selector: "app-dotnetsetup", ngImport: i0, template: "<div id=\"dot-net-report\" class=\"body-content\">\r\n\r\n<div>\r\n <h2>Manage Database</h2>\r\n <p>\r\n You can select and manage display names for the Tables and Columns you would like to allow in Dotnet Report Builder.\r\n </p>\r\n <div class=\"alert alert-danger d-flex justify-content-between align-items-center\">\r\n <div>\r\n Do not expose this Setup Tool to end users who should not have access to it. Ideally, only Developers should be given access to this utility.\r\n </div>\r\n <button class=\"btn btn-primary ms-3\" data-bind=\"click: refreshAll\" title=\"Reload all Table and Columns\">\r\n <i class=\"fa fa-refresh\"></i> Refresh\r\n </button>\r\n </div>\r\n\r\n <div data-bind=\"visible: false;\">\r\n Loading...\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <!-- Nav tabs -->\r\n <ul class=\"nav nav-tabs flex-grow-1\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link active\" href=\"#tablesfields\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(false); activeTable(null);}\">\r\n <i class=\"fa fa-database\"></i> Database Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#tablesfields\" aria-controls=\"custom\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(true); activeTable(null); }\">\r\n <i class=\"fa fa-table\"></i> Custom Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#relations\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-link\"></i> Relations\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#procedure\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-code\"></i> Stored Procs\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#schedules\" aria-controls=\"schedules\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-clock-o\"></i> Schedules\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\" style=\"display: none;\">\r\n <a class=\"nav-link\" href=\"#functions\" aria-controls=\"functions\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-cogs\"></i> Custom Functions\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#manageaccess\" aria-controls=\"manageaccess\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-folder\"></i> Manage Reports\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#connection\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-plug\"></i> Data Connection\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <br />\r\n</div>\r\n<!-- Tab panes -->\r\n<div class=\"fix-content\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"tab-content\">\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"connection\">\r\n <b>Manage Data Connection</b>\r\n <p>\r\n Data Connection groups data schemas (including tables and stored procedures and other configuration), Reports, and Dashboards into a single environment. You can create multiple Data Connections and easily switch between them for separate environment management.\r\n </p>\r\n <hr />\r\n <div class=\"form-row\" data-bind=\"visible: true\">\r\n <div class=\"form-group\">\r\n <div class=\"control-group\">\r\n <select class=\"form-select\" style=\"width:25%\" data-bind=\"options: DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: currentConnectionKey\"></select>\r\n <div class=\"padded-top\"></div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: false\" data-bs-toggle=\"modal\" data-bs-target=\"#connection-setup-modal\">Manage DB Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: switchConnection, visible: canSwitchConnection\">Switch Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: editDataConnectionModal, hidden: canSwitchConnection\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Edit Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: newDataConnectionModal\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Add New Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: exportAll, visible: false\">Export Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: importStart, visible: false\">Import Connection</button>\r\n </div>\r\n <div data-bind=\"visible: importingFile\">\r\n <br />\r\n <div class=\"alert alert-info\">\r\n Please select a file you have previously exported from this utility. The system will load the screen with the Data Connection setting in the file, however, it will <b>NOT</b> be saved until you press the Save All button or Save individual tables\r\n <br />\r\n <div class=\"input-group\">\r\n <input type=\"file\" accept=\".json\" id=\"import-file\" data-bind=\"event: { change: function() { importFile($element.files[0]) } }\" />\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-link\" data-bind=\"click: importCancel\">Cancel</button>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <br />\r\n <br />\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Account Level Settings</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div data-bind=\"with: settings\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Admin Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useClientIdInAdmin\" data-bind=\"checked: useClientIdInAdmin\">\r\n <label class=\"form-check-label\" for=\"useClientIdInAdmin\">Use Client ID in Admin mode</label>\r\n <small class=\"text-muted d-block\">Enable this to respect client IDs even when in admin mode.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlBuilderInAdminMode\" data-bind=\"checked: useSqlBuilderInAdminMode\">\r\n <label class=\"form-check-label\" for=\"useSqlBuilderInAdminMode\">Use SQL Builder in Admin Mode</label>\r\n <small class=\"text-muted d-block\">Allows SQL query builder access <b>only</b> in admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Customization</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlCustomField\" data-bind=\"checked: useSqlCustomField\">\r\n <label class=\"form-check-label\" for=\"useSqlCustomField\">Use SQL in Custom Field</label>\r\n <small class=\"text-muted d-block\">Allows the use of SQL expressions in custom fields.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: usePromptBuilder\">\r\n <label class=\"form-check-label\">Use AI aided, prompt based Report Builder</label>\r\n <small class=\"text-muted d-block\">Let non Admin users create reports using the AI aided Prompt based builder</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPivot\">\r\n <label class=\"form-check-label\">Pivot with Drilldown</label>\r\n <small class=\"text-muted d-block\">Use alternate Pivot method that doesn\u2019t use SQL\u2019s PIVOT.<br>Allows drilldown, but may be slower.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Report Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToCreateReports\" data-bind=\"checked: allowUsersToCreateReports\">\r\n <label class=\"form-check-label\" for=\"allowUsersToCreateReports\">Allow All Users to Create Reports</label>\r\n <small class=\"text-muted d-block\">Permits users to generate and customize reports.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showImportExport\">\r\n <label class=\"form-check-label\">Allow All Users to export/import\u00A0reports</label>\r\n <small class=\"text-muted d-block\">\r\n Allow non admin users to export and import Reports in the system.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Folder Options</h6>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noFolders\" data-bind=\"checked: noFolders\">\r\n <label class=\"form-check-label\" for=\"noFolders\">No Folders</label>\r\n <small class=\"text-muted d-block\">Disables the use of folders in the application.</small>\r\n </div>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noDefaultFolder\" data-bind=\"checked: noDefaultFolder\">\r\n <label class=\"form-check-label\" for=\"noDefaultFolder\">No Default Folder</label>\r\n <small class=\"text-muted d-block\">Removes the Default folder.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showEmptyFolders\">\r\n <label class=\"form-check-label\">Show Empty Folders</label>\r\n <small class=\"text-muted d-block\">Will show empty folders for non admin users.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToManageFolders\" data-bind=\"checked: allowUsersToManageFolders\">\r\n <label class=\"form-check-label\" for=\"allowUsersToManageFolders\">Allow All Users to Manage Folders</label>\r\n <small class=\"text-muted d-block\">Grants permission to organize and manage folders without admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Export Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPdf\">\r\n <label class=\"form-check-label\">PDF Export without Chromium</label>\r\n <small class=\"text-muted d-block\">Use alternate PDF export method that doesn\u2019t rely on Chromium.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontXmlExport\">\r\n <label class=\"form-check-label\">Hide XML Export option</label>\r\n <small class=\"text-muted d-block\">Remove XML Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontWordExport\">\r\n <label class=\"form-check-label\">Hide Word Export option</label>\r\n <small class=\"text-muted d-block\">Remove Word Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showPageSize\">\r\n <label class=\"form-check-label\">Show Page Size on PDF & Word export</label>\r\n <small class=\"text-muted d-block\">Display document dimensions in exported PDF & Word.</small>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"button\" id=\"saveAppSettings\" class=\"btn btn-primary\" data-bind=\"click: saveAppSettings\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"tablesfields\">\r\n <b data-bind=\"text: customTableMode() ? 'Custom Tables' : 'Database Tables'\"></b>\r\n <p>\r\n <span data-bind=\"visible: $root.customTableMode\">\r\n Define Custom Tables using SQL Select Query to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n <span data-bind=\"hidden: $root.customTableMode\">\r\n Select Tables or Views from your Database to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n </p>\r\n\r\n <div data-bind=\"with: Tables\">\r\n <input type=\"text\" class=\"form-control input-sm\" placeholder=\"Filter Tables...\" data-bind=\"value: tableFilter, valueUpdate: 'afterkeydown'\" style=\"float: left; width: 180px; margin-right: 5px;\">\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: clearTableFilter, visible: tableFilter()!='' && tableFilter()!=null\"><span class=\"fa fa-remove\"></span></button>\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: toggleShowAll, hidden: $root.customTableMode() || $root.onlyApi(), text: usedOnly() ? 'Show all' : 'Show used only'\">Show used only</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.customSql.addNewCustomSqlTable, visible: $root.customTableMode\">Add New Custom Table</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.loadFromDatabase, hidden: $root.customTableMode() || !$root.onlyApi()\">\r\n <span class=\"fa fa-database\"></span> Load all Database Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.visualizeJoins\"><span class=\"fa fa-arrows-h\"></span> Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(true) }, visible: $root.customTableMode\">\r\n <span class=\"fa fa-download\"></span> Export Custom Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(false) }, visible: !$root.customTableMode()\">\r\n <span class=\"fa fa-download\"></span> Export Tables/Views\r\n </button>\r\n\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadTablesFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Tables/Views\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" title=\"Manage Categories\" data-bs-toggle=\"modal\" data-bs-target=\"#category-modal\">\r\n <span class=\"fa fa-server\"></span> Manage Categories\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: selectAll, visible: !$root.onlyApi()\">\r\n <span class=\"fa fa-check\"></span> Select All Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { $root.saveChanges($root.customTableMode()) }\">\r\n <span class=\"fa fa-floppy-o\"></span> Save All Tables\r\n </button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n\r\n <div class=\"row\">\r\n <div data-bind=\"ifnot: $root.customTableMode\">\r\n <div class=\"alert alert-info\">\r\n <span data-bind=\"text: Tables.model().filter(t => !t.CustomTable()).length\"></span> Tables/Views\r\n <span data-bind=\"text: $root.onlyApi() ? 'configured and used' : 'read from database'\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"menu g-3\" data-bind=\"foreach: pagedTables\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"checkbox pull-left\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName,attr: { title: TableName }, click: function() { $root.activeTable($data); }\" class=\"table-name-label\" style=\"cursor: pointer\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeTable($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-3\">\r\n <div class=\"d-flex flex-column col-md-12\" data-bind=\"with: pager\">\r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"tableDetails\">\r\n <div data-bind=\"visible: pagedTables().length === 0\">\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">No <span data-bind=\"visible: $root.customTableMode\">Custom </span> Tables added yet, click \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\" to get started!</div>\r\n </div>\r\n\r\n <div data-bind=\"visible: !activeTable() && pagedTables().length > 0\">\r\n <br />\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">Select a <span data-bind=\"visible: $root.customTableMode\">Custom </span> Table, or \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\"</div>\r\n </div>\r\n\r\n <div data-bind=\"with: activeTable\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i> Preview Data\r\n </button>\r\n <button class=\"btn btn-sm btn-danger\" title=\"Delete this Table\" data-bind=\"click: function() { deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-trash\"></i> Remove Table\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Category\" data-bs-toggle=\"modal\" data-bs-target=\"#category-manage-modal\" data-bind=\"click: $root.selectedCategory\">\r\n <i class=\"fa fa-gear\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Table\" data-bind=\"click: function() { exportTableJson(); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <p style=\"display: none;\">\r\n <!-- deprecated -->\r\n <label class=\"label-sm\">Account Id Field</label><br />\r\n <span data-bind=\"editable: AccountIdField\"></span>\r\n </p>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: DoNotDisplay\">\r\n Do Not Display\r\n </label>\r\n </div>\r\n <div data-bind=\"if: CustomTable\">\r\n <button class=\"btn btn-sm btn-secondary\" data-bind=\"click: $root.customSql.viewCustomSql.bind($data)\">View Custom SQL</button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-end gap-2\">\r\n <label class=\"label-sm m-0\"><span data-bind=\"text: Columns().length\"></span> Columns</label>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: autoFormat, visible: Selected\">Auto Format</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: unselectAllColumns, visible: Selected\">Unselect All</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: selectAllColumns, visible: Selected\">Select All</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"list-group\" data-bind=\"sortable: { data: Columns, options: { handle: '.sortable', cursor: 'move' }, afterMove: $root.Tables.columnSorted }\">\r\n <div class=\"list-group-item\">\r\n <div data-bind=\"if: $parent.DynamicColumns()\">\r\n <span data-bind=\"html: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n </div>\r\n <div class=\"checkbox\" data-bind=\"if: !$parent.DynamicColumns()\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected, enable: $parent.Selected()\">\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n <label data-bind=\"visible: PrimaryKey\" class=\"badge text-bg-primary\">Primary</label>\r\n <label data-bind=\"visible: ForeignKey\" class=\"badge text-bg-info text-white\">Foreign</label>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, false)\">...</button>\r\n <div class=\"btn btn-sm pull-right sortable\">\r\n <span class=\"fa fa-arrows\" aria-hidden=\"true\" title=\"Drag to reorder\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"relations\">\r\n <b>Relations</b>\r\n <p>\r\n Setup your Database Relations for Dotnet Report to produce dynamic queries\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddAllRelations\">Auto Add Joins</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddJoin\">Add new Join</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: SaveJoins\">Save Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: visualizeJoins\">Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: DeleteVisibleJoins\" title=\"Delete filtered Joins\">Delete Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: ExportJoins\" title=\"Export filtered Joins\">Export Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadJoinsFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-upload\"></span> Import Joins\r\n </button>\r\n <hr />\r\n <div id=\"form-joins\">\r\n <div class=\"alert alert-warning\" data-bind=\"visible: isDirty\">\r\n You have unsaved changes. Please be sure to click <b>Save Joins</b> to save your changes.\r\n </div>\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row fw-bold bg-light border-bottom py-2\" data-bind=\"with: JoinFilters\">\r\n <!-- Repeat for each column header -->\r\n <div class=\"col-md-2\">\r\n Primary Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByPrimaryTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Type\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinType, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinType\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinType() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field<div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Join Row -->\r\n <div class=\"row bg-info bg-opacity-25 p-2\" data-bind=\"visible: showNewJoinRow\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: Tables.availableTables, optionsText: 'DisplayName', value: NewJoin().JoinTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsCaption: 'Pick a field...', optionsValue: 'ColumnName', value: $root.NewJoin().FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: NewJoin().JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: NewJoin().OtherTables, optionsText: 'DisplayName', value: NewJoin().OtherTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $root.NewJoin().JoinFieldName, optionsCaption: 'Pick a field...'\"></select>\r\n </div>\r\n <div class=\"col-md-2 text-end\">\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"click: ConfirmAddJoin\">+ Add Join</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Existing Join Rows -->\r\n <div data-bind=\"foreach: pagedJoins\">\r\n <div class=\"row align-items-center border-bottom py-2\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', value: JoinTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: OtherTables, optionsText: 'DisplayName', value: OtherTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.JoinFieldName\"></select>\r\n </div>\r\n\r\n <div class=\"col-md-2 text-end\">\r\n <span class=\"badge bg-warning text-dark me-2\"\r\n data-bind=\"visible: isNew\"\r\n data-bs-toggle=\"tooltip\"\r\n title=\"New record added or imported, not saved yet\">\r\n <i class=\"fa fa-warning\"></i> New\r\n </span>\r\n\r\n <button class=\"btn btn-secondary btn-sm\" data-bind=\"click: DeleteJoin\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\"> \r\n <div class=\"d-flex flex-row align-items-center col-md-12\" data-bind=\"with: joinsPager\"> \r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n </div>\r\n <div id=\"procedure\" class=\"tab-pane\">\r\n <b>Stored Procedures</b>\r\n <p>\r\n Select and manage Stored Procedures to use in Dotnet Report for more complex and coded Reports\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#procedure-modal\"><span class=\"fa fa-plus\"></span> Add Stored Procs from database</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadStoredProceduresFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Stored Procedures\r\n </button>\r\n <hr />\r\n <div data-bind=\"if: Procedures.savedProcedures().length == 0\">\r\n <br />\r\n No Stored Procedures have been setup yet.\r\n </div>\r\n <div class=\"row\" data-bind=\"if: Procedures.savedProcedures().length > 0\">\r\n <!-- Left Panel for Stored Procedure Names -->\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <div class=\"menu g-3\" data-bind=\"foreach: Procedures.savedProcedures\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName, click: function() { $root.activeProcedure($data); }\" style=\"cursor: pointer\"></span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span>\r\n </button>\r\n </div>\r\n <!-- Click to activate procedure -->\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeProcedure($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Panel for Stored Procedure Details -->\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"procDetails\">\r\n <div data-bind=\"with: activeProcedure\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5 data-bind=\"text: TableName\"></h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span> Delete\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Procedure\" data-bind=\"click: function() { $root.exportProcedureJson($data.TableName); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <label class=\"small\">Columns</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, true)\">...</button>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ParameterName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span>\r\n &nbsp;&nbsp;\r\n <button class=\"btn btn-sm btn-primary pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#parameter-modal\" title=\"All Parameter options\" data-bind=\"click: $root.editParameter\">...</button>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div id=\"manageaccess\" class=\"tab-pane\">\r\n <ul class=\"nav nav-tabs\" id=\"accessTabs\" role=\"tablist\">\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link active\" id=\"reports-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#reportsAccess\" type=\"button\" role=\"tab\">Reports Access</button>\r\n </li>\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link\" id=\"folders-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#foldersAccess\" type=\"button\" role=\"tab\">Folders Access</button>\r\n </li>\r\n </ul>\r\n <div class=\"tab-content mt-3\">\r\n <div class=\"tab-pane fade show active\" id=\"reportsAccess\" role=\"tabpanel\" aria-labelledby=\"reports-tab\">\r\n <b>Reports Access</b>\r\n <p>You can setup access to individual Reports here</p>\r\n <div class=\"mb-2 d-flex gap-2\">\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { exportFoldersReportJson() }\">\r\n <span class=\"fa fa-download\"></span> Export Selected Reports Access\r\n </button>\r\n </div> \r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadFileModal\">\r\n <span class=\"fa fa-upload\"></span> Import Reports\r\n </button>\r\n </div>\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#searchModal\">\r\n <span class=\"fa fa-tasks\"></span> Bulk Actions\r\n </button>\r\n </div>\r\n </div>\r\n <hr />\r\n <div data-bind=\"foreach: reportsAndFolders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n data-bind=\"checked: allReportsSelected\">\r\n <label>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folder-' + folderId }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: folder\"></span>\r\n </a>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folder-' + folderId }\">\r\n <div data-bind=\"if: reports.length == 0\">\r\n No Reports found in this folder\r\n </div>\r\n <ul class=\"list-group\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" data-bind=\"checked: isSelected\" />\r\n <label class=\"list-group-item-heading\">\r\n <span class=\"fa\" data-bind=\"css: {'fa-file': reportType=='List', 'fa-th-list': reportType=='Summary', 'fa-bar-chart': reportType=='Bar', 'fa-pie-chart': reportType=='Pie', 'fa-line-chart': reportType=='Line', 'fa-globe': reportType =='Map'}\" style=\"font-size: 14pt; color: #808080\"></span>\r\n <span data-bind=\"text: reportName\"></span>\r\n </label>\r\n </div>\r\n <p class=\"list-group-item-text small\" data-bind=\"text: reportDescription\"></p>\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Report Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: userId() ? userId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (viewOnlyUserId() ? viewOnlyUserId() : (userId() ? userId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: deleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: userRole()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole() ? userRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: viewOnlyUserRole()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole() ? viewOnlyUserRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: deleteOnlyUserRole()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole() ? deleteOnlyUserRole() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId() ? clientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tab-pane fade\" id=\"foldersAccess\" role=\"tabpanel\" aria-labelledby=\"folders-tab\">\r\n <b>Folders Access</b>\r\n <p>You can setup access to individual Folders here</p>\r\n <hr />\r\n <div data-bind=\"foreach: Folders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folderAccess-' + Id }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: FolderName\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folderAccess-' + Id }\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Folder Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserId()? UserId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (ViewOnlyUserId() ? ViewOnlyUserId() : (UserId() ? UserId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: DeleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: UserRoles()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserRoles() ? UserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: ViewOnlyUserRoles()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: ViewOnlyUserRoles() ? ViewOnlyUserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: DeleteOnlyUserRoles()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserRoles() ? DeleteOnlyUserRoles() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: ClientId() ? ClientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeFolderAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeFolderAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveFolderAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"functions\" data-bind=\"with: Functions\">\r\n <b>Custom Functions</b>\r\n <p>\r\n Create and manage Custom Function that you can use in building Reports and Dashboards\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: createNewFunction\">Add new Function</button>\r\n <br />\r\n <hr />\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <input id=\"searchInput\" class=\"form-control mb-2\" type=\"text\" placeholder=\"Search...\" data-bind=\"value: search, valueUpdate: 'input', visible: functions().length > 0\">\r\n <ul class=\"list-group\" data-bind=\"foreach: filteredFunctions\">\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center\">\r\n <span data-bind=\"text: name\"></span>\r\n <div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $parent.selectFunction\">Edit</button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: function() { $parent.deleteFunction($data) }\">Delete</button>\r\n </div>\r\n </li>\r\n </ul>\r\n <div data-bind=\"if: functions().length == 0\">\r\n No Functions found\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" data-bind=\"with: selectedFunction\">\r\n <div style=\"padding-left: 10px;\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Setup Function</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"mb-3\" data-bind=\"validationElement: functionName\">\r\n <label for=\"functionName\" class=\"form-label\">Function Name</label>\r\n <input id=\"functionName\" class=\"form-control\" required data-bind=\"value: name, valueUpdate: 'input'\" />\r\n <div class=\"invalid-feedback\">Function Name is required.</div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionType\" class=\"form-label\">Function Type</label>\r\n <select id=\"functionType\" class=\"form-control\" data-bind=\"value: functionType, event: { change: $parent.updateCodeEditorMode }\">\r\n <option value=\"csharp\">C#</option>\r\n <!--<option value=\"javascript\">JavaScript</option>\r\n <option value=\"sql\">SQL</option>-->\r\n </select>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionDescription\" class=\"form-label\">Description</label>\r\n <textarea id=\"functionDescription\" class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Add any helpful description here for the user...\"></textarea>\r\n </div>\r\n\r\n <div>\r\n <b>Arguments</b>\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Display Name</th>\r\n <th>Description</th>\r\n <th>Data Type</th>\r\n <th>Required</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: parameters\">\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" data-bind=\"value: parameterName, valueUpdate: 'input'\" />\r\n <span class=\"text-danger\" data-bind=\"visible: name.hasError, text: name.validationMessage\"></span>\r\n </td>\r\n <td><input class=\"form-control\" data-bind=\"value: displayName, valueUpdate: 'input'\" /></td>\r\n <td><input class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Friendly description for user...\" /></td>\r\n <td>\r\n <select class=\"form-select\" data-bind=\"value: datatype\">\r\n <option>object</option>\r\n <option>string</option>\r\n <option>int</option>\r\n <option>float</option>\r\n <option>bool</option>\r\n </select>\r\n </td>\r\n <td><input type=\"checkbox\" data-bind=\"checked: required\" /></td>\r\n <td><button class=\"btn btn-sm btn-danger\" data-bind=\"click: $parent.removeParameter\">Remove</button></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: addParameter\">Add Argument</button>\r\n </div>\r\n <br />\r\n <div class=\"mb-3\">\r\n <label for=\"codeEditor\" class=\"form-label\">Write the <b>Code</b> for the function below:</label>\r\n <div style=\"border: 1px solid\">\r\n <textarea id=\"codeEditor\" class=\"code-editor form-control\" data-bind=\"value: code\"></textarea>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $parent.saveFunction\">Save</button>\r\n <button class=\"btn btn-secondary\" data-bind=\"click: $parent.cancelEdit\">Cancel</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"schedules\">\r\n <b>Scheduled Reports</b>\r\n <p>\r\n View Schedules setup for sending Reports and Dashboards\r\n </p>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div data-bind=\"visible: schedules().length === 0\">\r\n <i class=\"fa fa-exclamation-circle\"></i> No scheduled Reports or Dashboards available.\r\n </div>\r\n <div class=\"container-fluid\" data-bind=\"if: schedules().length > 0\">\r\n <div data-bind=\"foreach: schedules\">\r\n <div class=\"row border-bottom py-2\">\r\n <div class=\"col-12\">\r\n For <span class=\"text-muted\" data-bind=\"text: DashboardId === 0 ? 'Report' : 'Dashboard'\"></span>\r\n <b><span data-bind=\"text: Name\"></span></b>\r\n </div>\r\n </div>\r\n\r\n <!-- Inner schedule items -->\r\n <div class=\"row fw-bold bg-light py-2 d-none d-md-flex\">\r\n <div class=\"col-md\"><i class=\"fa fa-clock-o\"></i> Schedule</div>\r\n <div class=\"col-md\"><i class=\"fa fa-envelope\"></i> Email To</div>\r\n <div class=\"col-md\"><i class=\"fa fa-file\"></i> Format</div>\r\n <div class=\"col-md\"><i class=\"fa fa-history\"></i> Last Run</div>\r\n <div class=\"col-md\"><i class=\"fa fa-user\"></i> User ID</div>\r\n <div class=\"col-md\"><i class=\"fa fa-globe\"></i> Time Zone</div>\r\n <div class=\"col-md\"><i class=\"fa fa-cogs\"></i> Actions</div>\r\n </div>\r\n\r\n <div data-bind=\"foreach: { data: Schedules, as: 'item' }\">\r\n <div class=\"row border-bottom py-2 align-items-center\">\r\n <div class=\"col-md\" data-bind=\"text: item.ScheduleDisplay\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.EmailTo\"></div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: item.Format && item.Format.trim().substring(0,1) === '{'\">\r\n <div data-bind=\"html: item.Format.slice(1,-1).split(',').join('<br>')\"></div>\r\n </div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: !item.Format || item.Format.trim().substring(0,1) !== '{'\">\r\n <div data-bind=\"text: item.Format\"></div>\r\n </div>\r\n <div class=\"col-md\" data-bind=\"text: item.LastRun\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.UserId ? item.UserId : 'N/A'\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.Timezone ? item.Timezone : 'N/A'\"></div>\r\n <div class=\"col-md\">\r\n <button class=\"btn btn-sm btn-danger\" data-bind=\"click: $root.deleteSchedule\">\r\n <i class=\"fa fa-trash\"></i> Delete\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal\" id=\"column-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editColumn()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ColumnName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this column on Reports</p>\r\n <div class=\"form-horizontal\">\r\n\r\n <ul class=\"nav nav-tabs\" role=\"tablist\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#column-main\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">Main Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-foreign\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">Foreign Key Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-filter\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">Filter Options</a></li>\r\n </ul>\r\n <div class=\"tab-content\">\r\n <br />\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"column-main\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" id=\"DisplayName\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Field_Type\" data-bind=\"\">Field Type</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"FieldType_SelectedId\" name=\"FieldType.SelectedId\" data-bind=\"value: FieldType\">\r\n <option value=\"Boolean\">Boolean</option>\r\n <option value=\"DateTime\">Date Time</option>\r\n <option value=\"Varchar\">Varchar</option>\r\n <option value=\"Money\">Money</option>\r\n <option value=\"Int\">Int</option>\r\n <option value=\"Double\">Double</option>\r\n <option value=\"Json\">Json</option>\r\n <option value=\"Date\">Date Only</option>\r\n <option value=\"Time\">Time Only</option>\r\n <option value=\"Percentage\">Percentage</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"FieldType\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Primary_Key\" data-bind=\"\">Primary Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The PrimaryKey field is required.\" id=\"PrimaryKey\" name=\"PrimaryKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:PrimaryKey\"><input name=\"PrimaryKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"PrimaryKey\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Do Not Display</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:DoNotDisplay\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will not be displayed on Report Designer, but can still be used on Global Data Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'Json'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">JSON Data Structure</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <textarea class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" data-bind=\"value: JsonStructure, attr:{placeholder:'Please paste in Sample Json with all columns for this JSON data field'}\" rows=\"5\"></textarea>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"You can paste in a sample Json blob with all the columns you want to use in this field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-filter\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Column is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilter\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will always require the user to pick a filtered value\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Table is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilterForTable\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the report will always require the user to pick a filter value if user picks the column in report\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'DateTime'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Restrict Filter Date Range</label>\r\n <div class=\"col-md-1 col-sm-1\">\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: restrictDateRangeFilter\" />\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\" data-bind=\"if: restrictDateRangeFilter\">\r\n <input class=\"form-control\" type=\"number\" data-bind=\"value: restrictDateRangeNumber\" />\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\" data-bind=\"if: restrictDateRangeFilter\">\r\n <select class=\"form-select\" data-bind=\"value: restrictDateRangeValue\">\r\n <option value=\"Days\">Day(s)</option>\r\n <option value=\"Months\">Month(s)</option>\r\n <option value=\"Years\">Year(s)</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is selected, user will not be able to pick date range larger than this selection\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-foreign\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Foreign Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The ForeignKey field is required.\" id=\"ForeignKey\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys allows friendly selection in Filters using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Foreign Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Tables.availableTables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">Foreign Join</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignJoin_SelectedId\" name=\"ForeignJoin.SelectedId\" data-bind=\"value: ForeignJoin, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">\r\n <option selected=\"selected\" value=\"Inner\">Inner</option>\r\n <option value=\"Left\">Left</option>\r\n <option value=\"Right\">Right</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoin\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Foreign Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignKeyField\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Foreign Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignValueField\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Value field is a Column from the Foreign table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div data-bind=\"if: ForeignKey\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Only for Filter?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignFilterOnly\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Check this option if you would like to use this for Filtering only, and not for SQL Joins\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"alert alert-info\">\r\n You can setup a cascading filter by setting up a parent for the foreign key below\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Setup Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentKey\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent allows cascading dropdown selection in Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignParentKey(), attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Parent Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: ForeignJoinTable, visible:ForeignParentKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoinTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeId'}\">Parent Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentKeyField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeId\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Key field is a Column from the Parent table which is used as the key in cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Parent Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentValueField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Value field is a Column from the Parent table which is used to display the value to the User in the Report Designer for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Foreign Key Filter Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentApplyTo, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign Key Filter Value field is a Column from the Foreign table where the selected parent filter will be applied for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--<div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Require Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentRequired\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent can be optional or set to required for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>Manage Role Access\r\n </button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"joinModal\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Joins Diagram</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\" style=\"max-height:800px;overflow:auto;\">\r\n <div id=\"joinDiagram\" style=\"width:2000px;height:1200px;position:relative;border:1px solid #ccc;\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"procedure-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Stored Proc</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <label class=\"col-md-2 control-label\">\r\n Search for\r\n </label>\r\n <div class=\"col-md-6\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: searchProcedureTerm\" placeholder=\"Search stored procedures by name\" />\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: searchStoredProcedure\">Search</button>\r\n </div>\r\n </div>\r\n <br />\r\n <div class=\"menu g-3\" style=\"margin-left: 20px;\" data-bind=\"foreach: foundProcedures\">\r\n <div class=\"menu-category card\" style=\"float:left\">\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, true);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bs-toggle=\"collapse\" data-bind=\"attr: {'data-bs-target': '#sp_'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'sp_'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n Display Name<br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span><br />\r\n Default Value: <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"parameter-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editParameter()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ParameterName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this parameter on Reports</p>\r\n <div class=\"form-horizontal\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Default Value</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Hidden Parameter</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: Hidden, enable: ParameterValue\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Required</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:Required\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Use Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Using lookup table allows friendly selection in report using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Procedures.tables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Lookup Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Lookup Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Lookup Value field is a Column from the Lookup table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n <div class=\"modal\" id=\"role-access-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editAllowedRoles\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Manage Access by Roles</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n <div data-bind=\"if: $root.allRoles().length === 0\">\r\n <div class=\"alert alert-warning\">\r\n <strong>No roles available.</strong> Please add roles first.\r\n </div>\r\n </div>\r\n <div data-bind=\"if: $root.allRoles().length > 0\">\r\n <div class=\"list-group\" data-bind=\"foreach: $root.allRoles\">\r\n <div class=\"list-group-item\" style=\"padding: 2px 10px;\">\r\n <label>\r\n <input type=\"checkbox\"\r\n data-bind=\"value: $data,\r\n checked: $root.editAllowedRoles().AllowedRoles\" />\r\n <span data-bind=\"text: $data\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"category-manage-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: manageCategories\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories for <span data-bind=\"text: TableName\"></span></b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"visble: $root.Categories().lenth == 0\">\r\n No categories have been set up yet.\r\n </div>\r\n <div class=\"list-group\" data-bind=\"foreach: $root.Categories\">\r\n <div class=\"checkbox list-group-item\" style=\"padding-top: 2px; padding-bottom: 2px;\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: $parent.Categories, checkedValue: $data\" />\r\n <span data-bind=\"text: Name\"></span> <!-- Display category name -->\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<div class=\"modal\" id=\"category-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories</b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>\r\n You can organize the display of tables in the Report Designer by assigning categories here.\r\n </p>\r\n <!-- Table for Categories -->\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Category Name</th>\r\n <th>Description</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: $root.Categories\">\r\n <tr>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Name, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-name\" data-bind=\"text: Name, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-name-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Description, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-desc\" data-bind=\"text: Description, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-desc-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td class=\"d-flex\">\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() !== $index() && Id !== 0, click: function() { $root.toggleEdit($index()) }\">\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() === $index() && Id !== 0, click: function() { $root.saveCategory($index()) }\" style=\"margin-left: 5px;\">\r\n <i class=\"fa fa-save\"></i>\r\n </button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: $root.removeCategory\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryName\" placeholder=\"Category Name\">\r\n </td>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryDescription\" placeholder=\"Description\">\r\n </td>\r\n <td>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $root.addCategory\">Add</button>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $root.saveCategories\">Save</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"add-connection-modal\" role=\"dialog\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: newDataConnection\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\"><span data-bind=\"text: $root.editingDataConnection() ? 'Edit' : 'Add a new'\"></span> Data Connection</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Name is required.\" type=\"text\" data-bind=\"value: Name\" placeholder=\"\" id=\"add-conn-name\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Key is required.\" type=\"text\" data-bind=\"value: ConnectionKey\" placeholder=\"\" id=\"add-conn-key\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is the Connection Key in your application settings for your SQL Connection String\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-9 col-sm-9\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: UseSchema\">\r\n Use Schema\r\n </label>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Use Schema in SQL when building query\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"hidden: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-12\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: copySchema\">\r\n Copy Schema from existing Connection\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: copySchema\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Choose Connection</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" style=\"max-width: 300px;\" data-bind=\"options: $root.DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: copyFrom\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.updateDataConnection, visible: $root.editingDataConnection()\">Update</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.addDataConnection, visible: !$root.editingDataConnection()\">Create</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"data-preview-modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <div class=\"modal-content\" data-bind=\"with: previewData\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Preview Table</h4>\r\n <button type=\"button\" class=\"btn-close pull-right\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div style=\"overflow-x: auto; max-height: 500px; overflow-y: auto;\">\r\n <table class=\"table table-striped table-hover table-condensed\">\r\n <thead style=\"position: sticky; top: -1px; z-index: 2; background-color: #f8f9fa;\">\r\n <tr data-bind=\"foreach: Columns\">\r\n <th>\r\n <span data-bind=\"text: ColumnName, attr: { title: DataType.replace('System.', '') }\"></span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: Rows\">\r\n <tr data-bind=\"foreach: Items\">\r\n <td>\r\n <span data-bind=\"html: FormattedValue\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"custom-sql-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"with: customSql\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Enter Select SQL for your Data</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\" data-bind=\"validationElement: customTableName\">\r\n <label for=\"custom-table-name\">Custom Table Name</label>\r\n <input type=\"text\" class=\"form-control\" name=\"customTableName\" placeholder=\"Enter table name\" data-bind=\"textInput: customTableName\" required>\r\n <div class=\"invalid-feedback\">Custom Table Name is required.</div>\r\n </div>\r\n <div data-bind=\"visible: useAi\">\r\n <p id=\"query-input\" class=\"query-input\">\r\n Show me&nbsp;\r\n </p>\r\n <button data-bind=\"click: buildSqlUsingAi\" class=\"btn btn-primary btn-sm\">Process with ChatGPT</button>\r\n <button data-bind=\"click: textQuery.resetQuery\" class=\"btn btn-secondary btn-sm\">Start over</button>\r\n <hr />\r\n </div>\r\n\r\n <div class=\"form-group\" data-bind=\"validationElement: customSql\">\r\n <label for=\"custom-sql\">Custom SQL</label> |\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: dynamicColumns\">\r\n <span title=\"Setup a table that returns dynamic columns to pick from\">Table with Dynamic Columns</span>\r\n </label> |\r\n <a href=\"#\" data-bind=\"click: beautifySql\">Beautify Sql</a>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"customSql\" data-bind=\"textInput: customSql\" required></textarea>\r\n <div class=\"invalid-feedback\">Custom SQL is required.</div>\r\n\r\n <div data-bind=\"if: dynamicColumns\">\r\n <label>Add SQL code to use the dynamic column</label>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"columnTranslation\" data-bind=\"textInput: columnTranslation\" required></textarea>\r\n <label>Pick Values Table</label>\r\n <select class=\"form-select input-medium\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', optionsValue: 'Id', optionsCaption: 'Choose Values Table...', value: dynamicValuesTableId\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: executeSql\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Tables/Views Json File Modal -->\r\n<div class=\"modal\" id=\"uploadTablesFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadTablesFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageTablesJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadTablesFileModalLabel\">Import Tables/Views (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerTablesFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"tablesFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleTablesFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Tables/Views File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadTablesFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Joins Json File Modal -->\r\n<div class=\"modal\" id=\"uploadJoinsFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadJoinsFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJoinsJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadJoinsFileModalLabel\">Import Joins (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerJoinsFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"joinsFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleJoinsFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Joins File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadJoinsFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import StoredProcedures Json File Modal -->\r\n<div class=\"modal\" id=\"uploadStoredProceduresFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadStoredProceduresFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageStoredProceduresJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadStoredProceduresFileModalLabel\">Import Stored Procedures (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerStoredProceduresFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"storedProceduresFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleStoredProceduresFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Stored Procedures File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadStoredProceduresFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"searchModal\" tabindex=\"-1\" aria-hidden=\"true\" data-bind=\"with: $root\">\r\n <div class=\"modal-dialog modal-xl modal-dialog-scrollable\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Bulk Manage Reports Access and Export</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"d-flex gap-2 mb-4 align-items-center\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Reports\"\r\n data-bind=\"value: searchQuery, valueUpdate: 'input'\">\r\n <button class=\"btn btn-sm btn-outline-primary flex-shrink-0\" title=\"Select all Filtered\"\r\n data-bind=\"click: selectAllFiltered\">\r\n Select All\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary flex-shrink-0\" title=\"Deselect all Filtered\"\r\n data-bind=\"click: deselectAllFiltered\">\r\n Deselect All\r\n </button>\r\n </div>\r\n <div data-bind=\"foreach: filteredReportsAndFolders\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header\">\r\n <div class=\"d-flex fw-bold\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: allReportsSelected\">\r\n <span data-bind=\"text: folder\"></span>\r\n </div>\r\n <div class=\"w-25\">View</div>\r\n <div class=\"w-25\">Manage</div>\r\n <div class=\"w-25\">Delete</div>\r\n <div class=\"w-25\">Client ID</div>\r\n </div>\r\n </div>\r\n <!-- Reports List -->\r\n <ul class=\"list-group list-group-flush\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: isSelected\">\r\n <span data-bind=\"text: reportName\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole ? viewOnlyUserRole: 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole ? userRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole ? deleteOnlyUserRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId ? clientId : 'Any User'\"></span>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <div class=\"p-2 text-muted\" data-bind=\"visible: reports.length === 0\">\r\n No matching reports found\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-success\" data-bind=\"click: exportFoldersReportJson\">Export Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.openApplySecurityModal, enable: $root.anyReportSelected\">Apply Security to All Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.deleteSelectedItems, enable: $root.anyReportSelected\">Delete All Selected</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"applySecurityModal\" tabindex=\"-1\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"if: $root.anyReportSelected\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Apply Security to All Selected</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"template: { name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.applySecurityToAll\">Apply to All</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import Json File Modal -->\r\n<div class=\"modal\" id=\"uploadFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadFileModalLabel\">Import previously Exported Reports</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"alert alert-info small\">\r\n <strong>Instructions:</strong><br />\r\n \u2022 Select a <code>.json</code> file previously exported from Dotnet Report.<br />\r\n \u2022 The file may include multiple reports and their folders.<br />\r\n \u2022 Any missing folders will be created automatically.<br />\r\n \u2022 If a report with the same name already exists, you will be prompted to:\r\n <em>Skip</em>, <em>Overwrite</em>, or <em>Make a Copy</em>.<br />\r\n \u2022 Once uploaded, all imported reports will be available immediately.\r\n </div>\r\n\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n Click here to select a JSON file\r\n </div>\r\n\r\n <input type=\"file\" id=\"fileInputJson\" accept=\".json\" style=\"display: none;\"\r\n data-bind=\"event: { change: handleFileSelect }\">\r\n\r\n <div class=\"mt-3\" data-bind=\"visible: fileName\">\r\n <p><strong>Selected File:</strong> <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Templates -->\r\n<div [innerHtml]=\"reportTemplates\"></div>\r\n<!-- Templates -->", styles: [".glyphicon-ok:before{content:\"\\f00c\"}.glyphicon-remove:before{content:\"\\f00d\"}.glyphicon{display:inline-block;font: 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\n"] });
3183
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DotnetsetupComponent, deps: [{ token: i0.Injector }, { token: i1.DomSanitizer }, { token: i0.ChangeDetectorRef }, { token: BASE_URL_TOKEN }, { token: i2.HttpClient }, { token: i3.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
3184
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DotnetsetupComponent, isStandalone: true, selector: "app-dotnetsetup", ngImport: i0, template: "<div id=\"dot-net-report\" class=\"body-content\">\r\n\r\n<div>\r\n <h2>Manage Database</h2>\r\n <p>\r\n You can select and manage display names for the Tables and Columns you would like to allow in Dotnet Report Builder.\r\n </p>\r\n <div class=\"alert alert-danger d-flex justify-content-between align-items-center\">\r\n <div>\r\n Do not expose this Setup Tool to end users who should not have access to it. Ideally, only Developers should be given access to this utility.\r\n </div>\r\n <button class=\"btn btn-primary ms-3\" data-bind=\"click: refreshAll\" title=\"Reload all Table and Columns\">\r\n <i class=\"fa fa-refresh\"></i> Refresh\r\n </button>\r\n </div>\r\n\r\n <div data-bind=\"visible: false;\">\r\n Loading...\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <!-- Nav tabs -->\r\n <ul class=\"nav nav-tabs flex-grow-1\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link active\" href=\"#tablesfields\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(false); activeTable(null);}\">\r\n <i class=\"fa fa-database\"></i> Database Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#tablesfields\" aria-controls=\"custom\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(true); activeTable(null); }\">\r\n <i class=\"fa fa-table\"></i> Custom Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#relations\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-link\"></i> Relations\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#procedure\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-code\"></i> Stored Procs\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#schedules\" aria-controls=\"schedules\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-clock-o\"></i> Schedules\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\" style=\"display: none;\">\r\n <a class=\"nav-link\" href=\"#functions\" aria-controls=\"functions\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-cogs\"></i> Custom Functions\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#manageaccess\" aria-controls=\"manageaccess\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-folder\"></i> Manage Reports\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#connection\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-plug\"></i> Data Connection\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <br />\r\n</div>\r\n<!-- Tab panes -->\r\n<div class=\"fix-content\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"tab-content\">\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"connection\">\r\n <b>Manage Data Connection</b>\r\n <p>\r\n Data Connection groups data schemas (including tables and stored procedures and other configuration), Reports, and Dashboards into a single environment. You can create multiple Data Connections and easily switch between them for separate environment management.\r\n </p>\r\n <hr />\r\n <div class=\"form-row\" data-bind=\"visible: true\">\r\n <div class=\"form-group\">\r\n <div class=\"control-group\">\r\n <select class=\"form-select\" style=\"width:25%\" data-bind=\"options: DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: currentConnectionKey\"></select>\r\n <div class=\"padded-top\"></div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: false\" data-bs-toggle=\"modal\" data-bs-target=\"#connection-setup-modal\">Manage DB Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: switchConnection, visible: canSwitchConnection\">Switch Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: editDataConnectionModal, hidden: canSwitchConnection\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Edit Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: newDataConnectionModal\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Add New Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: exportAll, visible: false\">Export Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: importStart, visible: false\">Import Connection</button>\r\n </div>\r\n <div data-bind=\"visible: importingFile\">\r\n <br />\r\n <div class=\"alert alert-info\">\r\n Please select a file you have previously exported from this utility. The system will load the screen with the Data Connection setting in the file, however, it will <b>NOT</b> be saved until you press the Save All button or Save individual tables\r\n <br />\r\n <div class=\"input-group\">\r\n <input type=\"file\" accept=\".json\" id=\"import-file\" data-bind=\"event: { change: function() { importFile($element.files[0]) } }\" />\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-link\" data-bind=\"click: importCancel\">Cancel</button>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <br />\r\n <br />\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Account Level Settings</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div data-bind=\"with: settings\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Admin Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useClientIdInAdmin\" data-bind=\"checked: useClientIdInAdmin\">\r\n <label class=\"form-check-label\" for=\"useClientIdInAdmin\">Use Client ID in Admin mode</label>\r\n <small class=\"text-muted d-block\">Enable this to respect client IDs even when in admin mode.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlBuilderInAdminMode\" data-bind=\"checked: useSqlBuilderInAdminMode\">\r\n <label class=\"form-check-label\" for=\"useSqlBuilderInAdminMode\">Use SQL Builder in Admin Mode</label>\r\n <small class=\"text-muted d-block\">Allows SQL query builder access <b>only</b> in admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Customization</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlCustomField\" data-bind=\"checked: useSqlCustomField\">\r\n <label class=\"form-check-label\" for=\"useSqlCustomField\">Use SQL in Custom Field</label>\r\n <small class=\"text-muted d-block\">Allows the use of SQL expressions in custom fields.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: usePromptBuilder\">\r\n <label class=\"form-check-label\">Use AI aided, prompt based Report Builder</label>\r\n <small class=\"text-muted d-block\">Let non Admin users create reports using the AI aided Prompt based builder</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPivot\">\r\n <label class=\"form-check-label\">Pivot with Drilldown</label>\r\n <small class=\"text-muted d-block\">Use alternate Pivot method that doesn\u2019t use SQL\u2019s PIVOT.<br>Allows drilldown, but may be slower.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Report Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToCreateReports\" data-bind=\"checked: allowUsersToCreateReports\">\r\n <label class=\"form-check-label\" for=\"allowUsersToCreateReports\">Allow All Users to Create Reports</label>\r\n <small class=\"text-muted d-block\">Permits users to generate and customize reports.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showImportExport\">\r\n <label class=\"form-check-label\">Allow All Users to export/import\u00A0reports</label>\r\n <small class=\"text-muted d-block\">\r\n Allow non admin users to export and import Reports in the system.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Folder Options</h6>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noFolders\" data-bind=\"checked: noFolders\">\r\n <label class=\"form-check-label\" for=\"noFolders\">No Folders</label>\r\n <small class=\"text-muted d-block\">Disables the use of folders in the application.</small>\r\n </div>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noDefaultFolder\" data-bind=\"checked: noDefaultFolder\">\r\n <label class=\"form-check-label\" for=\"noDefaultFolder\">No Default Folder</label>\r\n <small class=\"text-muted d-block\">Removes the Default folder.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showEmptyFolders\">\r\n <label class=\"form-check-label\">Show Empty Folders</label>\r\n <small class=\"text-muted d-block\">Will show empty folders for non admin users.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToManageFolders\" data-bind=\"checked: allowUsersToManageFolders\">\r\n <label class=\"form-check-label\" for=\"allowUsersToManageFolders\">Allow All Users to Manage Folders</label>\r\n <small class=\"text-muted d-block\">Grants permission to organize and manage folders without admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Export Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPdf\">\r\n <label class=\"form-check-label\">PDF Export without Chromium</label>\r\n <small class=\"text-muted d-block\">Use alternate PDF export method that doesn\u2019t rely on Chromium.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontXmlExport\">\r\n <label class=\"form-check-label\">Hide XML Export option</label>\r\n <small class=\"text-muted d-block\">Remove XML Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontWordExport\">\r\n <label class=\"form-check-label\">Hide Word Export option</label>\r\n <small class=\"text-muted d-block\">Remove Word Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showPageSize\">\r\n <label class=\"form-check-label\">Show Page Size on PDF & Word export</label>\r\n <small class=\"text-muted d-block\">Display document dimensions in exported PDF & Word.</small>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"button\" id=\"saveAppSettings\" class=\"btn btn-primary\" data-bind=\"click: saveAppSettings\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"tablesfields\">\r\n <b data-bind=\"text: customTableMode() ? 'Custom Tables' : 'Database Tables'\"></b>\r\n <p>\r\n <span data-bind=\"visible: $root.customTableMode\">\r\n Define Custom Tables using SQL Select Query to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n <span data-bind=\"hidden: $root.customTableMode\">\r\n Select Tables or Views from your Database to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n </p>\r\n\r\n <div data-bind=\"with: Tables\">\r\n <input type=\"text\" class=\"form-control input-sm\" placeholder=\"Filter Tables...\" data-bind=\"value: tableFilter, valueUpdate: 'afterkeydown'\" style=\"float: left; width: 180px; margin-right: 5px;\">\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: clearTableFilter, visible: tableFilter()!='' && tableFilter()!=null\"><span class=\"fa fa-remove\"></span></button>\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: toggleShowAll, hidden: $root.customTableMode() || $root.onlyApi(), text: usedOnly() ? 'Show all' : 'Show used only'\">Show used only</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.customSql.addNewCustomSqlTable, visible: $root.customTableMode\">Add New Custom Table</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.loadFromDatabase, hidden: $root.customTableMode() || !$root.onlyApi()\">\r\n <span class=\"fa fa-database\"></span> Load all Database Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.visualizeJoins\"><span class=\"fa fa-arrows-h\"></span> Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(true) }, visible: $root.customTableMode\">\r\n <span class=\"fa fa-download\"></span> Export Custom Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(false) }, visible: !$root.customTableMode()\">\r\n <span class=\"fa fa-download\"></span> Export Tables/Views\r\n </button>\r\n\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadTablesFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Tables/Views\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" title=\"Manage Categories\" data-bs-toggle=\"modal\" data-bs-target=\"#category-modal\">\r\n <span class=\"fa fa-server\"></span> Manage Categories\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: selectAll, visible: !$root.onlyApi()\">\r\n <span class=\"fa fa-check\"></span> Select All Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { $root.saveChanges($root.customTableMode()) }\">\r\n <span class=\"fa fa-floppy-o\"></span> Save All Tables\r\n </button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n\r\n <div class=\"row\">\r\n <div data-bind=\"ifnot: $root.customTableMode\">\r\n <div class=\"alert alert-info\">\r\n <span data-bind=\"text: Tables.model().filter(t => !t.CustomTable()).length\"></span> Tables/Views\r\n <span data-bind=\"text: $root.onlyApi() ? 'configured and used' : 'read from database'\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"menu g-3\" data-bind=\"foreach: pagedTables\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"checkbox pull-left\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName,attr: { title: TableName }, click: function() { $root.activeTable($data); }\" class=\"table-name-label\" style=\"cursor: pointer\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeTable($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-3\">\r\n <div class=\"d-flex flex-column col-md-12\" data-bind=\"with: pager\">\r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"tableDetails\">\r\n <div data-bind=\"visible: pagedTables().length === 0\">\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">No <span data-bind=\"visible: $root.customTableMode\">Custom </span> Tables added yet, click \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\" to get started!</div>\r\n </div>\r\n\r\n <div data-bind=\"visible: !activeTable() && pagedTables().length > 0\">\r\n <br />\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">Select a <span data-bind=\"visible: $root.customTableMode\">Custom </span> Table, or \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\"</div>\r\n </div>\r\n\r\n <div data-bind=\"with: activeTable\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i> Preview Data\r\n </button>\r\n <button class=\"btn btn-sm btn-danger\" title=\"Delete this Table\" data-bind=\"click: function() { deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-trash\"></i> Remove Table\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Category\" data-bs-toggle=\"modal\" data-bs-target=\"#category-manage-modal\" data-bind=\"click: $root.selectedCategory\">\r\n <i class=\"fa fa-gear\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Table\" data-bind=\"click: function() { exportTableJson(); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <p style=\"display: none;\">\r\n <!-- deprecated -->\r\n <label class=\"label-sm\">Account Id Field</label><br />\r\n <span data-bind=\"editable: AccountIdField\"></span>\r\n </p>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: DoNotDisplay\">\r\n Do Not Display\r\n </label>\r\n </div>\r\n <div data-bind=\"if: CustomTable\">\r\n <button class=\"btn btn-sm btn-secondary\" data-bind=\"click: $root.customSql.viewCustomSql.bind($data)\">View Custom SQL</button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-end gap-2\">\r\n <label class=\"label-sm m-0\"><span data-bind=\"text: Columns().length\"></span> Columns</label>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: autoFormat, visible: Selected\">Auto Format</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: unselectAllColumns, visible: Selected\">Unselect All</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: selectAllColumns, visible: Selected\">Select All</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"list-group\" data-bind=\"sortable: { data: Columns, options: { handle: '.sortable', cursor: 'move' }, afterMove: $root.Tables.columnSorted }\">\r\n <div class=\"list-group-item\">\r\n <div data-bind=\"if: $parent.DynamicColumns()\">\r\n <span data-bind=\"html: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n </div>\r\n <div class=\"checkbox\" data-bind=\"if: !$parent.DynamicColumns()\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected, enable: $parent.Selected()\">\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n <label data-bind=\"visible: PrimaryKey\" class=\"badge text-bg-primary\">Primary</label>\r\n <label data-bind=\"visible: ForeignKey\" class=\"badge text-bg-info text-white\">Foreign</label>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, false)\">...</button>\r\n <div class=\"btn btn-sm pull-right sortable\">\r\n <span class=\"fa fa-arrows\" aria-hidden=\"true\" title=\"Drag to reorder\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"relations\">\r\n <b>Relations</b>\r\n <p>\r\n Setup your Database Relations for Dotnet Report to produce dynamic queries\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddAllRelations\">Auto Add Joins</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddJoin\">Add new Join</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: SaveJoins\">Save Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: visualizeJoins\">Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: DeleteVisibleJoins\" title=\"Delete filtered Joins\">Delete Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: ExportJoins\" title=\"Export filtered Joins\">Export Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadJoinsFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-upload\"></span> Import Joins\r\n </button>\r\n <hr />\r\n <div id=\"form-joins\">\r\n <div class=\"alert alert-warning\" data-bind=\"visible: isDirty\">\r\n You have unsaved changes. Please be sure to click <b>Save Joins</b> to save your changes.\r\n </div>\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row fw-bold bg-light border-bottom py-2\" data-bind=\"with: JoinFilters\">\r\n <!-- Repeat for each column header -->\r\n <div class=\"col-md-2\">\r\n Primary Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByPrimaryTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Type\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinType, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinType\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinType() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field<div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Join Row -->\r\n <div class=\"row bg-info bg-opacity-25 p-2\" data-bind=\"visible: showNewJoinRow\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: Tables.availableTables, optionsText: 'DisplayName', value: NewJoin().JoinTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsCaption: 'Pick a field...', optionsValue: 'ColumnName', value: $root.NewJoin().FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: NewJoin().JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: NewJoin().OtherTables, optionsText: 'DisplayName', value: NewJoin().OtherTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $root.NewJoin().JoinFieldName, optionsCaption: 'Pick a field...'\"></select>\r\n </div>\r\n <div class=\"col-md-2 text-end\">\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"click: ConfirmAddJoin\">+ Add Join</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Existing Join Rows -->\r\n <div data-bind=\"foreach: pagedJoins\">\r\n <div class=\"row align-items-center border-bottom py-2\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', value: JoinTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: OtherTables, optionsText: 'DisplayName', value: OtherTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.JoinFieldName\"></select>\r\n </div>\r\n\r\n <div class=\"col-md-2 text-end\">\r\n <span class=\"badge bg-warning text-dark me-2\"\r\n data-bind=\"visible: isNew\"\r\n data-bs-toggle=\"tooltip\"\r\n title=\"New record added or imported, not saved yet\">\r\n <i class=\"fa fa-warning\"></i> New\r\n </span>\r\n\r\n <button class=\"btn btn-secondary btn-sm\" data-bind=\"click: DeleteJoin\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\"> \r\n <div class=\"d-flex flex-row align-items-center col-md-12\" data-bind=\"with: joinsPager\"> \r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n </div>\r\n <div id=\"procedure\" class=\"tab-pane\">\r\n <b>Stored Procedures</b>\r\n <p>\r\n Select and manage Stored Procedures to use in Dotnet Report for more complex and coded Reports\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#procedure-modal\"><span class=\"fa fa-plus\"></span> Add Stored Procs from database</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadStoredProceduresFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Stored Procedures\r\n </button>\r\n <hr />\r\n <div data-bind=\"if: Procedures.savedProcedures().length == 0\">\r\n <br />\r\n No Stored Procedures have been setup yet.\r\n </div>\r\n <div class=\"row\" data-bind=\"if: Procedures.savedProcedures().length > 0\">\r\n <!-- Left Panel for Stored Procedure Names -->\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <div class=\"menu g-3\" data-bind=\"foreach: Procedures.savedProcedures\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName, click: function() { $root.activeProcedure($data); }\" style=\"cursor: pointer\"></span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span>\r\n </button>\r\n </div>\r\n <!-- Click to activate procedure -->\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeProcedure($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Panel for Stored Procedure Details -->\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"procDetails\">\r\n <div data-bind=\"with: activeProcedure\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5 data-bind=\"text: TableName\"></h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span> Delete\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Procedure\" data-bind=\"click: function() { $root.exportProcedureJson($data.TableName); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <label class=\"small\">Columns</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, true)\">...</button>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ParameterName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span>\r\n &nbsp;&nbsp;\r\n <button class=\"btn btn-sm btn-primary pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#parameter-modal\" title=\"All Parameter options\" data-bind=\"click: $root.editParameter\">...</button>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div id=\"manageaccess\" class=\"tab-pane\">\r\n <ul class=\"nav nav-tabs\" id=\"accessTabs\" role=\"tablist\">\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link active\" id=\"reports-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#reportsAccess\" type=\"button\" role=\"tab\">Reports Access</button>\r\n </li>\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link\" id=\"folders-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#foldersAccess\" type=\"button\" role=\"tab\">Folders Access</button>\r\n </li>\r\n </ul>\r\n <div class=\"tab-content mt-3\">\r\n <div class=\"tab-pane fade show active\" id=\"reportsAccess\" role=\"tabpanel\" aria-labelledby=\"reports-tab\">\r\n <b>Reports Access</b>\r\n <p>You can setup access to individual Reports here</p>\r\n <div class=\"mb-2 d-flex gap-2\">\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { exportFoldersReportJson() }\">\r\n <span class=\"fa fa-download\"></span> Export Selected Reports Access\r\n </button>\r\n </div> \r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadFileModal\">\r\n <span class=\"fa fa-upload\"></span> Import Reports\r\n </button>\r\n </div>\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#searchModal\">\r\n <span class=\"fa fa-tasks\"></span> Bulk Actions\r\n </button>\r\n </div>\r\n </div>\r\n <hr />\r\n <div data-bind=\"foreach: reportsAndFolders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n data-bind=\"checked: allReportsSelected\">\r\n <label>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folder-' + folderId }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: folder\"></span>\r\n </a>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folder-' + folderId }\">\r\n <div data-bind=\"if: reports.length == 0\">\r\n No Reports found in this folder\r\n </div>\r\n <ul class=\"list-group\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" data-bind=\"checked: isSelected\" />\r\n <label class=\"list-group-item-heading\">\r\n <span class=\"fa\" data-bind=\"css: {'fa-file': reportType=='List', 'fa-th-list': reportType=='Summary', 'fa-bar-chart': reportType=='Bar', 'fa-pie-chart': reportType=='Pie', 'fa-line-chart': reportType=='Line', 'fa-globe': reportType =='Map'}\" style=\"font-size: 14pt; color: #808080\"></span>\r\n <span data-bind=\"text: reportName\"></span>\r\n </label>\r\n </div>\r\n <p class=\"list-group-item-text small\" data-bind=\"text: reportDescription\"></p>\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Report Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: userId() ? userId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (viewOnlyUserId() ? viewOnlyUserId() : (userId() ? userId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: deleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: userRole()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole() ? userRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: viewOnlyUserRole()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole() ? viewOnlyUserRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: deleteOnlyUserRole()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole() ? deleteOnlyUserRole() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId() ? clientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tab-pane fade\" id=\"foldersAccess\" role=\"tabpanel\" aria-labelledby=\"folders-tab\">\r\n <b>Folders Access</b>\r\n <p>You can setup access to individual Folders here</p>\r\n <hr />\r\n <div data-bind=\"foreach: Folders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folderAccess-' + Id }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: FolderName\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folderAccess-' + Id }\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Folder Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserId()? UserId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (ViewOnlyUserId() ? ViewOnlyUserId() : (UserId() ? UserId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: DeleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: UserRoles()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserRoles() ? UserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: ViewOnlyUserRoles()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: ViewOnlyUserRoles() ? ViewOnlyUserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: DeleteOnlyUserRoles()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserRoles() ? DeleteOnlyUserRoles() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: ClientId() ? ClientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeFolderAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeFolderAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveFolderAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"functions\" data-bind=\"with: Functions\">\r\n <b>Custom Functions</b>\r\n <p>\r\n Create and manage Custom Function that you can use in building Reports and Dashboards\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: createNewFunction\">Add new Function</button>\r\n <br />\r\n <hr />\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <input id=\"searchInput\" class=\"form-control mb-2\" type=\"text\" placeholder=\"Search...\" data-bind=\"value: search, valueUpdate: 'input', visible: functions().length > 0\">\r\n <ul class=\"list-group\" data-bind=\"foreach: filteredFunctions\">\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center\">\r\n <span data-bind=\"text: name\"></span>\r\n <div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $parent.selectFunction\">Edit</button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: function() { $parent.deleteFunction($data) }\">Delete</button>\r\n </div>\r\n </li>\r\n </ul>\r\n <div data-bind=\"if: functions().length == 0\">\r\n No Functions found\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" data-bind=\"with: selectedFunction\">\r\n <div style=\"padding-left: 10px;\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Setup Function</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"mb-3\" data-bind=\"validationElement: functionName\">\r\n <label for=\"functionName\" class=\"form-label\">Function Name</label>\r\n <input id=\"functionName\" class=\"form-control\" required data-bind=\"value: name, valueUpdate: 'input'\" />\r\n <div class=\"invalid-feedback\">Function Name is required.</div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionType\" class=\"form-label\">Function Type</label>\r\n <select id=\"functionType\" class=\"form-control\" data-bind=\"value: functionType, event: { change: $parent.updateCodeEditorMode }\">\r\n <option value=\"csharp\">C#</option>\r\n <!--<option value=\"javascript\">JavaScript</option>\r\n <option value=\"sql\">SQL</option>-->\r\n </select>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionDescription\" class=\"form-label\">Description</label>\r\n <textarea id=\"functionDescription\" class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Add any helpful description here for the user...\"></textarea>\r\n </div>\r\n\r\n <div>\r\n <b>Arguments</b>\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Display Name</th>\r\n <th>Description</th>\r\n <th>Data Type</th>\r\n <th>Required</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: parameters\">\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" data-bind=\"value: parameterName, valueUpdate: 'input'\" />\r\n <span class=\"text-danger\" data-bind=\"visible: name.hasError, text: name.validationMessage\"></span>\r\n </td>\r\n <td><input class=\"form-control\" data-bind=\"value: displayName, valueUpdate: 'input'\" /></td>\r\n <td><input class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Friendly description for user...\" /></td>\r\n <td>\r\n <select class=\"form-select\" data-bind=\"value: datatype\">\r\n <option>object</option>\r\n <option>string</option>\r\n <option>int</option>\r\n <option>float</option>\r\n <option>bool</option>\r\n </select>\r\n </td>\r\n <td><input type=\"checkbox\" data-bind=\"checked: required\" /></td>\r\n <td><button class=\"btn btn-sm btn-danger\" data-bind=\"click: $parent.removeParameter\">Remove</button></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: addParameter\">Add Argument</button>\r\n </div>\r\n <br />\r\n <div class=\"mb-3\">\r\n <label for=\"codeEditor\" class=\"form-label\">Write the <b>Code</b> for the function below:</label>\r\n <div style=\"border: 1px solid\">\r\n <textarea id=\"codeEditor\" class=\"code-editor form-control\" data-bind=\"value: code\"></textarea>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $parent.saveFunction\">Save</button>\r\n <button class=\"btn btn-secondary\" data-bind=\"click: $parent.cancelEdit\">Cancel</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"schedules\">\r\n <b>Scheduled Reports</b>\r\n <p>\r\n View Schedules setup for sending Reports and Dashboards\r\n </p>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div data-bind=\"visible: schedules().length === 0\">\r\n <i class=\"fa fa-exclamation-circle\"></i> No scheduled Reports or Dashboards available.\r\n </div>\r\n <div class=\"container-fluid\" data-bind=\"if: schedules().length > 0\">\r\n <div data-bind=\"foreach: schedules\">\r\n <div class=\"row border-bottom py-2\">\r\n <div class=\"col-12\">\r\n For <span class=\"text-muted\" data-bind=\"text: DashboardId === 0 ? 'Report' : 'Dashboard'\"></span>\r\n <b><span data-bind=\"text: Name\"></span></b>\r\n </div>\r\n </div>\r\n\r\n <!-- Inner schedule items -->\r\n <div class=\"row fw-bold bg-light py-2 d-none d-md-flex\">\r\n <div class=\"col-md\"><i class=\"fa fa-clock-o\"></i> Schedule</div>\r\n <div class=\"col-md\"><i class=\"fa fa-envelope\"></i> Email To</div>\r\n <div class=\"col-md\"><i class=\"fa fa-file\"></i> Format</div>\r\n <div class=\"col-md\"><i class=\"fa fa-history\"></i> Last Run</div>\r\n <div class=\"col-md\"><i class=\"fa fa-user\"></i> User ID</div>\r\n <div class=\"col-md\"><i class=\"fa fa-globe\"></i> Time Zone</div>\r\n <div class=\"col-md\"><i class=\"fa fa-cogs\"></i> Actions</div>\r\n </div>\r\n\r\n <div data-bind=\"foreach: { data: Schedules, as: 'item' }\">\r\n <div class=\"row border-bottom py-2 align-items-center\">\r\n <div class=\"col-md\" data-bind=\"text: item.ScheduleDisplay\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.EmailTo\"></div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: item.Format && item.Format.trim().substring(0,1) === '{'\">\r\n <div data-bind=\"html: item.Format.slice(1,-1).split(',').join('<br>')\"></div>\r\n </div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: !item.Format || item.Format.trim().substring(0,1) !== '{'\">\r\n <div data-bind=\"text: item.Format\"></div>\r\n </div>\r\n <div class=\"col-md\" data-bind=\"text: item.LastRun\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.UserId ? item.UserId : 'N/A'\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.Timezone ? item.Timezone : 'N/A'\"></div>\r\n <div class=\"col-md\">\r\n <button class=\"btn btn-sm btn-danger\" data-bind=\"click: $root.deleteSchedule\">\r\n <i class=\"fa fa-trash\"></i> Delete\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal\" id=\"column-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editColumn()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ColumnName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this column on Reports</p>\r\n <div class=\"form-horizontal\">\r\n\r\n <ul class=\"nav nav-tabs\" role=\"tablist\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#column-main\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">Main Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-foreign\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">Foreign Key Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-filter\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">Filter Options</a></li>\r\n </ul>\r\n <div class=\"tab-content\">\r\n <br />\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"column-main\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" id=\"DisplayName\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Field_Type\" data-bind=\"\">Field Type</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"FieldType_SelectedId\" name=\"FieldType.SelectedId\" data-bind=\"value: FieldType\">\r\n <option value=\"Boolean\">Boolean</option>\r\n <option value=\"DateTime\">Date Time</option>\r\n <option value=\"Varchar\">Varchar</option>\r\n <option value=\"Money\">Money</option>\r\n <option value=\"Int\">Int</option>\r\n <option value=\"Double\">Double</option>\r\n <option value=\"Json\">Json</option>\r\n <option value=\"Date\">Date Only</option>\r\n <option value=\"Time\">Time Only</option>\r\n <option value=\"Percentage\">Percentage</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"FieldType\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Primary_Key\" data-bind=\"\">Primary Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The PrimaryKey field is required.\" id=\"PrimaryKey\" name=\"PrimaryKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:PrimaryKey\"><input name=\"PrimaryKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"PrimaryKey\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Do Not Display</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:DoNotDisplay\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will not be displayed on Report Designer, but can still be used on Global Data Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'Json'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">JSON Data Structure</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <textarea class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" data-bind=\"value: JsonStructure, attr:{placeholder:'Please paste in Sample Json with all columns for this JSON data field'}\" rows=\"5\"></textarea>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"You can paste in a sample Json blob with all the columns you want to use in this field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-filter\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Column is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilter\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will always require the user to pick a filtered value\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Table is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilterForTable\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the report will always require the user to pick a filter value if user picks the column in report\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'DateTime'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Restrict Filter Date Range</label>\r\n <div class=\"col-md-1 col-sm-1\">\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: restrictDateRangeFilter\" />\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\" data-bind=\"if: restrictDateRangeFilter\">\r\n <input class=\"form-control\" type=\"number\" data-bind=\"value: restrictDateRangeNumber\" />\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\" data-bind=\"if: restrictDateRangeFilter\">\r\n <select class=\"form-select\" data-bind=\"value: restrictDateRangeValue\">\r\n <option value=\"Days\">Day(s)</option>\r\n <option value=\"Months\">Month(s)</option>\r\n <option value=\"Years\">Year(s)</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is selected, user will not be able to pick date range larger than this selection\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-foreign\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Foreign Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The ForeignKey field is required.\" id=\"ForeignKey\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys allows friendly selection in Filters using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Foreign Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Tables.availableTables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">Foreign Join</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignJoin_SelectedId\" name=\"ForeignJoin.SelectedId\" data-bind=\"value: ForeignJoin, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">\r\n <option selected=\"selected\" value=\"Inner\">Inner</option>\r\n <option value=\"Left\">Left</option>\r\n <option value=\"Right\">Right</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoin\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Foreign Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignKeyField\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Foreign Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignValueField\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Value field is a Column from the Foreign table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div data-bind=\"if: ForeignKey\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Only for Filter?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignFilterOnly\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Check this option if you would like to use this for Filtering only, and not for SQL Joins\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"alert alert-info\">\r\n You can setup a cascading filter by setting up a parent for the foreign key below\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Setup Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentKey\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent allows cascading dropdown selection in Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignParentKey(), attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Parent Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: ForeignJoinTable, visible:ForeignParentKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoinTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeId'}\">Parent Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentKeyField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeId\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Key field is a Column from the Parent table which is used as the key in cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Parent Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentValueField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Value field is a Column from the Parent table which is used to display the value to the User in the Report Designer for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Foreign Key Filter Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentApplyTo, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign Key Filter Value field is a Column from the Foreign table where the selected parent filter will be applied for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--<div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Require Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentRequired\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent can be optional or set to required for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>Manage Role Access\r\n </button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"joinModal\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Joins Diagram</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\" style=\"max-height:800px;overflow:auto;\">\r\n <div id=\"joinDiagram\" style=\"width:2000px;height:1200px;position:relative;border:1px solid #ccc;\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"procedure-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Stored Proc</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <label class=\"col-md-2 control-label\">\r\n Search for\r\n </label>\r\n <div class=\"col-md-6\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: searchProcedureTerm\" placeholder=\"Search stored procedures by name\" />\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: searchStoredProcedure\">Search</button>\r\n </div>\r\n </div>\r\n <br />\r\n <div class=\"menu g-3\" style=\"margin-left: 20px;\" data-bind=\"foreach: foundProcedures\">\r\n <div class=\"menu-category card\" style=\"float:left\">\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, true);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bs-toggle=\"collapse\" data-bind=\"attr: {'data-bs-target': '#sp_'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'sp_'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n Display Name<br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span><br />\r\n Default Value: <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"parameter-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editParameter()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ParameterName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this parameter on Reports</p>\r\n <div class=\"form-horizontal\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Default Value</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Hidden Parameter</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: Hidden, enable: ParameterValue\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Required</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:Required\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Use Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Using lookup table allows friendly selection in report using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Procedures.tables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Lookup Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Lookup Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Lookup Value field is a Column from the Lookup table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n <div class=\"modal\" id=\"role-access-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editAllowedRoles\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Manage Access by Roles</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n <div data-bind=\"if: $root.allRoles().length === 0\">\r\n <div class=\"alert alert-warning\">\r\n <strong>No roles available.</strong> Please add roles first.\r\n </div>\r\n </div>\r\n <div data-bind=\"if: $root.allRoles().length > 0\">\r\n <div class=\"list-group\" data-bind=\"foreach: $root.allRoles\">\r\n <div class=\"list-group-item\" style=\"padding: 2px 10px;\">\r\n <label>\r\n <input type=\"checkbox\"\r\n data-bind=\"value: $data,\r\n checked: $root.editAllowedRoles().AllowedRoles\" />\r\n <span data-bind=\"text: $data\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"category-manage-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: manageCategories\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories for <span data-bind=\"text: TableName\"></span></b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"visble: $root.Categories().lenth == 0\">\r\n No categories have been set up yet.\r\n </div>\r\n <div class=\"list-group\" data-bind=\"foreach: $root.Categories\">\r\n <div class=\"checkbox list-group-item\" style=\"padding-top: 2px; padding-bottom: 2px;\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: $parent.Categories, checkedValue: $data\" />\r\n <span data-bind=\"text: Name\"></span> <!-- Display category name -->\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<div class=\"modal\" id=\"category-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories</b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>\r\n You can organize the display of tables in the Report Designer by assigning categories here.\r\n </p>\r\n <!-- Table for Categories -->\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Category Name</th>\r\n <th>Description</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: $root.Categories\">\r\n <tr>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Name, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-name\" data-bind=\"text: Name, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-name-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Description, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-desc\" data-bind=\"text: Description, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-desc-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td class=\"d-flex\">\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() !== $index() && Id !== 0, click: function() { $root.toggleEdit($index()) }\">\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() === $index() && Id !== 0, click: function() { $root.saveCategory($index()) }\" style=\"margin-left: 5px;\">\r\n <i class=\"fa fa-save\"></i>\r\n </button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: $root.removeCategory\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryName\" placeholder=\"Category Name\">\r\n </td>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryDescription\" placeholder=\"Description\">\r\n </td>\r\n <td>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $root.addCategory\">Add</button>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $root.saveCategories\">Save</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"add-connection-modal\" role=\"dialog\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: newDataConnection\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\"><span data-bind=\"text: $root.editingDataConnection() ? 'Edit' : 'Add a new'\"></span> Data Connection</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Name is required.\" type=\"text\" data-bind=\"value: Name\" placeholder=\"\" id=\"add-conn-name\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Key is required.\" type=\"text\" data-bind=\"value: ConnectionKey\" placeholder=\"\" id=\"add-conn-key\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is the Connection Key in your application settings for your SQL Connection String\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-9 col-sm-9\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: UseSchema\">\r\n Use Schema\r\n </label>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Use Schema in SQL when building query\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"hidden: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-12\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: copySchema\">\r\n Copy Schema from existing Connection\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: copySchema\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Choose Connection</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" style=\"max-width: 300px;\" data-bind=\"options: $root.DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: copyFrom\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.updateDataConnection, visible: $root.editingDataConnection()\">Update</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.addDataConnection, visible: !$root.editingDataConnection()\">Create</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"data-preview-modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <div class=\"modal-content\" data-bind=\"with: previewData\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Preview Table</h4>\r\n <button type=\"button\" class=\"btn-close pull-right\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div style=\"overflow-x: auto; max-height: 500px; overflow-y: auto;\">\r\n <table class=\"table table-striped table-hover table-condensed\">\r\n <thead style=\"position: sticky; top: -1px; z-index: 2; background-color: #f8f9fa;\">\r\n <tr data-bind=\"foreach: Columns\">\r\n <th>\r\n <span data-bind=\"text: ColumnName, attr: { title: DataType.replace('System.', '') }\"></span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: Rows\">\r\n <tr data-bind=\"foreach: Items\">\r\n <td>\r\n <span data-bind=\"html: FormattedValue\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"custom-sql-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"with: customSql\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Enter Select SQL for your Data</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\" data-bind=\"validationElement: customTableName\">\r\n <label for=\"custom-table-name\">Custom Table Name</label>\r\n <input type=\"text\" class=\"form-control\" name=\"customTableName\" placeholder=\"Enter table name\" data-bind=\"textInput: customTableName\" required>\r\n <div class=\"invalid-feedback\">Custom Table Name is required.</div>\r\n </div>\r\n <div data-bind=\"visible: useAi\">\r\n <p id=\"query-input\" class=\"query-input\">\r\n Show me&nbsp;\r\n </p>\r\n <button data-bind=\"click: buildSqlUsingAi\" class=\"btn btn-primary btn-sm\">Process with ChatGPT</button>\r\n <button data-bind=\"click: textQuery.resetQuery\" class=\"btn btn-secondary btn-sm\">Start over</button>\r\n <hr />\r\n </div>\r\n\r\n <div class=\"form-group\" data-bind=\"validationElement: customSql\">\r\n <label for=\"custom-sql\">Custom SQL</label> |\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: dynamicColumns\">\r\n <span title=\"Setup a table that returns dynamic columns to pick from\">Table with Dynamic Columns</span>\r\n </label> |\r\n <a href=\"#\" data-bind=\"click: beautifySql\">Beautify Sql</a>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"customSql\" data-bind=\"textInput: customSql\" required></textarea>\r\n <div class=\"invalid-feedback\">Custom SQL is required.</div>\r\n\r\n <div data-bind=\"if: dynamicColumns\">\r\n <label>Add SQL code to use the dynamic column</label>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"columnTranslation\" data-bind=\"textInput: columnTranslation\" required></textarea>\r\n <label>Pick Values Table</label>\r\n <select class=\"form-select input-medium\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', optionsValue: 'Id', optionsCaption: 'Choose Values Table...', value: dynamicValuesTableId\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: executeSql\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Tables/Views Json File Modal -->\r\n<div class=\"modal\" id=\"uploadTablesFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadTablesFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageTablesJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadTablesFileModalLabel\">Import Tables/Views (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerTablesFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"tablesFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleTablesFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Tables/Views File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadTablesFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Joins Json File Modal -->\r\n<div class=\"modal\" id=\"uploadJoinsFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadJoinsFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJoinsJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadJoinsFileModalLabel\">Import Joins (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerJoinsFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"joinsFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleJoinsFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Joins File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadJoinsFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import StoredProcedures Json File Modal -->\r\n<div class=\"modal\" id=\"uploadStoredProceduresFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadStoredProceduresFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageStoredProceduresJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadStoredProceduresFileModalLabel\">Import Stored Procedures (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerStoredProceduresFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"storedProceduresFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleStoredProceduresFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Stored Procedures File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadStoredProceduresFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"searchModal\" tabindex=\"-1\" aria-hidden=\"true\" data-bind=\"with: $root\">\r\n <div class=\"modal-dialog modal-xl modal-dialog-scrollable\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Bulk Manage Reports Access and Export</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"d-flex gap-2 mb-4 align-items-center\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Reports\"\r\n data-bind=\"value: searchQuery, valueUpdate: 'input'\">\r\n <button class=\"btn btn-sm btn-outline-primary flex-shrink-0\" title=\"Select all Filtered\"\r\n data-bind=\"click: selectAllFiltered\">\r\n Select All\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary flex-shrink-0\" title=\"Deselect all Filtered\"\r\n data-bind=\"click: deselectAllFiltered\">\r\n Deselect All\r\n </button>\r\n </div>\r\n <div data-bind=\"foreach: filteredReportsAndFolders\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header\">\r\n <div class=\"d-flex fw-bold\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: allReportsSelected\">\r\n <span data-bind=\"text: folder\"></span>\r\n </div>\r\n <div class=\"w-25\">View</div>\r\n <div class=\"w-25\">Manage</div>\r\n <div class=\"w-25\">Delete</div>\r\n <div class=\"w-25\">Client ID</div>\r\n </div>\r\n </div>\r\n <!-- Reports List -->\r\n <ul class=\"list-group list-group-flush\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: isSelected\">\r\n <span data-bind=\"text: reportName\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole ? viewOnlyUserRole: 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole ? userRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole ? deleteOnlyUserRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId ? clientId : 'Any User'\"></span>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <div class=\"p-2 text-muted\" data-bind=\"visible: reports.length === 0\">\r\n No matching reports found\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-success\" data-bind=\"click: exportFoldersReportJson\">Export Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.openApplySecurityModal, enable: $root.anyReportSelected\">Apply Security to All Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.deleteSelectedItems, enable: $root.anyReportSelected\">Delete All Selected</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"applySecurityModal\" tabindex=\"-1\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"if: $root.anyReportSelected\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Apply Security to All Selected</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"template: { name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.applySecurityToAll\">Apply to All</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import Json File Modal -->\r\n<div class=\"modal\" id=\"uploadFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadFileModalLabel\">Import previously Exported Reports</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"alert alert-info small\">\r\n <strong>Instructions:</strong><br />\r\n \u2022 Select a <code>.json</code> file previously exported from Dotnet Report.<br />\r\n \u2022 The file may include multiple reports and their folders.<br />\r\n \u2022 Any missing folders will be created automatically.<br />\r\n \u2022 If a report with the same name already exists, you will be prompted to:\r\n <em>Skip</em>, <em>Overwrite</em>, or <em>Make a Copy</em>.<br />\r\n \u2022 Once uploaded, all imported reports will be available immediately.\r\n </div>\r\n\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n Click here to select a JSON file\r\n </div>\r\n\r\n <input type=\"file\" id=\"fileInputJson\" accept=\".json\" style=\"display: none;\"\r\n data-bind=\"event: { change: handleFileSelect }\">\r\n\r\n <div class=\"mt-3\" data-bind=\"visible: fileName\">\r\n <p><strong>Selected File:</strong> <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Templates -->\r\n<div [innerHtml]=\"reportTemplates\"></div>\r\n<!-- Templates -->", styles: [".glyphicon-ok:before{content:\"\\f00c\"}.glyphicon-remove:before{content:\"\\f00d\"}.glyphicon{display:inline-block;font: 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
3184
3185
  }
3185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DotnetsetupComponent, decorators: [{
3186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DotnetsetupComponent, decorators: [{
3186
3187
  type: Component,
3187
- args: [{ selector: 'app-dotnetsetup', template: "<div id=\"dot-net-report\" class=\"body-content\">\r\n\r\n<div>\r\n <h2>Manage Database</h2>\r\n <p>\r\n You can select and manage display names for the Tables and Columns you would like to allow in Dotnet Report Builder.\r\n </p>\r\n <div class=\"alert alert-danger d-flex justify-content-between align-items-center\">\r\n <div>\r\n Do not expose this Setup Tool to end users who should not have access to it. Ideally, only Developers should be given access to this utility.\r\n </div>\r\n <button class=\"btn btn-primary ms-3\" data-bind=\"click: refreshAll\" title=\"Reload all Table and Columns\">\r\n <i class=\"fa fa-refresh\"></i> Refresh\r\n </button>\r\n </div>\r\n\r\n <div data-bind=\"visible: false;\">\r\n Loading...\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <!-- Nav tabs -->\r\n <ul class=\"nav nav-tabs flex-grow-1\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link active\" href=\"#tablesfields\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(false); activeTable(null);}\">\r\n <i class=\"fa fa-database\"></i> Database Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#tablesfields\" aria-controls=\"custom\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(true); activeTable(null); }\">\r\n <i class=\"fa fa-table\"></i> Custom Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#relations\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-link\"></i> Relations\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#procedure\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-code\"></i> Stored Procs\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#schedules\" aria-controls=\"schedules\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-clock-o\"></i> Schedules\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\" style=\"display: none;\">\r\n <a class=\"nav-link\" href=\"#functions\" aria-controls=\"functions\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-cogs\"></i> Custom Functions\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#manageaccess\" aria-controls=\"manageaccess\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-folder\"></i> Manage Reports\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#connection\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-plug\"></i> Data Connection\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <br />\r\n</div>\r\n<!-- Tab panes -->\r\n<div class=\"fix-content\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"tab-content\">\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"connection\">\r\n <b>Manage Data Connection</b>\r\n <p>\r\n Data Connection groups data schemas (including tables and stored procedures and other configuration), Reports, and Dashboards into a single environment. You can create multiple Data Connections and easily switch between them for separate environment management.\r\n </p>\r\n <hr />\r\n <div class=\"form-row\" data-bind=\"visible: true\">\r\n <div class=\"form-group\">\r\n <div class=\"control-group\">\r\n <select class=\"form-select\" style=\"width:25%\" data-bind=\"options: DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: currentConnectionKey\"></select>\r\n <div class=\"padded-top\"></div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: false\" data-bs-toggle=\"modal\" data-bs-target=\"#connection-setup-modal\">Manage DB Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: switchConnection, visible: canSwitchConnection\">Switch Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: editDataConnectionModal, hidden: canSwitchConnection\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Edit Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: newDataConnectionModal\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Add New Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: exportAll, visible: false\">Export Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: importStart, visible: false\">Import Connection</button>\r\n </div>\r\n <div data-bind=\"visible: importingFile\">\r\n <br />\r\n <div class=\"alert alert-info\">\r\n Please select a file you have previously exported from this utility. The system will load the screen with the Data Connection setting in the file, however, it will <b>NOT</b> be saved until you press the Save All button or Save individual tables\r\n <br />\r\n <div class=\"input-group\">\r\n <input type=\"file\" accept=\".json\" id=\"import-file\" data-bind=\"event: { change: function() { importFile($element.files[0]) } }\" />\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-link\" data-bind=\"click: importCancel\">Cancel</button>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <br />\r\n <br />\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Account Level Settings</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div data-bind=\"with: settings\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Admin Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useClientIdInAdmin\" data-bind=\"checked: useClientIdInAdmin\">\r\n <label class=\"form-check-label\" for=\"useClientIdInAdmin\">Use Client ID in Admin mode</label>\r\n <small class=\"text-muted d-block\">Enable this to respect client IDs even when in admin mode.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlBuilderInAdminMode\" data-bind=\"checked: useSqlBuilderInAdminMode\">\r\n <label class=\"form-check-label\" for=\"useSqlBuilderInAdminMode\">Use SQL Builder in Admin Mode</label>\r\n <small class=\"text-muted d-block\">Allows SQL query builder access <b>only</b> in admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Customization</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlCustomField\" data-bind=\"checked: useSqlCustomField\">\r\n <label class=\"form-check-label\" for=\"useSqlCustomField\">Use SQL in Custom Field</label>\r\n <small class=\"text-muted d-block\">Allows the use of SQL expressions in custom fields.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: usePromptBuilder\">\r\n <label class=\"form-check-label\">Use AI aided, prompt based Report Builder</label>\r\n <small class=\"text-muted d-block\">Let non Admin users create reports using the AI aided Prompt based builder</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPivot\">\r\n <label class=\"form-check-label\">Pivot with Drilldown</label>\r\n <small class=\"text-muted d-block\">Use alternate Pivot method that doesn\u2019t use SQL\u2019s PIVOT.<br>Allows drilldown, but may be slower.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Report Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToCreateReports\" data-bind=\"checked: allowUsersToCreateReports\">\r\n <label class=\"form-check-label\" for=\"allowUsersToCreateReports\">Allow All Users to Create Reports</label>\r\n <small class=\"text-muted d-block\">Permits users to generate and customize reports.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showImportExport\">\r\n <label class=\"form-check-label\">Allow All Users to export/import\u00A0reports</label>\r\n <small class=\"text-muted d-block\">\r\n Allow non admin users to export and import Reports in the system.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Folder Options</h6>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noFolders\" data-bind=\"checked: noFolders\">\r\n <label class=\"form-check-label\" for=\"noFolders\">No Folders</label>\r\n <small class=\"text-muted d-block\">Disables the use of folders in the application.</small>\r\n </div>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noDefaultFolder\" data-bind=\"checked: noDefaultFolder\">\r\n <label class=\"form-check-label\" for=\"noDefaultFolder\">No Default Folder</label>\r\n <small class=\"text-muted d-block\">Removes the Default folder.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showEmptyFolders\">\r\n <label class=\"form-check-label\">Show Empty Folders</label>\r\n <small class=\"text-muted d-block\">Will show empty folders for non admin users.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToManageFolders\" data-bind=\"checked: allowUsersToManageFolders\">\r\n <label class=\"form-check-label\" for=\"allowUsersToManageFolders\">Allow All Users to Manage Folders</label>\r\n <small class=\"text-muted d-block\">Grants permission to organize and manage folders without admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Export Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPdf\">\r\n <label class=\"form-check-label\">PDF Export without Chromium</label>\r\n <small class=\"text-muted d-block\">Use alternate PDF export method that doesn\u2019t rely on Chromium.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontXmlExport\">\r\n <label class=\"form-check-label\">Hide XML Export option</label>\r\n <small class=\"text-muted d-block\">Remove XML Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontWordExport\">\r\n <label class=\"form-check-label\">Hide Word Export option</label>\r\n <small class=\"text-muted d-block\">Remove Word Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showPageSize\">\r\n <label class=\"form-check-label\">Show Page Size on PDF & Word export</label>\r\n <small class=\"text-muted d-block\">Display document dimensions in exported PDF & Word.</small>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"button\" id=\"saveAppSettings\" class=\"btn btn-primary\" data-bind=\"click: saveAppSettings\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"tablesfields\">\r\n <b data-bind=\"text: customTableMode() ? 'Custom Tables' : 'Database Tables'\"></b>\r\n <p>\r\n <span data-bind=\"visible: $root.customTableMode\">\r\n Define Custom Tables using SQL Select Query to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n <span data-bind=\"hidden: $root.customTableMode\">\r\n Select Tables or Views from your Database to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n </p>\r\n\r\n <div data-bind=\"with: Tables\">\r\n <input type=\"text\" class=\"form-control input-sm\" placeholder=\"Filter Tables...\" data-bind=\"value: tableFilter, valueUpdate: 'afterkeydown'\" style=\"float: left; width: 180px; margin-right: 5px;\">\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: clearTableFilter, visible: tableFilter()!='' && tableFilter()!=null\"><span class=\"fa fa-remove\"></span></button>\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: toggleShowAll, hidden: $root.customTableMode() || $root.onlyApi(), text: usedOnly() ? 'Show all' : 'Show used only'\">Show used only</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.customSql.addNewCustomSqlTable, visible: $root.customTableMode\">Add New Custom Table</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.loadFromDatabase, hidden: $root.customTableMode() || !$root.onlyApi()\">\r\n <span class=\"fa fa-database\"></span> Load all Database Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.visualizeJoins\"><span class=\"fa fa-arrows-h\"></span> Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(true) }, visible: $root.customTableMode\">\r\n <span class=\"fa fa-download\"></span> Export Custom Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(false) }, visible: !$root.customTableMode()\">\r\n <span class=\"fa fa-download\"></span> Export Tables/Views\r\n </button>\r\n\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadTablesFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Tables/Views\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" title=\"Manage Categories\" data-bs-toggle=\"modal\" data-bs-target=\"#category-modal\">\r\n <span class=\"fa fa-server\"></span> Manage Categories\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: selectAll, visible: !$root.onlyApi()\">\r\n <span class=\"fa fa-check\"></span> Select All Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { $root.saveChanges($root.customTableMode()) }\">\r\n <span class=\"fa fa-floppy-o\"></span> Save All Tables\r\n </button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n\r\n <div class=\"row\">\r\n <div data-bind=\"ifnot: $root.customTableMode\">\r\n <div class=\"alert alert-info\">\r\n <span data-bind=\"text: Tables.model().filter(t => !t.CustomTable()).length\"></span> Tables/Views\r\n <span data-bind=\"text: $root.onlyApi() ? 'configured and used' : 'read from database'\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"menu g-3\" data-bind=\"foreach: pagedTables\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"checkbox pull-left\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName,attr: { title: TableName }, click: function() { $root.activeTable($data); }\" class=\"table-name-label\" style=\"cursor: pointer\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeTable($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-3\">\r\n <div class=\"d-flex flex-column col-md-12\" data-bind=\"with: pager\">\r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"tableDetails\">\r\n <div data-bind=\"visible: pagedTables().length === 0\">\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">No <span data-bind=\"visible: $root.customTableMode\">Custom </span> Tables added yet, click \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\" to get started!</div>\r\n </div>\r\n\r\n <div data-bind=\"visible: !activeTable() && pagedTables().length > 0\">\r\n <br />\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">Select a <span data-bind=\"visible: $root.customTableMode\">Custom </span> Table, or \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\"</div>\r\n </div>\r\n\r\n <div data-bind=\"with: activeTable\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i> Preview Data\r\n </button>\r\n <button class=\"btn btn-sm btn-danger\" title=\"Delete this Table\" data-bind=\"click: function() { deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-trash\"></i> Remove Table\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Category\" data-bs-toggle=\"modal\" data-bs-target=\"#category-manage-modal\" data-bind=\"click: $root.selectedCategory\">\r\n <i class=\"fa fa-gear\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Table\" data-bind=\"click: function() { exportTableJson(); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <p style=\"display: none;\">\r\n <!-- deprecated -->\r\n <label class=\"label-sm\">Account Id Field</label><br />\r\n <span data-bind=\"editable: AccountIdField\"></span>\r\n </p>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: DoNotDisplay\">\r\n Do Not Display\r\n </label>\r\n </div>\r\n <div data-bind=\"if: CustomTable\">\r\n <button class=\"btn btn-sm btn-secondary\" data-bind=\"click: $root.customSql.viewCustomSql.bind($data)\">View Custom SQL</button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-end gap-2\">\r\n <label class=\"label-sm m-0\"><span data-bind=\"text: Columns().length\"></span> Columns</label>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: autoFormat, visible: Selected\">Auto Format</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: unselectAllColumns, visible: Selected\">Unselect All</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: selectAllColumns, visible: Selected\">Select All</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"list-group\" data-bind=\"sortable: { data: Columns, options: { handle: '.sortable', cursor: 'move' }, afterMove: $root.Tables.columnSorted }\">\r\n <div class=\"list-group-item\">\r\n <div data-bind=\"if: $parent.DynamicColumns()\">\r\n <span data-bind=\"html: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n </div>\r\n <div class=\"checkbox\" data-bind=\"if: !$parent.DynamicColumns()\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected, enable: $parent.Selected()\">\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n <label data-bind=\"visible: PrimaryKey\" class=\"badge text-bg-primary\">Primary</label>\r\n <label data-bind=\"visible: ForeignKey\" class=\"badge text-bg-info text-white\">Foreign</label>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, false)\">...</button>\r\n <div class=\"btn btn-sm pull-right sortable\">\r\n <span class=\"fa fa-arrows\" aria-hidden=\"true\" title=\"Drag to reorder\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"relations\">\r\n <b>Relations</b>\r\n <p>\r\n Setup your Database Relations for Dotnet Report to produce dynamic queries\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddAllRelations\">Auto Add Joins</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddJoin\">Add new Join</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: SaveJoins\">Save Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: visualizeJoins\">Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: DeleteVisibleJoins\" title=\"Delete filtered Joins\">Delete Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: ExportJoins\" title=\"Export filtered Joins\">Export Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadJoinsFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-upload\"></span> Import Joins\r\n </button>\r\n <hr />\r\n <div id=\"form-joins\">\r\n <div class=\"alert alert-warning\" data-bind=\"visible: isDirty\">\r\n You have unsaved changes. Please be sure to click <b>Save Joins</b> to save your changes.\r\n </div>\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row fw-bold bg-light border-bottom py-2\" data-bind=\"with: JoinFilters\">\r\n <!-- Repeat for each column header -->\r\n <div class=\"col-md-2\">\r\n Primary Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByPrimaryTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Type\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinType, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinType\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinType() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field<div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Join Row -->\r\n <div class=\"row bg-info bg-opacity-25 p-2\" data-bind=\"visible: showNewJoinRow\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: Tables.availableTables, optionsText: 'DisplayName', value: NewJoin().JoinTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsCaption: 'Pick a field...', optionsValue: 'ColumnName', value: $root.NewJoin().FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: NewJoin().JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: NewJoin().OtherTables, optionsText: 'DisplayName', value: NewJoin().OtherTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $root.NewJoin().JoinFieldName, optionsCaption: 'Pick a field...'\"></select>\r\n </div>\r\n <div class=\"col-md-2 text-end\">\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"click: ConfirmAddJoin\">+ Add Join</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Existing Join Rows -->\r\n <div data-bind=\"foreach: pagedJoins\">\r\n <div class=\"row align-items-center border-bottom py-2\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', value: JoinTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: OtherTables, optionsText: 'DisplayName', value: OtherTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.JoinFieldName\"></select>\r\n </div>\r\n\r\n <div class=\"col-md-2 text-end\">\r\n <span class=\"badge bg-warning text-dark me-2\"\r\n data-bind=\"visible: isNew\"\r\n data-bs-toggle=\"tooltip\"\r\n title=\"New record added or imported, not saved yet\">\r\n <i class=\"fa fa-warning\"></i> New\r\n </span>\r\n\r\n <button class=\"btn btn-secondary btn-sm\" data-bind=\"click: DeleteJoin\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\"> \r\n <div class=\"d-flex flex-row align-items-center col-md-12\" data-bind=\"with: joinsPager\"> \r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n </div>\r\n <div id=\"procedure\" class=\"tab-pane\">\r\n <b>Stored Procedures</b>\r\n <p>\r\n Select and manage Stored Procedures to use in Dotnet Report for more complex and coded Reports\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#procedure-modal\"><span class=\"fa fa-plus\"></span> Add Stored Procs from database</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadStoredProceduresFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Stored Procedures\r\n </button>\r\n <hr />\r\n <div data-bind=\"if: Procedures.savedProcedures().length == 0\">\r\n <br />\r\n No Stored Procedures have been setup yet.\r\n </div>\r\n <div class=\"row\" data-bind=\"if: Procedures.savedProcedures().length > 0\">\r\n <!-- Left Panel for Stored Procedure Names -->\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <div class=\"menu g-3\" data-bind=\"foreach: Procedures.savedProcedures\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName, click: function() { $root.activeProcedure($data); }\" style=\"cursor: pointer\"></span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span>\r\n </button>\r\n </div>\r\n <!-- Click to activate procedure -->\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeProcedure($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Panel for Stored Procedure Details -->\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"procDetails\">\r\n <div data-bind=\"with: activeProcedure\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5 data-bind=\"text: TableName\"></h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span> Delete\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Procedure\" data-bind=\"click: function() { $root.exportProcedureJson($data.TableName); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <label class=\"small\">Columns</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, true)\">...</button>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ParameterName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span>\r\n &nbsp;&nbsp;\r\n <button class=\"btn btn-sm btn-primary pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#parameter-modal\" title=\"All Parameter options\" data-bind=\"click: $root.editParameter\">...</button>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div id=\"manageaccess\" class=\"tab-pane\">\r\n <ul class=\"nav nav-tabs\" id=\"accessTabs\" role=\"tablist\">\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link active\" id=\"reports-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#reportsAccess\" type=\"button\" role=\"tab\">Reports Access</button>\r\n </li>\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link\" id=\"folders-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#foldersAccess\" type=\"button\" role=\"tab\">Folders Access</button>\r\n </li>\r\n </ul>\r\n <div class=\"tab-content mt-3\">\r\n <div class=\"tab-pane fade show active\" id=\"reportsAccess\" role=\"tabpanel\" aria-labelledby=\"reports-tab\">\r\n <b>Reports Access</b>\r\n <p>You can setup access to individual Reports here</p>\r\n <div class=\"mb-2 d-flex gap-2\">\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { exportFoldersReportJson() }\">\r\n <span class=\"fa fa-download\"></span> Export Selected Reports Access\r\n </button>\r\n </div> \r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadFileModal\">\r\n <span class=\"fa fa-upload\"></span> Import Reports\r\n </button>\r\n </div>\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#searchModal\">\r\n <span class=\"fa fa-tasks\"></span> Bulk Actions\r\n </button>\r\n </div>\r\n </div>\r\n <hr />\r\n <div data-bind=\"foreach: reportsAndFolders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n data-bind=\"checked: allReportsSelected\">\r\n <label>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folder-' + folderId }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: folder\"></span>\r\n </a>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folder-' + folderId }\">\r\n <div data-bind=\"if: reports.length == 0\">\r\n No Reports found in this folder\r\n </div>\r\n <ul class=\"list-group\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" data-bind=\"checked: isSelected\" />\r\n <label class=\"list-group-item-heading\">\r\n <span class=\"fa\" data-bind=\"css: {'fa-file': reportType=='List', 'fa-th-list': reportType=='Summary', 'fa-bar-chart': reportType=='Bar', 'fa-pie-chart': reportType=='Pie', 'fa-line-chart': reportType=='Line', 'fa-globe': reportType =='Map'}\" style=\"font-size: 14pt; color: #808080\"></span>\r\n <span data-bind=\"text: reportName\"></span>\r\n </label>\r\n </div>\r\n <p class=\"list-group-item-text small\" data-bind=\"text: reportDescription\"></p>\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Report Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: userId() ? userId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (viewOnlyUserId() ? viewOnlyUserId() : (userId() ? userId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: deleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: userRole()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole() ? userRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: viewOnlyUserRole()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole() ? viewOnlyUserRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: deleteOnlyUserRole()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole() ? deleteOnlyUserRole() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId() ? clientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tab-pane fade\" id=\"foldersAccess\" role=\"tabpanel\" aria-labelledby=\"folders-tab\">\r\n <b>Folders Access</b>\r\n <p>You can setup access to individual Folders here</p>\r\n <hr />\r\n <div data-bind=\"foreach: Folders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folderAccess-' + Id }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: FolderName\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folderAccess-' + Id }\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Folder Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserId()? UserId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (ViewOnlyUserId() ? ViewOnlyUserId() : (UserId() ? UserId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: DeleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: UserRoles()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserRoles() ? UserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: ViewOnlyUserRoles()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: ViewOnlyUserRoles() ? ViewOnlyUserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: DeleteOnlyUserRoles()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserRoles() ? DeleteOnlyUserRoles() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: ClientId() ? ClientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeFolderAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeFolderAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveFolderAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"functions\" data-bind=\"with: Functions\">\r\n <b>Custom Functions</b>\r\n <p>\r\n Create and manage Custom Function that you can use in building Reports and Dashboards\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: createNewFunction\">Add new Function</button>\r\n <br />\r\n <hr />\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <input id=\"searchInput\" class=\"form-control mb-2\" type=\"text\" placeholder=\"Search...\" data-bind=\"value: search, valueUpdate: 'input', visible: functions().length > 0\">\r\n <ul class=\"list-group\" data-bind=\"foreach: filteredFunctions\">\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center\">\r\n <span data-bind=\"text: name\"></span>\r\n <div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $parent.selectFunction\">Edit</button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: function() { $parent.deleteFunction($data) }\">Delete</button>\r\n </div>\r\n </li>\r\n </ul>\r\n <div data-bind=\"if: functions().length == 0\">\r\n No Functions found\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" data-bind=\"with: selectedFunction\">\r\n <div style=\"padding-left: 10px;\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Setup Function</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"mb-3\" data-bind=\"validationElement: functionName\">\r\n <label for=\"functionName\" class=\"form-label\">Function Name</label>\r\n <input id=\"functionName\" class=\"form-control\" required data-bind=\"value: name, valueUpdate: 'input'\" />\r\n <div class=\"invalid-feedback\">Function Name is required.</div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionType\" class=\"form-label\">Function Type</label>\r\n <select id=\"functionType\" class=\"form-control\" data-bind=\"value: functionType, event: { change: $parent.updateCodeEditorMode }\">\r\n <option value=\"csharp\">C#</option>\r\n <!--<option value=\"javascript\">JavaScript</option>\r\n <option value=\"sql\">SQL</option>-->\r\n </select>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionDescription\" class=\"form-label\">Description</label>\r\n <textarea id=\"functionDescription\" class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Add any helpful description here for the user...\"></textarea>\r\n </div>\r\n\r\n <div>\r\n <b>Arguments</b>\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Display Name</th>\r\n <th>Description</th>\r\n <th>Data Type</th>\r\n <th>Required</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: parameters\">\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" data-bind=\"value: parameterName, valueUpdate: 'input'\" />\r\n <span class=\"text-danger\" data-bind=\"visible: name.hasError, text: name.validationMessage\"></span>\r\n </td>\r\n <td><input class=\"form-control\" data-bind=\"value: displayName, valueUpdate: 'input'\" /></td>\r\n <td><input class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Friendly description for user...\" /></td>\r\n <td>\r\n <select class=\"form-select\" data-bind=\"value: datatype\">\r\n <option>object</option>\r\n <option>string</option>\r\n <option>int</option>\r\n <option>float</option>\r\n <option>bool</option>\r\n </select>\r\n </td>\r\n <td><input type=\"checkbox\" data-bind=\"checked: required\" /></td>\r\n <td><button class=\"btn btn-sm btn-danger\" data-bind=\"click: $parent.removeParameter\">Remove</button></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: addParameter\">Add Argument</button>\r\n </div>\r\n <br />\r\n <div class=\"mb-3\">\r\n <label for=\"codeEditor\" class=\"form-label\">Write the <b>Code</b> for the function below:</label>\r\n <div style=\"border: 1px solid\">\r\n <textarea id=\"codeEditor\" class=\"code-editor form-control\" data-bind=\"value: code\"></textarea>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $parent.saveFunction\">Save</button>\r\n <button class=\"btn btn-secondary\" data-bind=\"click: $parent.cancelEdit\">Cancel</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"schedules\">\r\n <b>Scheduled Reports</b>\r\n <p>\r\n View Schedules setup for sending Reports and Dashboards\r\n </p>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div data-bind=\"visible: schedules().length === 0\">\r\n <i class=\"fa fa-exclamation-circle\"></i> No scheduled Reports or Dashboards available.\r\n </div>\r\n <div class=\"container-fluid\" data-bind=\"if: schedules().length > 0\">\r\n <div data-bind=\"foreach: schedules\">\r\n <div class=\"row border-bottom py-2\">\r\n <div class=\"col-12\">\r\n For <span class=\"text-muted\" data-bind=\"text: DashboardId === 0 ? 'Report' : 'Dashboard'\"></span>\r\n <b><span data-bind=\"text: Name\"></span></b>\r\n </div>\r\n </div>\r\n\r\n <!-- Inner schedule items -->\r\n <div class=\"row fw-bold bg-light py-2 d-none d-md-flex\">\r\n <div class=\"col-md\"><i class=\"fa fa-clock-o\"></i> Schedule</div>\r\n <div class=\"col-md\"><i class=\"fa fa-envelope\"></i> Email To</div>\r\n <div class=\"col-md\"><i class=\"fa fa-file\"></i> Format</div>\r\n <div class=\"col-md\"><i class=\"fa fa-history\"></i> Last Run</div>\r\n <div class=\"col-md\"><i class=\"fa fa-user\"></i> User ID</div>\r\n <div class=\"col-md\"><i class=\"fa fa-globe\"></i> Time Zone</div>\r\n <div class=\"col-md\"><i class=\"fa fa-cogs\"></i> Actions</div>\r\n </div>\r\n\r\n <div data-bind=\"foreach: { data: Schedules, as: 'item' }\">\r\n <div class=\"row border-bottom py-2 align-items-center\">\r\n <div class=\"col-md\" data-bind=\"text: item.ScheduleDisplay\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.EmailTo\"></div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: item.Format && item.Format.trim().substring(0,1) === '{'\">\r\n <div data-bind=\"html: item.Format.slice(1,-1).split(',').join('<br>')\"></div>\r\n </div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: !item.Format || item.Format.trim().substring(0,1) !== '{'\">\r\n <div data-bind=\"text: item.Format\"></div>\r\n </div>\r\n <div class=\"col-md\" data-bind=\"text: item.LastRun\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.UserId ? item.UserId : 'N/A'\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.Timezone ? item.Timezone : 'N/A'\"></div>\r\n <div class=\"col-md\">\r\n <button class=\"btn btn-sm btn-danger\" data-bind=\"click: $root.deleteSchedule\">\r\n <i class=\"fa fa-trash\"></i> Delete\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal\" id=\"column-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editColumn()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ColumnName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this column on Reports</p>\r\n <div class=\"form-horizontal\">\r\n\r\n <ul class=\"nav nav-tabs\" role=\"tablist\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#column-main\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">Main Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-foreign\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">Foreign Key Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-filter\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">Filter Options</a></li>\r\n </ul>\r\n <div class=\"tab-content\">\r\n <br />\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"column-main\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" id=\"DisplayName\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Field_Type\" data-bind=\"\">Field Type</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"FieldType_SelectedId\" name=\"FieldType.SelectedId\" data-bind=\"value: FieldType\">\r\n <option value=\"Boolean\">Boolean</option>\r\n <option value=\"DateTime\">Date Time</option>\r\n <option value=\"Varchar\">Varchar</option>\r\n <option value=\"Money\">Money</option>\r\n <option value=\"Int\">Int</option>\r\n <option value=\"Double\">Double</option>\r\n <option value=\"Json\">Json</option>\r\n <option value=\"Date\">Date Only</option>\r\n <option value=\"Time\">Time Only</option>\r\n <option value=\"Percentage\">Percentage</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"FieldType\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Primary_Key\" data-bind=\"\">Primary Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The PrimaryKey field is required.\" id=\"PrimaryKey\" name=\"PrimaryKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:PrimaryKey\"><input name=\"PrimaryKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"PrimaryKey\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Do Not Display</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:DoNotDisplay\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will not be displayed on Report Designer, but can still be used on Global Data Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'Json'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">JSON Data Structure</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <textarea class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" data-bind=\"value: JsonStructure, attr:{placeholder:'Please paste in Sample Json with all columns for this JSON data field'}\" rows=\"5\"></textarea>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"You can paste in a sample Json blob with all the columns you want to use in this field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-filter\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Column is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilter\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will always require the user to pick a filtered value\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Table is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilterForTable\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the report will always require the user to pick a filter value if user picks the column in report\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'DateTime'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Restrict Filter Date Range</label>\r\n <div class=\"col-md-1 col-sm-1\">\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: restrictDateRangeFilter\" />\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\" data-bind=\"if: restrictDateRangeFilter\">\r\n <input class=\"form-control\" type=\"number\" data-bind=\"value: restrictDateRangeNumber\" />\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\" data-bind=\"if: restrictDateRangeFilter\">\r\n <select class=\"form-select\" data-bind=\"value: restrictDateRangeValue\">\r\n <option value=\"Days\">Day(s)</option>\r\n <option value=\"Months\">Month(s)</option>\r\n <option value=\"Years\">Year(s)</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is selected, user will not be able to pick date range larger than this selection\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-foreign\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Foreign Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The ForeignKey field is required.\" id=\"ForeignKey\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys allows friendly selection in Filters using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Foreign Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Tables.availableTables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">Foreign Join</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignJoin_SelectedId\" name=\"ForeignJoin.SelectedId\" data-bind=\"value: ForeignJoin, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">\r\n <option selected=\"selected\" value=\"Inner\">Inner</option>\r\n <option value=\"Left\">Left</option>\r\n <option value=\"Right\">Right</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoin\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Foreign Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignKeyField\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Foreign Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignValueField\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Value field is a Column from the Foreign table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div data-bind=\"if: ForeignKey\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Only for Filter?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignFilterOnly\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Check this option if you would like to use this for Filtering only, and not for SQL Joins\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"alert alert-info\">\r\n You can setup a cascading filter by setting up a parent for the foreign key below\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Setup Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentKey\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent allows cascading dropdown selection in Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignParentKey(), attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Parent Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: ForeignJoinTable, visible:ForeignParentKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoinTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeId'}\">Parent Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentKeyField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeId\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Key field is a Column from the Parent table which is used as the key in cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Parent Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentValueField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Value field is a Column from the Parent table which is used to display the value to the User in the Report Designer for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Foreign Key Filter Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentApplyTo, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign Key Filter Value field is a Column from the Foreign table where the selected parent filter will be applied for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--<div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Require Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentRequired\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent can be optional or set to required for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>Manage Role Access\r\n </button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"joinModal\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Joins Diagram</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\" style=\"max-height:800px;overflow:auto;\">\r\n <div id=\"joinDiagram\" style=\"width:2000px;height:1200px;position:relative;border:1px solid #ccc;\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"procedure-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Stored Proc</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <label class=\"col-md-2 control-label\">\r\n Search for\r\n </label>\r\n <div class=\"col-md-6\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: searchProcedureTerm\" placeholder=\"Search stored procedures by name\" />\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: searchStoredProcedure\">Search</button>\r\n </div>\r\n </div>\r\n <br />\r\n <div class=\"menu g-3\" style=\"margin-left: 20px;\" data-bind=\"foreach: foundProcedures\">\r\n <div class=\"menu-category card\" style=\"float:left\">\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, true);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bs-toggle=\"collapse\" data-bind=\"attr: {'data-bs-target': '#sp_'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'sp_'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n Display Name<br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span><br />\r\n Default Value: <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"parameter-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editParameter()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ParameterName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this parameter on Reports</p>\r\n <div class=\"form-horizontal\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Default Value</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Hidden Parameter</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: Hidden, enable: ParameterValue\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Required</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:Required\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Use Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Using lookup table allows friendly selection in report using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Procedures.tables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Lookup Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Lookup Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Lookup Value field is a Column from the Lookup table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n <div class=\"modal\" id=\"role-access-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editAllowedRoles\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Manage Access by Roles</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n <div data-bind=\"if: $root.allRoles().length === 0\">\r\n <div class=\"alert alert-warning\">\r\n <strong>No roles available.</strong> Please add roles first.\r\n </div>\r\n </div>\r\n <div data-bind=\"if: $root.allRoles().length > 0\">\r\n <div class=\"list-group\" data-bind=\"foreach: $root.allRoles\">\r\n <div class=\"list-group-item\" style=\"padding: 2px 10px;\">\r\n <label>\r\n <input type=\"checkbox\"\r\n data-bind=\"value: $data,\r\n checked: $root.editAllowedRoles().AllowedRoles\" />\r\n <span data-bind=\"text: $data\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"category-manage-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: manageCategories\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories for <span data-bind=\"text: TableName\"></span></b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"visble: $root.Categories().lenth == 0\">\r\n No categories have been set up yet.\r\n </div>\r\n <div class=\"list-group\" data-bind=\"foreach: $root.Categories\">\r\n <div class=\"checkbox list-group-item\" style=\"padding-top: 2px; padding-bottom: 2px;\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: $parent.Categories, checkedValue: $data\" />\r\n <span data-bind=\"text: Name\"></span> <!-- Display category name -->\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<div class=\"modal\" id=\"category-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories</b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>\r\n You can organize the display of tables in the Report Designer by assigning categories here.\r\n </p>\r\n <!-- Table for Categories -->\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Category Name</th>\r\n <th>Description</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: $root.Categories\">\r\n <tr>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Name, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-name\" data-bind=\"text: Name, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-name-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Description, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-desc\" data-bind=\"text: Description, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-desc-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td class=\"d-flex\">\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() !== $index() && Id !== 0, click: function() { $root.toggleEdit($index()) }\">\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() === $index() && Id !== 0, click: function() { $root.saveCategory($index()) }\" style=\"margin-left: 5px;\">\r\n <i class=\"fa fa-save\"></i>\r\n </button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: $root.removeCategory\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryName\" placeholder=\"Category Name\">\r\n </td>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryDescription\" placeholder=\"Description\">\r\n </td>\r\n <td>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $root.addCategory\">Add</button>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $root.saveCategories\">Save</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"add-connection-modal\" role=\"dialog\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: newDataConnection\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\"><span data-bind=\"text: $root.editingDataConnection() ? 'Edit' : 'Add a new'\"></span> Data Connection</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Name is required.\" type=\"text\" data-bind=\"value: Name\" placeholder=\"\" id=\"add-conn-name\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Key is required.\" type=\"text\" data-bind=\"value: ConnectionKey\" placeholder=\"\" id=\"add-conn-key\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is the Connection Key in your application settings for your SQL Connection String\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-9 col-sm-9\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: UseSchema\">\r\n Use Schema\r\n </label>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Use Schema in SQL when building query\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"hidden: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-12\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: copySchema\">\r\n Copy Schema from existing Connection\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: copySchema\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Choose Connection</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" style=\"max-width: 300px;\" data-bind=\"options: $root.DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: copyFrom\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.updateDataConnection, visible: $root.editingDataConnection()\">Update</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.addDataConnection, visible: !$root.editingDataConnection()\">Create</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"data-preview-modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <div class=\"modal-content\" data-bind=\"with: previewData\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Preview Table</h4>\r\n <button type=\"button\" class=\"btn-close pull-right\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div style=\"overflow-x: auto; max-height: 500px; overflow-y: auto;\">\r\n <table class=\"table table-striped table-hover table-condensed\">\r\n <thead style=\"position: sticky; top: -1px; z-index: 2; background-color: #f8f9fa;\">\r\n <tr data-bind=\"foreach: Columns\">\r\n <th>\r\n <span data-bind=\"text: ColumnName, attr: { title: DataType.replace('System.', '') }\"></span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: Rows\">\r\n <tr data-bind=\"foreach: Items\">\r\n <td>\r\n <span data-bind=\"html: FormattedValue\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"custom-sql-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"with: customSql\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Enter Select SQL for your Data</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\" data-bind=\"validationElement: customTableName\">\r\n <label for=\"custom-table-name\">Custom Table Name</label>\r\n <input type=\"text\" class=\"form-control\" name=\"customTableName\" placeholder=\"Enter table name\" data-bind=\"textInput: customTableName\" required>\r\n <div class=\"invalid-feedback\">Custom Table Name is required.</div>\r\n </div>\r\n <div data-bind=\"visible: useAi\">\r\n <p id=\"query-input\" class=\"query-input\">\r\n Show me&nbsp;\r\n </p>\r\n <button data-bind=\"click: buildSqlUsingAi\" class=\"btn btn-primary btn-sm\">Process with ChatGPT</button>\r\n <button data-bind=\"click: textQuery.resetQuery\" class=\"btn btn-secondary btn-sm\">Start over</button>\r\n <hr />\r\n </div>\r\n\r\n <div class=\"form-group\" data-bind=\"validationElement: customSql\">\r\n <label for=\"custom-sql\">Custom SQL</label> |\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: dynamicColumns\">\r\n <span title=\"Setup a table that returns dynamic columns to pick from\">Table with Dynamic Columns</span>\r\n </label> |\r\n <a href=\"#\" data-bind=\"click: beautifySql\">Beautify Sql</a>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"customSql\" data-bind=\"textInput: customSql\" required></textarea>\r\n <div class=\"invalid-feedback\">Custom SQL is required.</div>\r\n\r\n <div data-bind=\"if: dynamicColumns\">\r\n <label>Add SQL code to use the dynamic column</label>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"columnTranslation\" data-bind=\"textInput: columnTranslation\" required></textarea>\r\n <label>Pick Values Table</label>\r\n <select class=\"form-select input-medium\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', optionsValue: 'Id', optionsCaption: 'Choose Values Table...', value: dynamicValuesTableId\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: executeSql\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Tables/Views Json File Modal -->\r\n<div class=\"modal\" id=\"uploadTablesFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadTablesFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageTablesJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadTablesFileModalLabel\">Import Tables/Views (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerTablesFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"tablesFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleTablesFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Tables/Views File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadTablesFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Joins Json File Modal -->\r\n<div class=\"modal\" id=\"uploadJoinsFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadJoinsFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJoinsJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadJoinsFileModalLabel\">Import Joins (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerJoinsFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"joinsFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleJoinsFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Joins File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadJoinsFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import StoredProcedures Json File Modal -->\r\n<div class=\"modal\" id=\"uploadStoredProceduresFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadStoredProceduresFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageStoredProceduresJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadStoredProceduresFileModalLabel\">Import Stored Procedures (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerStoredProceduresFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"storedProceduresFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleStoredProceduresFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Stored Procedures File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadStoredProceduresFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"searchModal\" tabindex=\"-1\" aria-hidden=\"true\" data-bind=\"with: $root\">\r\n <div class=\"modal-dialog modal-xl modal-dialog-scrollable\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Bulk Manage Reports Access and Export</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"d-flex gap-2 mb-4 align-items-center\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Reports\"\r\n data-bind=\"value: searchQuery, valueUpdate: 'input'\">\r\n <button class=\"btn btn-sm btn-outline-primary flex-shrink-0\" title=\"Select all Filtered\"\r\n data-bind=\"click: selectAllFiltered\">\r\n Select All\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary flex-shrink-0\" title=\"Deselect all Filtered\"\r\n data-bind=\"click: deselectAllFiltered\">\r\n Deselect All\r\n </button>\r\n </div>\r\n <div data-bind=\"foreach: filteredReportsAndFolders\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header\">\r\n <div class=\"d-flex fw-bold\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: allReportsSelected\">\r\n <span data-bind=\"text: folder\"></span>\r\n </div>\r\n <div class=\"w-25\">View</div>\r\n <div class=\"w-25\">Manage</div>\r\n <div class=\"w-25\">Delete</div>\r\n <div class=\"w-25\">Client ID</div>\r\n </div>\r\n </div>\r\n <!-- Reports List -->\r\n <ul class=\"list-group list-group-flush\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: isSelected\">\r\n <span data-bind=\"text: reportName\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole ? viewOnlyUserRole: 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole ? userRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole ? deleteOnlyUserRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId ? clientId : 'Any User'\"></span>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <div class=\"p-2 text-muted\" data-bind=\"visible: reports.length === 0\">\r\n No matching reports found\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-success\" data-bind=\"click: exportFoldersReportJson\">Export Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.openApplySecurityModal, enable: $root.anyReportSelected\">Apply Security to All Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.deleteSelectedItems, enable: $root.anyReportSelected\">Delete All Selected</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"applySecurityModal\" tabindex=\"-1\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"if: $root.anyReportSelected\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Apply Security to All Selected</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"template: { name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.applySecurityToAll\">Apply to All</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import Json File Modal -->\r\n<div class=\"modal\" id=\"uploadFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadFileModalLabel\">Import previously Exported Reports</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"alert alert-info small\">\r\n <strong>Instructions:</strong><br />\r\n \u2022 Select a <code>.json</code> file previously exported from Dotnet Report.<br />\r\n \u2022 The file may include multiple reports and their folders.<br />\r\n \u2022 Any missing folders will be created automatically.<br />\r\n \u2022 If a report with the same name already exists, you will be prompted to:\r\n <em>Skip</em>, <em>Overwrite</em>, or <em>Make a Copy</em>.<br />\r\n \u2022 Once uploaded, all imported reports will be available immediately.\r\n </div>\r\n\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n Click here to select a JSON file\r\n </div>\r\n\r\n <input type=\"file\" id=\"fileInputJson\" accept=\".json\" style=\"display: none;\"\r\n data-bind=\"event: { change: handleFileSelect }\">\r\n\r\n <div class=\"mt-3\" data-bind=\"visible: fileName\">\r\n <p><strong>Selected File:</strong> <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Templates -->\r\n<div [innerHtml]=\"reportTemplates\"></div>\r\n<!-- Templates -->", styles: [".glyphicon-ok:before{content:\"\\f00c\"}.glyphicon-remove:before{content:\"\\f00d\"}.glyphicon{display:inline-block;font: 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\n"] }]
3188
- }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
3188
+ args: [{ selector: 'app-dotnetsetup', standalone: true, imports: [CommonModule], template: "<div id=\"dot-net-report\" class=\"body-content\">\r\n\r\n<div>\r\n <h2>Manage Database</h2>\r\n <p>\r\n You can select and manage display names for the Tables and Columns you would like to allow in Dotnet Report Builder.\r\n </p>\r\n <div class=\"alert alert-danger d-flex justify-content-between align-items-center\">\r\n <div>\r\n Do not expose this Setup Tool to end users who should not have access to it. Ideally, only Developers should be given access to this utility.\r\n </div>\r\n <button class=\"btn btn-primary ms-3\" data-bind=\"click: refreshAll\" title=\"Reload all Table and Columns\">\r\n <i class=\"fa fa-refresh\"></i> Refresh\r\n </button>\r\n </div>\r\n\r\n <div data-bind=\"visible: false;\">\r\n Loading...\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <!-- Nav tabs -->\r\n <ul class=\"nav nav-tabs flex-grow-1\" role=\"tablist\">\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link active\" href=\"#tablesfields\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(false); activeTable(null);}\">\r\n <i class=\"fa fa-database\"></i> Database Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#tablesfields\" aria-controls=\"custom\" role=\"tab\" data-bs-toggle=\"tab\" data-bind=\"click: function() { customTableMode(true); activeTable(null); }\">\r\n <i class=\"fa fa-table\"></i> Custom Tables\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#relations\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-link\"></i> Relations\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#procedure\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-code\"></i> Stored Procs\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#schedules\" aria-controls=\"schedules\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-clock-o\"></i> Schedules\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\" style=\"display: none;\">\r\n <a class=\"nav-link\" href=\"#functions\" aria-controls=\"functions\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-cogs\"></i> Custom Functions\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#manageaccess\" aria-controls=\"manageaccess\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-folder\"></i> Manage Reports\r\n </a>\r\n </li>\r\n <li role=\"presentation\" class=\"nav-item\">\r\n <a class=\"nav-link\" href=\"#connection\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">\r\n <i class=\"fa fa-plug\"></i> Data Connection\r\n </a>\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n <br />\r\n</div>\r\n<!-- Tab panes -->\r\n<div class=\"fix-content\" style=\"display: none;\" data-bind=\"visible: true\">\r\n <div class=\"tab-content\">\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"connection\">\r\n <b>Manage Data Connection</b>\r\n <p>\r\n Data Connection groups data schemas (including tables and stored procedures and other configuration), Reports, and Dashboards into a single environment. You can create multiple Data Connections and easily switch between them for separate environment management.\r\n </p>\r\n <hr />\r\n <div class=\"form-row\" data-bind=\"visible: true\">\r\n <div class=\"form-group\">\r\n <div class=\"control-group\">\r\n <select class=\"form-select\" style=\"width:25%\" data-bind=\"options: DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: currentConnectionKey\"></select>\r\n <div class=\"padded-top\"></div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: false\" data-bs-toggle=\"modal\" data-bs-target=\"#connection-setup-modal\">Manage DB Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: switchConnection, visible: canSwitchConnection\">Switch Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: editDataConnectionModal, hidden: canSwitchConnection\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Edit Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: newDataConnectionModal\" data-bs-toggle=\"modal\" data-bs-target=\"#add-connection-modal\">Add New Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: exportAll, visible: false\">Export Connection</button>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: importStart, visible: false\">Import Connection</button>\r\n </div>\r\n <div data-bind=\"visible: importingFile\">\r\n <br />\r\n <div class=\"alert alert-info\">\r\n Please select a file you have previously exported from this utility. The system will load the screen with the Data Connection setting in the file, however, it will <b>NOT</b> be saved until you press the Save All button or Save individual tables\r\n <br />\r\n <div class=\"input-group\">\r\n <input type=\"file\" accept=\".json\" id=\"import-file\" data-bind=\"event: { change: function() { importFile($element.files[0]) } }\" />\r\n <span class=\"input-group-btn\">\r\n <button class=\"btn btn-link\" data-bind=\"click: importCancel\">Cancel</button>\r\n </span>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <br />\r\n <br />\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Account Level Settings</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div data-bind=\"with: settings\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Admin Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useClientIdInAdmin\" data-bind=\"checked: useClientIdInAdmin\">\r\n <label class=\"form-check-label\" for=\"useClientIdInAdmin\">Use Client ID in Admin mode</label>\r\n <small class=\"text-muted d-block\">Enable this to respect client IDs even when in admin mode.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlBuilderInAdminMode\" data-bind=\"checked: useSqlBuilderInAdminMode\">\r\n <label class=\"form-check-label\" for=\"useSqlBuilderInAdminMode\">Use SQL Builder in Admin Mode</label>\r\n <small class=\"text-muted d-block\">Allows SQL query builder access <b>only</b> in admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Customization</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"useSqlCustomField\" data-bind=\"checked: useSqlCustomField\">\r\n <label class=\"form-check-label\" for=\"useSqlCustomField\">Use SQL in Custom Field</label>\r\n <small class=\"text-muted d-block\">Allows the use of SQL expressions in custom fields.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: usePromptBuilder\">\r\n <label class=\"form-check-label\">Use AI aided, prompt based Report Builder</label>\r\n <small class=\"text-muted d-block\">Let non Admin users create reports using the AI aided Prompt based builder</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPivot\">\r\n <label class=\"form-check-label\">Pivot with Drilldown</label>\r\n <small class=\"text-muted d-block\">Use alternate Pivot method that doesn\u2019t use SQL\u2019s PIVOT.<br>Allows drilldown, but may be slower.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Report Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToCreateReports\" data-bind=\"checked: allowUsersToCreateReports\">\r\n <label class=\"form-check-label\" for=\"allowUsersToCreateReports\">Allow All Users to Create Reports</label>\r\n <small class=\"text-muted d-block\">Permits users to generate and customize reports.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showImportExport\">\r\n <label class=\"form-check-label\">Allow All Users to export/import\u00A0reports</label>\r\n <small class=\"text-muted d-block\">\r\n Allow non admin users to export and import Reports in the system.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <h6 class=\"mt-2 mb-2\">Folder Options</h6>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noFolders\" data-bind=\"checked: noFolders\">\r\n <label class=\"form-check-label\" for=\"noFolders\">No Folders</label>\r\n <small class=\"text-muted d-block\">Disables the use of folders in the application.</small>\r\n </div>\r\n <div class=\"form-check\" data-bind=\"visible: false\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"noDefaultFolder\" data-bind=\"checked: noDefaultFolder\">\r\n <label class=\"form-check-label\" for=\"noDefaultFolder\">No Default Folder</label>\r\n <small class=\"text-muted d-block\">Removes the Default folder.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showEmptyFolders\">\r\n <label class=\"form-check-label\">Show Empty Folders</label>\r\n <small class=\"text-muted d-block\">Will show empty folders for non admin users.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" id=\"allowUsersToManageFolders\" data-bind=\"checked: allowUsersToManageFolders\">\r\n <label class=\"form-check-label\" for=\"allowUsersToManageFolders\">Allow All Users to Manage Folders</label>\r\n <small class=\"text-muted d-block\">Grants permission to organize and manage folders without admin mode.</small>\r\n </div>\r\n <h6 class=\"mt-3 mb-2\">Export Options</h6>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: useAltPdf\">\r\n <label class=\"form-check-label\">PDF Export without Chromium</label>\r\n <small class=\"text-muted d-block\">Use alternate PDF export method that doesn\u2019t rely on Chromium.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontXmlExport\">\r\n <label class=\"form-check-label\">Hide XML Export option</label>\r\n <small class=\"text-muted d-block\">Remove XML Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: dontWordExport\">\r\n <label class=\"form-check-label\">Hide Word Export option</label>\r\n <small class=\"text-muted d-block\">Remove Word Export option.</small>\r\n </div>\r\n <div class=\"form-check\">\r\n <input type=\"checkbox\" class=\"form-check-input\" data-bind=\"checked: showPageSize\">\r\n <label class=\"form-check-label\">Show Page Size on PDF & Word export</label>\r\n <small class=\"text-muted d-block\">Display document dimensions in exported PDF & Word.</small>\r\n </div> \r\n </div>\r\n </div>\r\n <div class=\"mt-3\">\r\n <button type=\"button\" id=\"saveAppSettings\" class=\"btn btn-primary\" data-bind=\"click: saveAppSettings\">Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"tablesfields\">\r\n <b data-bind=\"text: customTableMode() ? 'Custom Tables' : 'Database Tables'\"></b>\r\n <p>\r\n <span data-bind=\"visible: $root.customTableMode\">\r\n Define Custom Tables using SQL Select Query to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n <span data-bind=\"hidden: $root.customTableMode\">\r\n Select Tables or Views from your Database to use in Dotnet Report for Reporting and Analytics.\r\n </span>\r\n </p>\r\n\r\n <div data-bind=\"with: Tables\">\r\n <input type=\"text\" class=\"form-control input-sm\" placeholder=\"Filter Tables...\" data-bind=\"value: tableFilter, valueUpdate: 'afterkeydown'\" style=\"float: left; width: 180px; margin-right: 5px;\">\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: clearTableFilter, visible: tableFilter()!='' && tableFilter()!=null\"><span class=\"fa fa-remove\"></span></button>\r\n <button class=\"btn btn-outline-secondary btn-sm\" data-bind=\"click: toggleShowAll, hidden: $root.customTableMode() || $root.onlyApi(), text: usedOnly() ? 'Show all' : 'Show used only'\">Show used only</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.customSql.addNewCustomSqlTable, visible: $root.customTableMode\">Add New Custom Table</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.loadFromDatabase, hidden: $root.customTableMode() || !$root.onlyApi()\">\r\n <span class=\"fa fa-database\"></span> Load all Database Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: $root.visualizeJoins\"><span class=\"fa fa-arrows-h\"></span> Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(true) }, visible: $root.customTableMode\">\r\n <span class=\"fa fa-download\"></span> Export Custom Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\"\r\n data-bind=\"click: function() { exportTablesJson(false) }, visible: !$root.customTableMode()\">\r\n <span class=\"fa fa-download\"></span> Export Tables/Views\r\n </button>\r\n\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadTablesFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Tables/Views\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" title=\"Manage Categories\" data-bs-toggle=\"modal\" data-bs-target=\"#category-modal\">\r\n <span class=\"fa fa-server\"></span> Manage Categories\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: selectAll, visible: !$root.onlyApi()\">\r\n <span class=\"fa fa-check\"></span> Select All Tables\r\n </button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { $root.saveChanges($root.customTableMode()) }\">\r\n <span class=\"fa fa-floppy-o\"></span> Save All Tables\r\n </button>\r\n </div>\r\n <div class=\"clearfix\"></div>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n\r\n <div class=\"row\">\r\n <div data-bind=\"ifnot: $root.customTableMode\">\r\n <div class=\"alert alert-info\">\r\n <span data-bind=\"text: Tables.model().filter(t => !t.CustomTable()).length\"></span> Tables/Views\r\n <span data-bind=\"text: $root.onlyApi() ? 'configured and used' : 'read from database'\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"menu g-3\" data-bind=\"foreach: pagedTables\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"checkbox pull-left\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName,attr: { title: TableName }, click: function() { $root.activeTable($data); }\" class=\"table-name-label\" style=\"cursor: pointer\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeTable($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row mt-3\">\r\n <div class=\"d-flex flex-column col-md-12\" data-bind=\"with: pager\">\r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"tableDetails\">\r\n <div data-bind=\"visible: pagedTables().length === 0\">\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">No <span data-bind=\"visible: $root.customTableMode\">Custom </span> Tables added yet, click \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\" to get started!</div>\r\n </div>\r\n\r\n <div data-bind=\"visible: !activeTable() && pagedTables().length > 0\">\r\n <br />\r\n <br />\r\n <svg style=\"width:40px;float:left;transform:rotate(-45deg) translateY(6px);transform-origin:center center;\" fill=\"#000000\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"icon flat-line\"><g stroke-width=\"0\"></g><g stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke=\"#CCCCCC\" stroke-width=\"0.048\"></g><g><path d=\"M18,21A13.17,13.17,0,0,1,9,8.51V3\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></path><polyline points=\"12 6 9 3 6 6\" style=\"fill:none;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2;\"></polyline></g></svg>\r\n <div class=\"mt-3 fw-bold\" style=\"float:left; padding-left: 5px;\">Select a <span data-bind=\"visible: $root.customTableMode\">Custom </span> Table, or \"<span data-bind=\"text: customTableMode() ? 'Add New Custom Table' : 'Load All Tables'\"></span>\"</div>\r\n </div>\r\n\r\n <div data-bind=\"with: activeTable\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected\" title=\"Check to use in Dotnet Report, uncheck to Remove\">\r\n <span data-bind=\"text: TableName\"></span>\r\n <span data-bind=\"visible: IsView\" class=\"label-sm\">(view)</span>\r\n </h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Table\" data-bind=\"click: function() { saveTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-floppy-o\"></i> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Preview this Table\" data-bind=\"click: function() { previewTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-table\"></i> Preview Data\r\n </button>\r\n <button class=\"btn btn-sm btn-danger\" title=\"Delete this Table\" data-bind=\"click: function() { deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <i class=\"fa fa-trash\"></i> Remove Table\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Category\" data-bs-toggle=\"modal\" data-bs-target=\"#category-manage-modal\" data-bind=\"click: $root.selectedCategory\">\r\n <i class=\"fa fa-gear\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Table\" data-bind=\"click: function() { exportTableJson(); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <p style=\"display: none;\">\r\n <!-- deprecated -->\r\n <label class=\"label-sm\">Account Id Field</label><br />\r\n <span data-bind=\"editable: AccountIdField\"></span>\r\n </p>\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: DoNotDisplay\">\r\n Do Not Display\r\n </label>\r\n </div>\r\n <div data-bind=\"if: CustomTable\">\r\n <button class=\"btn btn-sm btn-secondary\" data-bind=\"click: $root.customSql.viewCustomSql.bind($data)\">View Custom SQL</button>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center justify-content-end gap-2\">\r\n <label class=\"label-sm m-0\"><span data-bind=\"text: Columns().length\"></span> Columns</label>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: autoFormat, visible: Selected\">Auto Format</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: unselectAllColumns, visible: Selected\">Unselect All</button>\r\n <button class=\"btn btn-sm btn-outline-secondary\" data-bind=\"click: selectAllColumns, visible: Selected\">Select All</button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"list-group\" data-bind=\"sortable: { data: Columns, options: { handle: '.sortable', cursor: 'move' }, afterMove: $root.Tables.columnSorted }\">\r\n <div class=\"list-group-item\">\r\n <div data-bind=\"if: $parent.DynamicColumns()\">\r\n <span data-bind=\"html: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n </div>\r\n <div class=\"checkbox\" data-bind=\"if: !$parent.DynamicColumns()\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: Selected, enable: $parent.Selected()\">\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n <label data-bind=\"visible: PrimaryKey\" class=\"badge text-bg-primary\">Primary</label>\r\n <label data-bind=\"visible: ForeignKey\" class=\"badge text-bg-info text-white\">Foreign</label>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, false)\">...</button>\r\n <div class=\"btn btn-sm pull-right sortable\">\r\n <span class=\"fa fa-arrows\" aria-hidden=\"true\" title=\"Drag to reorder\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"relations\">\r\n <b>Relations</b>\r\n <p>\r\n Setup your Database Relations for Dotnet Report to produce dynamic queries\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddAllRelations\">Auto Add Joins</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: AddJoin\">Add new Join</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: SaveJoins\">Save Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: visualizeJoins\">Visualize Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: DeleteVisibleJoins\" title=\"Delete filtered Joins\">Delete Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: ExportJoins\" title=\"Export filtered Joins\">Export Joins</button>&nbsp;\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadJoinsFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-upload\"></span> Import Joins\r\n </button>\r\n <hr />\r\n <div id=\"form-joins\">\r\n <div class=\"alert alert-warning\" data-bind=\"visible: isDirty\">\r\n You have unsaved changes. Please be sure to click <b>Save Joins</b> to save your changes.\r\n </div>\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row fw-bold bg-light border-bottom py-2\" data-bind=\"with: JoinFilters\">\r\n <!-- Repeat for each column header -->\r\n <div class=\"col-md-2\">\r\n Primary Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByPrimaryTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: primaryField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\" />\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <button class=\"btn btn-sm\" data-bind=\"click: $root.sortByField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.primaryField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Type\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinType, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinType\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinType() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Join Table\r\n <div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinTable, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinTable\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinTable() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2\">\r\n Field<div class=\"input-group input-group-sm\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: joinField, valueUpdate: 'afterkeydown'\" placeholder=\"Search...\">\r\n <span class=\"input-group-text\"><i class=\"fa fa-filter\"></i></span>\r\n <span class=\"btn btn-sm\" data-bind=\"click: $root.sortByJoinField\">\r\n <i class=\"fa\" data-bind=\"css: $root.sortDirection.joinField() ? 'fa-sort-asc' : 'fa-sort-desc'\"></i>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- New Join Row -->\r\n <div class=\"row bg-info bg-opacity-25 p-2\" data-bind=\"visible: showNewJoinRow\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: Tables.availableTables, optionsText: 'DisplayName', value: NewJoin().JoinTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsCaption: 'Pick a field...', optionsValue: 'ColumnName', value: $root.NewJoin().FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: NewJoin().JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: NewJoin().OtherTables, optionsText: 'DisplayName', value: NewJoin().OtherTable, optionsCaption: 'Pick a table...'\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: NewJoin().OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $root.NewJoin().JoinFieldName, optionsCaption: 'Pick a field...'\"></select>\r\n </div>\r\n <div class=\"col-md-2 text-end\">\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"click: ConfirmAddJoin\">+ Add Join</button>\r\n </div>\r\n </div>\r\n\r\n <!-- Existing Join Rows -->\r\n <div data-bind=\"foreach: pagedJoins\">\r\n <div class=\"row align-items-center border-bottom py-2\">\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', value: JoinTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: JoinTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.FieldName\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: $root.JoinTypes, value: JoinType\"></select>\r\n </div>\r\n <div class=\"col-md-2\">\r\n <select class=\"form-select\" data-bind=\"options: OtherTables, optionsText: 'DisplayName', value: OtherTable\"></select>\r\n </div>\r\n <div class=\"col-md-2\" data-bind=\"with: OtherTable\">\r\n <select class=\"form-select\" data-bind=\"options: availableColumns, optionsText: 'DisplayName', optionsValue: 'ColumnName', value: $parent.JoinFieldName\"></select>\r\n </div>\r\n\r\n <div class=\"col-md-2 text-end\">\r\n <span class=\"badge bg-warning text-dark me-2\"\r\n data-bind=\"visible: isNew\"\r\n data-bs-toggle=\"tooltip\"\r\n title=\"New record added or imported, not saved yet\">\r\n <i class=\"fa fa-warning\"></i> New\r\n </span>\r\n\r\n <button class=\"btn btn-secondary btn-sm\" data-bind=\"click: DeleteJoin\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row mt-3\"> \r\n <div class=\"d-flex flex-row align-items-center col-md-12\" data-bind=\"with: joinsPager\"> \r\n <div data-bind=\"template: 'pager-template', data: $data\"></div>\r\n <div class=\"text-muted small mt-0 pt-0\" style=\"padding-left: 3px\" data-bind=\"text: 'Total Records: ' + totalRecords()\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <br />\r\n <br />\r\n </div>\r\n <div id=\"procedure\" class=\"tab-pane\">\r\n <b>Stored Procedures</b>\r\n <p>\r\n Select and manage Stored Procedures to use in Dotnet Report for more complex and coded Reports\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#procedure-modal\"><span class=\"fa fa-plus\"></span> Add Stored Procs from database</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadStoredProceduresFileModal\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n <span class=\"fa fa-file\"></span> Import Stored Procedures\r\n </button>\r\n <hr />\r\n <div data-bind=\"if: Procedures.savedProcedures().length == 0\">\r\n <br />\r\n No Stored Procedures have been setup yet.\r\n </div>\r\n <div class=\"row\" data-bind=\"if: Procedures.savedProcedures().length > 0\">\r\n <!-- Left Panel for Stored Procedure Names -->\r\n <div class=\"col-12 col-md-4 col-lg-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <div class=\"menu g-3\" data-bind=\"foreach: Procedures.savedProcedures\">\r\n <div class=\"menu-category card\">\r\n <div class=\"card-header clearfix\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName, click: function() { $root.activeProcedure($data); }\" style=\"cursor: pointer\"></span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span>\r\n </button>\r\n </div>\r\n <!-- Click to activate procedure -->\r\n <a class=\"pull-right\" data-bind=\"click: function() { $root.activeProcedure($data); }\">\r\n <span class=\"fa fa-chevron-right\" style=\"cursor: pointer\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Right Panel for Stored Procedure Details -->\r\n <div class=\"col-12 col-md-8 col-lg-9\" id=\"procDetails\">\r\n <div data-bind=\"with: activeProcedure\">\r\n <div class=\"card my-3\">\r\n <div class=\"card-header\">\r\n <h5 data-bind=\"text: TableName\"></h5>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function() { $root.saveProcedure($data.TableName, false); }\">\r\n <span class=\"fa fa-save\"></span> Save Changes\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Delete this Procedure\" data-bind=\"click: function() { $data.deleteTable($root.keys.AccountApiKey, $root.keys.DatabaseApiKey); }\">\r\n <span class=\"fa fa-trash\"></span> Delete\r\n </button>\r\n </div>\r\n <div class=\"card-body\">\r\n <p class=\"pull-right\">\r\n <button class=\"btn btn-sm\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>\r\n </button>\r\n <button class=\"btn btn-sm\" title=\"Export this Procedure\" data-bind=\"click: function() { $root.exportProcedureJson($data.TableName); }\">\r\n <i class=\"fa fa-file\"></i>\r\n </button>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Display Name</label><br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n </p>\r\n <p>\r\n <label class=\"label-sm\">Schema Name</label><br />\r\n <span data-bind=\"editable: SchemaName\"></span>\r\n </p>\r\n <label class=\"small\">Columns</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ColumnName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </label>\r\n <button class=\"btn btn-sm pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#column-modal\" title=\"All column options\" data-bind=\"click: $root.selectColumn.bind($data, true)\">...</button>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <label>\r\n <span data-bind=\"editable: DisplayName, attr: { title: 'DB field is ' + ParameterName() }\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span>\r\n &nbsp;&nbsp;\r\n <button class=\"btn btn-sm btn-primary pull-right\" data-bs-toggle=\"modal\" data-bs-target=\"#parameter-modal\" title=\"All Parameter options\" data-bind=\"click: $root.editParameter\">...</button>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div id=\"manageaccess\" class=\"tab-pane\">\r\n <ul class=\"nav nav-tabs\" id=\"accessTabs\" role=\"tablist\">\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link active\" id=\"reports-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#reportsAccess\" type=\"button\" role=\"tab\">Reports Access</button>\r\n </li>\r\n <li class=\"nav-item\" role=\"presentation\">\r\n <button class=\"nav-link\" id=\"folders-tab\" data-bs-toggle=\"tab\" data-bs-target=\"#foldersAccess\" type=\"button\" role=\"tab\">Folders Access</button>\r\n </li>\r\n </ul>\r\n <div class=\"tab-content mt-3\">\r\n <div class=\"tab-pane fade show active\" id=\"reportsAccess\" role=\"tabpanel\" aria-labelledby=\"reports-tab\">\r\n <b>Reports Access</b>\r\n <p>You can setup access to individual Reports here</p>\r\n <div class=\"mb-2 d-flex gap-2\">\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { exportFoldersReportJson() }\">\r\n <span class=\"fa fa-download\"></span> Export Selected Reports Access\r\n </button>\r\n </div> \r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#uploadFileModal\">\r\n <span class=\"fa fa-upload\"></span> Import Reports\r\n </button>\r\n </div>\r\n <div class=\"mb-2\">\r\n <button class=\"btn btn-sm btn-primary\" data-bs-toggle=\"modal\" data-bs-target=\"#searchModal\">\r\n <span class=\"fa fa-tasks\"></span> Bulk Actions\r\n </button>\r\n </div>\r\n </div>\r\n <hr />\r\n <div data-bind=\"foreach: reportsAndFolders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <input type=\"checkbox\" class=\"form-check-input\"\r\n data-bind=\"checked: allReportsSelected\">\r\n <label>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folder-' + folderId }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: folder\"></span>\r\n </a>\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folder-' + folderId }\">\r\n <div data-bind=\"if: reports.length == 0\">\r\n No Reports found in this folder\r\n </div>\r\n <ul class=\"list-group\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"form-check\">\r\n <input class=\"form-check-input\" type=\"checkbox\" data-bind=\"checked: isSelected\" />\r\n <label class=\"list-group-item-heading\">\r\n <span class=\"fa\" data-bind=\"css: {'fa-file': reportType=='List', 'fa-th-list': reportType=='Summary', 'fa-bar-chart': reportType=='Bar', 'fa-pie-chart': reportType=='Pie', 'fa-line-chart': reportType=='Line', 'fa-globe': reportType =='Map'}\" style=\"font-size: 14pt; color: #808080\"></span>\r\n <span data-bind=\"text: reportName\"></span>\r\n </label>\r\n </div>\r\n <p class=\"list-group-item-text small\" data-bind=\"text: reportDescription\"></p>\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Report Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: userId() ? userId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (viewOnlyUserId() ? viewOnlyUserId() : (userId() ? userId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: deleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: userRole()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole() ? userRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: viewOnlyUserRole()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole() ? viewOnlyUserRole() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: deleteOnlyUserRole()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole() ? deleteOnlyUserRole() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId() ? clientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeAccess(!changeAccess())}, text: !changeAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"tab-pane fade\" id=\"foldersAccess\" role=\"tabpanel\" aria-labelledby=\"folders-tab\">\r\n <b>Folders Access</b>\r\n <p>You can setup access to individual Folders here</p>\r\n <hr />\r\n <div data-bind=\"foreach: Folders\" class=\"list-group\">\r\n <div class=\"list-group-item\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <a data-bs-toggle=\"collapse\" data-bind=\"attr: {href: '#folderAccess-' + Id }\">\r\n <i class=\"fa fa-folder\"></i>&nbsp;<span data-bind=\"text: FolderName\"></span>\r\n </a>\r\n </div>\r\n </div>\r\n <div class=\"collapse\" data-bind=\"attr: {id: 'folderAccess-' + Id }\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\">\r\n <div class=\"small\" style=\"padding-top: 10px;\">\r\n <b>Current Folder Access</b><br />\r\n Manage by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserId()? UserId() : 'Any User'\"></span><br />\r\n View only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: (ViewOnlyUserId() ? ViewOnlyUserId() : (UserId() ? UserId() : 'Any User'))\"></span><br />\r\n <div data-bind=\"if: DeleteOnlyUserId()\">\r\n Delete only by User <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserId()\"></span><br />\r\n </div>\r\n <div data-bind=\"if: UserRoles()\">\r\n Manage by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: UserRoles() ? UserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: ViewOnlyUserRoles()\">\r\n View only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: ViewOnlyUserRoles() ? ViewOnlyUserRoles() : 'Any Role'\"></span><br />\r\n </div>\r\n <div data-bind=\"if: DeleteOnlyUserRoles()\">\r\n Delete only by Role <span class=\"badge text-bg-info text-white\" data-bind=\"text: DeleteOnlyUserRoles() ? DeleteOnlyUserRoles() : 'Same as Manage'\"></span><br />\r\n </div>\r\n <div>\r\n For Client <span class=\"badge text-bg-info text-white\" data-bind=\"text: ClientId() ? ClientId() : 'All Clients'\"></span><br />\r\n </div>\r\n </div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access', hidden: changeFolderAccess\">Change Access</button>\r\n </div>\r\n <div data-bind=\"if: changeFolderAccess\" class=\"col-md-9\">\r\n <div style=\"padding-left: 10px;\">\r\n <div data-bind=\"template: {name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n <br /><br />\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: saveFolderAccessChanges\">Save Access Changes</button>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: function() { changeFolderAccess(!changeFolderAccess())}, text: !changeFolderAccess() ? 'Change Access': 'Cancel Changing Access'\">Change Access</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"functions\" data-bind=\"with: Functions\">\r\n <b>Custom Functions</b>\r\n <p>\r\n Create and manage Custom Function that you can use in building Reports and Dashboards\r\n </p>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: createNewFunction\">Add new Function</button>\r\n <br />\r\n <hr />\r\n\r\n <div class=\"container-fluid\">\r\n <div class=\"row\">\r\n <div class=\"col-md-3 border-end\" style=\"height: 100vh; overflow-y: auto;\">\r\n <input id=\"searchInput\" class=\"form-control mb-2\" type=\"text\" placeholder=\"Search...\" data-bind=\"value: search, valueUpdate: 'input', visible: functions().length > 0\">\r\n <ul class=\"list-group\" data-bind=\"foreach: filteredFunctions\">\r\n <li class=\"list-group-item d-flex justify-content-between align-items-center\">\r\n <span data-bind=\"text: name\"></span>\r\n <div>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $parent.selectFunction\">Edit</button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: function() { $parent.deleteFunction($data) }\">Delete</button>\r\n </div>\r\n </li>\r\n </ul>\r\n <div data-bind=\"if: functions().length == 0\">\r\n No Functions found\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" data-bind=\"with: selectedFunction\">\r\n <div style=\"padding-left: 10px;\">\r\n <div class=\"card\">\r\n <div class=\"card-header\">\r\n <b>Setup Function</b>\r\n </div>\r\n <div class=\"card-body\">\r\n <div class=\"mb-3\" data-bind=\"validationElement: functionName\">\r\n <label for=\"functionName\" class=\"form-label\">Function Name</label>\r\n <input id=\"functionName\" class=\"form-control\" required data-bind=\"value: name, valueUpdate: 'input'\" />\r\n <div class=\"invalid-feedback\">Function Name is required.</div>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionType\" class=\"form-label\">Function Type</label>\r\n <select id=\"functionType\" class=\"form-control\" data-bind=\"value: functionType, event: { change: $parent.updateCodeEditorMode }\">\r\n <option value=\"csharp\">C#</option>\r\n <!--<option value=\"javascript\">JavaScript</option>\r\n <option value=\"sql\">SQL</option>-->\r\n </select>\r\n </div>\r\n <div class=\"mb-3\">\r\n <label for=\"functionDescription\" class=\"form-label\">Description</label>\r\n <textarea id=\"functionDescription\" class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Add any helpful description here for the user...\"></textarea>\r\n </div>\r\n\r\n <div>\r\n <b>Arguments</b>\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Display Name</th>\r\n <th>Description</th>\r\n <th>Data Type</th>\r\n <th>Required</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: parameters\">\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" data-bind=\"value: parameterName, valueUpdate: 'input'\" />\r\n <span class=\"text-danger\" data-bind=\"visible: name.hasError, text: name.validationMessage\"></span>\r\n </td>\r\n <td><input class=\"form-control\" data-bind=\"value: displayName, valueUpdate: 'input'\" /></td>\r\n <td><input class=\"form-control\" data-bind=\"value: description, valueUpdate: 'input'\" placeholder=\"Friendly description for user...\" /></td>\r\n <td>\r\n <select class=\"form-select\" data-bind=\"value: datatype\">\r\n <option>object</option>\r\n <option>string</option>\r\n <option>int</option>\r\n <option>float</option>\r\n <option>bool</option>\r\n </select>\r\n </td>\r\n <td><input type=\"checkbox\" data-bind=\"checked: required\" /></td>\r\n <td><button class=\"btn btn-sm btn-danger\" data-bind=\"click: $parent.removeParameter\">Remove</button></td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <button class=\"btn btn-sm btn-primary\" data-bind=\"click: addParameter\">Add Argument</button>\r\n </div>\r\n <br />\r\n <div class=\"mb-3\">\r\n <label for=\"codeEditor\" class=\"form-label\">Write the <b>Code</b> for the function below:</label>\r\n <div style=\"border: 1px solid\">\r\n <textarea id=\"codeEditor\" class=\"code-editor form-control\" data-bind=\"value: code\"></textarea>\r\n </div>\r\n </div>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $parent.saveFunction\">Save</button>\r\n <button class=\"btn btn-secondary\" data-bind=\"click: $parent.cancelEdit\">Cancel</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"schedules\">\r\n <b>Scheduled Reports</b>\r\n <p>\r\n View Schedules setup for sending Reports and Dashboards\r\n </p>\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <div data-bind=\"visible: schedules().length === 0\">\r\n <i class=\"fa fa-exclamation-circle\"></i> No scheduled Reports or Dashboards available.\r\n </div>\r\n <div class=\"container-fluid\" data-bind=\"if: schedules().length > 0\">\r\n <div data-bind=\"foreach: schedules\">\r\n <div class=\"row border-bottom py-2\">\r\n <div class=\"col-12\">\r\n For <span class=\"text-muted\" data-bind=\"text: DashboardId === 0 ? 'Report' : 'Dashboard'\"></span>\r\n <b><span data-bind=\"text: Name\"></span></b>\r\n </div>\r\n </div>\r\n\r\n <!-- Inner schedule items -->\r\n <div class=\"row fw-bold bg-light py-2 d-none d-md-flex\">\r\n <div class=\"col-md\"><i class=\"fa fa-clock-o\"></i> Schedule</div>\r\n <div class=\"col-md\"><i class=\"fa fa-envelope\"></i> Email To</div>\r\n <div class=\"col-md\"><i class=\"fa fa-file\"></i> Format</div>\r\n <div class=\"col-md\"><i class=\"fa fa-history\"></i> Last Run</div>\r\n <div class=\"col-md\"><i class=\"fa fa-user\"></i> User ID</div>\r\n <div class=\"col-md\"><i class=\"fa fa-globe\"></i> Time Zone</div>\r\n <div class=\"col-md\"><i class=\"fa fa-cogs\"></i> Actions</div>\r\n </div>\r\n\r\n <div data-bind=\"foreach: { data: Schedules, as: 'item' }\">\r\n <div class=\"row border-bottom py-2 align-items-center\">\r\n <div class=\"col-md\" data-bind=\"text: item.ScheduleDisplay\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.EmailTo\"></div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: item.Format && item.Format.trim().substring(0,1) === '{'\">\r\n <div data-bind=\"html: item.Format.slice(1,-1).split(',').join('<br>')\"></div>\r\n </div>\r\n <div class=\"col-md\"\r\n data-bind=\"if: !item.Format || item.Format.trim().substring(0,1) !== '{'\">\r\n <div data-bind=\"text: item.Format\"></div>\r\n </div>\r\n <div class=\"col-md\" data-bind=\"text: item.LastRun\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.UserId ? item.UserId : 'N/A'\"></div>\r\n <div class=\"col-md\" data-bind=\"text: item.Timezone ? item.Timezone : 'N/A'\"></div>\r\n <div class=\"col-md\">\r\n <button class=\"btn btn-sm btn-danger\" data-bind=\"click: $root.deleteSchedule\">\r\n <i class=\"fa fa-trash\"></i> Delete\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Modal -->\r\n<div class=\"modal\" id=\"column-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editColumn()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ColumnName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this column on Reports</p>\r\n <div class=\"form-horizontal\">\r\n\r\n <ul class=\"nav nav-tabs\" role=\"tablist\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link active\" href=\"#column-main\" aria-controls=\"home\" role=\"tab\" data-bs-toggle=\"tab\">Main Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-foreign\" aria-controls=\"profile\" role=\"tab\" data-bs-toggle=\"tab\">Foreign Key Options</a></li>\r\n <li role=\"presentation\" class=\"nav-item\"><a class=\"nav-link\" href=\"#column-filter\" aria-controls=\"procedure\" role=\"tab\" data-bs-toggle=\"tab\">Filter Options</a></li>\r\n </ul>\r\n <div class=\"tab-content\">\r\n <br />\r\n <div role=\"tabpanel\" class=\"tab-pane active\" id=\"column-main\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Display_Name\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" id=\"DisplayName\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Field_Type\" data-bind=\"\">Field Type</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"FieldType_SelectedId\" name=\"FieldType.SelectedId\" data-bind=\"value: FieldType\">\r\n <option value=\"Boolean\">Boolean</option>\r\n <option value=\"DateTime\">Date Time</option>\r\n <option value=\"Varchar\">Varchar</option>\r\n <option value=\"Money\">Money</option>\r\n <option value=\"Int\">Int</option>\r\n <option value=\"Double\">Double</option>\r\n <option value=\"Json\">Json</option>\r\n <option value=\"Date\">Date Only</option>\r\n <option value=\"Time\">Time Only</option>\r\n <option value=\"Percentage\">Percentage</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"FieldType\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" for=\"Primary_Key\" data-bind=\"\">Primary Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The PrimaryKey field is required.\" id=\"PrimaryKey\" name=\"PrimaryKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:PrimaryKey\"><input name=\"PrimaryKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"PrimaryKey\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Do Not Display</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:DoNotDisplay\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will not be displayed on Report Designer, but can still be used on Global Data Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'Json'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">JSON Data Structure</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <textarea class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" data-bind=\"value: JsonStructure, attr:{placeholder:'Please paste in Sample Json with all columns for this JSON data field'}\" rows=\"5\"></textarea>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"You can paste in a sample Json blob with all the columns you want to use in this field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-filter\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Column is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilter\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the column will always require the user to pick a filtered value\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Require Filter if Table is selected</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForceFilterForTable\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is checked, the report will always require the user to pick a filter value if user picks the column in report\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: FieldType() == 'DateTime'\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-4 col-sm-4 control-label\" data-bind=\"\">Restrict Filter Date Range</label>\r\n <div class=\"col-md-1 col-sm-1\">\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked: restrictDateRangeFilter\" />\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\" data-bind=\"if: restrictDateRangeFilter\">\r\n <input class=\"form-control\" type=\"number\" data-bind=\"value: restrictDateRangeNumber\" />\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\" data-bind=\"if: restrictDateRangeFilter\">\r\n <select class=\"form-select\" data-bind=\"value: restrictDateRangeValue\">\r\n <option value=\"Days\">Day(s)</option>\r\n <option value=\"Months\">Month(s)</option>\r\n <option value=\"Years\">Year(s)</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-2 col-sm-2\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"If this is selected, user will not be able to pick date range larger than this selection\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div role=\"tabpanel\" class=\"tab-pane\" id=\"column-foreign\">\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Foreign Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" data-val-required=\"The ForeignKey field is required.\" id=\"ForeignKey\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys allows friendly selection in Filters using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Foreign Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Tables.availableTables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">Foreign Join</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignJoin_SelectedId\" name=\"ForeignJoin.SelectedId\" data-bind=\"value: ForeignJoin, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" style=\"display: none;\">\r\n <option selected=\"selected\" value=\"Inner\">Inner</option>\r\n <option value=\"Left\">Left</option>\r\n <option value=\"Right\">Right</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoin\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Foreign Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignKeyField\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"if: $root.isStoredProcColumn() == false\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Foreign Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" id=\"ForeignValueField\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Value field is a Column from the Foreign table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div data-bind=\"if: ForeignKey\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Only for Filter?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignFilterOnly\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Check this option if you would like to use this for Filtering only, and not for SQL Joins\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"alert alert-info\">\r\n You can setup a cascading filter by setting up a parent for the foreign key below\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Setup Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentKey\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent allows cascading dropdown selection in Filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignParentKey(), attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Parent Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: ForeignJoinTable, visible:ForeignParentKey(), options: $root.Tables.model, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignJoinTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeId'}\">Parent Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentKeyField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeId\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Key field is a Column from the Parent table which is used as the key in cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Parent Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: ForeignJoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentValueField, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Parent Value field is a Column from the Parent table which is used to display the value to the User in the Report Designer for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\" data-bind=\"visible:ForeignParentKey()\" style=\"display: none;\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr: {required: ForeignParentKey()?'True':null, placeholder: 'Ex EmployeeName'}\">Foreign Key Filter Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignParentApplyTo, attr: {required: ForeignParentKey()?'True':null}\" placeholder=\"Ex EmployeeName\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign Key Filter Value field is a Column from the Foreign table where the selected parent filter will be applied for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <!--<div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Require Foreign Key Parent?</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" type=\"checkbox\" data-bind=\"checked:ForeignParentRequired\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Foreign keys parent can be optional or set to required for cascading filters\"></span>\r\n </div>\r\n </div>\r\n </div>-->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" title=\"Manage Role Access\" data-bs-toggle=\"modal\" data-bs-target=\"#role-access-modal\" data-bind=\"click: $root.selectAllowedRoles\">\r\n <i class=\"fa fa-user\"></i>Manage Role Access\r\n </button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"joinModal\" tabindex=\"-1\" role=\"dialog\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Joins Diagram</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\" style=\"max-height:800px;overflow:auto;\">\r\n <div id=\"joinDiagram\" style=\"width:2000px;height:1200px;position:relative;border:1px solid #ccc;\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<div class=\"modal\" id=\"procedure-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog modal-lg\" role=\"document\">\r\n <div class=\"modal-content \">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Add Stored Proc</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <label class=\"col-md-2 control-label\">\r\n Search for\r\n </label>\r\n <div class=\"col-md-6\">\r\n <input type=\"text\" class=\"form-control\" data-bind=\"value: searchProcedureTerm\" placeholder=\"Search stored procedures by name\" />\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button class=\"btn btn-primary\" data-bind=\"click: searchStoredProcedure\">Search</button>\r\n </div>\r\n </div>\r\n <br />\r\n <div class=\"menu g-3\" style=\"margin-left: 20px;\" data-bind=\"foreach: foundProcedures\">\r\n <div class=\"menu-category card\" style=\"float:left\">\r\n <div class=\"card-header clearfix\" style=\"\">\r\n <div class=\"pull-left\">\r\n <label>\r\n <span data-bind=\"text: TableName\"></span>\r\n <span class=\"label-xs\">Procedure</span>\r\n </label>\r\n <button class=\"btn btn-sm\" title=\"Save this Procedure\" data-bind=\"click: function(){$root.saveProcedure($data.TableName, true);}\">\r\n <span class=\"fa fa-save\"></span>\r\n </button>\r\n </div>\r\n <a class=\"pull-right\" data-bs-toggle=\"collapse\" data-bind=\"attr: {'data-bs-target': '#sp_'+$index()}\">\r\n <span class=\"fa fa-chevron-down\"></span>\r\n </a>\r\n </div>\r\n <div data-bind=\"attr: {id: 'sp_'+$index()}\" class=\"panel-collapse collapse in\">\r\n <div class=\"card-body\">\r\n Display Name<br />\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <label class=\"small\">Columns</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Columns\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: FieldType\"></span>\r\n </div>\r\n </div>\r\n <label class=\"small\">Parameters</label>\r\n\r\n <div class=\"list-group\" data-bind=\"foreach: Parameters\">\r\n <div class=\"list-group-item\">\r\n <span data-bind=\"editable: DisplayName\"></span>\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: ParameterDataTypeString\"></span><br />\r\n Default Value: <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"parameter-modal\" role=\"dialog\" tabindex=\"-1\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editParameter()\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"myModalLabel\">\r\n Manage\r\n <label data-bind=\"text: ParameterName\"></label>\r\n </h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose options that will determine how users interact with this parameter on Reports</p>\r\n <div class=\"form-horizontal\">\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">Display Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box single-line\" data-val=\"true\" data-val-required=\"The DisplayName field is required.\" name=\"DisplayName\" type=\"text\" value=\"First Name\" data-bind=\"value: DisplayName, attr:{placeholder:'Ex First Name'}\" placeholder=\"Ex First Name\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is a friendly name to display to your users\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Default Value</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <span data-bind=\"editable: ParameterValue\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Hidden Parameter</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked: Hidden, enable: ParameterValue\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Required</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" type=\"checkbox\" value=\"true\" data-bind=\"checked:Required\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"\">Use Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <div class=\"checkbox\">\r\n <label>\r\n <input class=\"check-box\" data-val=\"true\" name=\"ForeignKey\" type=\"checkbox\" value=\"true\" data-bind=\"checked:ForeignKey\"><input name=\"ForeignKey\" type=\"hidden\" value=\"false\">\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Using lookup table allows friendly selection in report using a Dropdown List\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex tblEmployees'}\" placeholder=\"Ex tblEmployees\" style=\"display: none;\">Lookup Table</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" data-bind=\"value: JoinTable, visible:ForeignKey(), options: $root.Procedures.tables, optionsText: 'TableName'\" placeholder=\"Ex tblEmployees\" style=\"display: none;\"></select>\r\n\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span class=\"field-validation-valid help-inline indent\" data-valmsg-for=\"ForeignTable\" data-valmsg-replace=\"true\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeId'}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\">Lookup Key Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignKeyField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignKeyField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeId\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Foreign Key field is a Column from the Foreign table which is used as the Key field\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"control-group\">\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\" data-bind=\"visible:ForeignKey(), attr: {required: ForeignKey()?'True':null, placeholder: 'Ex EmployeeName'}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\">Lookup Value Field</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" name=\"ForeignValueField\" data-bind=\"options: JoinTable().Columns, optionsText: 'ColumnName', optionsValue: 'ColumnName', value: ForeignValueField, visible:ForeignKey(), attr: {required: ForeignKey()?'True':null}\" placeholder=\"Ex EmployeeName\" style=\"display: none;\"></select>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bind=\"visible:ForeignKey()\" data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" style=\"display: none;\" title=\"Lookup Value field is a Column from the Lookup table which is used to display the value to the User in the Report Designer\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n <div class=\"modal\" id=\"role-access-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: editAllowedRoles\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Manage Access by Roles</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n <div data-bind=\"if: $root.allRoles().length === 0\">\r\n <div class=\"alert alert-warning\">\r\n <strong>No roles available.</strong> Please add roles first.\r\n </div>\r\n </div>\r\n <div data-bind=\"if: $root.allRoles().length > 0\">\r\n <div class=\"list-group\" data-bind=\"foreach: $root.allRoles\">\r\n <div class=\"list-group-item\" style=\"padding: 2px 10px;\">\r\n <label>\r\n <input type=\"checkbox\"\r\n data-bind=\"value: $data,\r\n checked: $root.editAllowedRoles().AllowedRoles\" />\r\n <span data-bind=\"text: $data\"></span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"category-manage-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: manageCategories\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories for <span data-bind=\"text: TableName\"></span></b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"visble: $root.Categories().lenth == 0\">\r\n No categories have been set up yet.\r\n </div>\r\n <div class=\"list-group\" data-bind=\"foreach: $root.Categories\">\r\n <div class=\"checkbox list-group-item\" style=\"padding-top: 2px; padding-bottom: 2px;\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: $parent.Categories, checkedValue: $data\" />\r\n <span data-bind=\"text: Name\"></span> <!-- Display category name -->\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n<div class=\"modal\" id=\"category-modal\" role=\"dialog\" tabindex=\"-2\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <b class=\"modal-title\">Manage Categories</b>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>\r\n You can organize the display of tables in the Report Designer by assigning categories here.\r\n </p>\r\n <!-- Table for Categories -->\r\n <table class=\"table table-bordered\">\r\n <thead>\r\n <tr>\r\n <th>Category Name</th>\r\n <th>Description</th>\r\n <th>Actions</th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: $root.Categories\">\r\n <tr>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Name, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-name\" data-bind=\"text: Name, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-name-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td>\r\n <input type=\"text\" data-bind=\"value: Description, visible: $root.editingCategoryIndex() === $index()\" class=\"form-control\" />\r\n <span id=\"cat-desc\" data-bind=\"text: Description, visible: $root.editingCategoryIndex() !== $index(), attr: { id: Id ? 'cat-desc-' + Id :undefined }\" style=\"color: #6c757d;\"></span>\r\n </td>\r\n <td class=\"d-flex\">\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() !== $index() && Id !== 0, click: function() { $root.toggleEdit($index()) }\">\r\n <i class=\"fa fa-edit\"></i>\r\n </button>\r\n <button class=\"btn btn-success btn-sm\" data-bind=\"visible: $root.editingCategoryIndex() === $index() && Id !== 0, click: function() { $root.saveCategory($index()) }\" style=\"margin-left: 5px;\">\r\n <i class=\"fa fa-save\"></i>\r\n </button>\r\n <button class=\"btn btn-danger btn-sm\" data-bind=\"click: $root.removeCategory\">\r\n <i class=\"fa fa-trash\"></i>\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <tr>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryName\" placeholder=\"Category Name\">\r\n </td>\r\n <td>\r\n <input class=\"form-control\" type=\"text\" data-bind=\"value: $root.newCategoryDescription\" placeholder=\"Description\">\r\n </td>\r\n <td>\r\n <button class=\"btn btn-primary btn-sm\" data-bind=\"click: $root.addCategory\">Add</button>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: $root.saveCategories\">Save</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Done</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"add-connection-modal\" role=\"dialog\">\r\n <div class=\"modal-dialog\" role=\"document\">\r\n <div class=\"modal-content\" data-bind=\"with: newDataConnection\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\"><span data-bind=\"text: $root.editingDataConnection() ? 'Edit' : 'Add a new'\"></span> Data Connection</h4>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <p>Choose User Roles that will have Access</p>\r\n <p class=\"small\">Note: All Users will have access if no restricted roles are setup</p>\r\n\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Name</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Name is required.\" type=\"text\" data-bind=\"value: Name\" placeholder=\"\" id=\"add-conn-name\">\r\n </div>\r\n </div>\r\n <div class=\"form-group row\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Connection Key</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <input class=\"form-control text-box\" data-val=\"true\" data-val-required=\"Connection Key is required.\" type=\"text\" data-bind=\"value: ConnectionKey\" placeholder=\"\" id=\"add-conn-key\">\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"This is the Connection Key in your application settings for your SQL Connection String\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-9 col-sm-9\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: UseSchema\">\r\n Use Schema\r\n </label>\r\n </div>\r\n <div class=\"col-md-3 col-sm-3\">\r\n <span data-bs-toggle=\"tooltip\" data-bs-placement=\"right\" class=\"fa fa-question-circle helptip\" title=\"Use Schema in SQL when building query\"></span>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"hidden: $root.editingDataConnection\">\r\n <div class=\"check-box col-md-12\">\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: copySchema\">\r\n Copy Schema from existing Connection\r\n </label>\r\n </div>\r\n </div>\r\n <div class=\"form-group row\" data-bind=\"visible: copySchema\">\r\n <label class=\"col-md-3 col-sm-3 control-label\">Choose Connection</label>\r\n <div class=\"col-md-6 col-sm-6\">\r\n <select class=\"form-select\" style=\"max-width: 300px;\" data-bind=\"options: $root.DataConnections, optionsText: 'DataConnectName', optionsValue: 'DataConnectGuid', value: copyFrom\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.updateDataConnection, visible: $root.editingDataConnection()\">Update</button>\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bind=\"click: $root.addDataConnection, visible: !$root.editingDataConnection()\">Create</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"clearfix\"></div>\r\n\r\n<div class=\"modal\" id=\"data-preview-modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\">\r\n <div class=\"modal-content\" data-bind=\"with: previewData\">\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\">Preview Table</h4>\r\n <button type=\"button\" class=\"btn-close pull-right\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div style=\"overflow-x: auto; max-height: 500px; overflow-y: auto;\">\r\n <table class=\"table table-striped table-hover table-condensed\">\r\n <thead style=\"position: sticky; top: -1px; z-index: 2; background-color: #f8f9fa;\">\r\n <tr data-bind=\"foreach: Columns\">\r\n <th>\r\n <span data-bind=\"text: ColumnName, attr: { title: DataType.replace('System.', '') }\"></span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody data-bind=\"foreach: Rows\">\r\n <tr data-bind=\"foreach: Items\">\r\n <td>\r\n <span data-bind=\"html: FormattedValue\"></span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"modal\" id=\"custom-sql-modal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"myModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"with: customSql\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Enter Select SQL for your Data</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"form-group\" data-bind=\"validationElement: customTableName\">\r\n <label for=\"custom-table-name\">Custom Table Name</label>\r\n <input type=\"text\" class=\"form-control\" name=\"customTableName\" placeholder=\"Enter table name\" data-bind=\"textInput: customTableName\" required>\r\n <div class=\"invalid-feedback\">Custom Table Name is required.</div>\r\n </div>\r\n <div data-bind=\"visible: useAi\">\r\n <p id=\"query-input\" class=\"query-input\">\r\n Show me&nbsp;\r\n </p>\r\n <button data-bind=\"click: buildSqlUsingAi\" class=\"btn btn-primary btn-sm\">Process with ChatGPT</button>\r\n <button data-bind=\"click: textQuery.resetQuery\" class=\"btn btn-secondary btn-sm\">Start over</button>\r\n <hr />\r\n </div>\r\n\r\n <div class=\"form-group\" data-bind=\"validationElement: customSql\">\r\n <label for=\"custom-sql\">Custom SQL</label> |\r\n <label>\r\n <input type=\"checkbox\" data-bind=\"checked: dynamicColumns\">\r\n <span title=\"Setup a table that returns dynamic columns to pick from\">Table with Dynamic Columns</span>\r\n </label> |\r\n <a href=\"#\" data-bind=\"click: beautifySql\">Beautify Sql</a>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"customSql\" data-bind=\"textInput: customSql\" required></textarea>\r\n <div class=\"invalid-feedback\">Custom SQL is required.</div>\r\n\r\n <div data-bind=\"if: dynamicColumns\">\r\n <label>Add SQL code to use the dynamic column</label>\r\n <textarea class=\"form-control\" style=\"height: 240px;\" name=\"columnTranslation\" data-bind=\"textInput: columnTranslation\" required></textarea>\r\n <label>Pick Values Table</label>\r\n <select class=\"form-select input-medium\" data-bind=\"options: $root.Tables.availableTables, optionsText: 'DisplayName', optionsValue: 'Id', optionsCaption: 'Choose Values Table...', value: dynamicValuesTableId\"></select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: executeSql\">Save changes</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Tables/Views Json File Modal -->\r\n<div class=\"modal\" id=\"uploadTablesFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadTablesFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageTablesJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadTablesFileModalLabel\">Import Tables/Views (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerTablesFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"tablesFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleTablesFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Tables/Views File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadTablesFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Import Joins Json File Modal -->\r\n<div class=\"modal\" id=\"uploadJoinsFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadJoinsFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJoinsJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadJoinsFileModalLabel\">Import Joins (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerJoinsFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"joinsFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleJoinsFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Joins File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadJoinsFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import StoredProcedures Json File Modal -->\r\n<div class=\"modal\" id=\"uploadStoredProceduresFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadStoredProceduresFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageStoredProceduresJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadStoredProceduresFileModalLabel\">Import Stored Procedures (Previously Exported)</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerStoredProceduresFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n click to select Json file\r\n </div>\r\n <input type=\"file\" id=\"storedProceduresFileInputJson\" accept=\".json\" style=\"display: none;\" data-bind=\"event: { change: handleStoredProceduresFileSelect }\">\r\n <div data-bind=\"visible: fileName\">\r\n <p>Selected Stored Procedures File: <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadStoredProceduresFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"searchModal\" tabindex=\"-1\" aria-hidden=\"true\" data-bind=\"with: $root\">\r\n <div class=\"modal-dialog modal-xl modal-dialog-scrollable\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Bulk Manage Reports Access and Export</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"d-flex gap-2 mb-4 align-items-center\">\r\n <input type=\"text\" class=\"form-control\" placeholder=\"Search Reports\"\r\n data-bind=\"value: searchQuery, valueUpdate: 'input'\">\r\n <button class=\"btn btn-sm btn-outline-primary flex-shrink-0\" title=\"Select all Filtered\"\r\n data-bind=\"click: selectAllFiltered\">\r\n Select All\r\n </button>\r\n <button class=\"btn btn-sm btn-outline-secondary flex-shrink-0\" title=\"Deselect all Filtered\"\r\n data-bind=\"click: deselectAllFiltered\">\r\n Deselect All\r\n </button>\r\n </div>\r\n <div data-bind=\"foreach: filteredReportsAndFolders\">\r\n <div class=\"card mb-3\">\r\n <div class=\"card-header\">\r\n <div class=\"d-flex fw-bold\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: allReportsSelected\">\r\n <span data-bind=\"text: folder\"></span>\r\n </div>\r\n <div class=\"w-25\">View</div>\r\n <div class=\"w-25\">Manage</div>\r\n <div class=\"w-25\">Delete</div>\r\n <div class=\"w-25\">Client ID</div>\r\n </div>\r\n </div>\r\n <!-- Reports List -->\r\n <ul class=\"list-group list-group-flush\" data-bind=\"foreach: reports\">\r\n <li class=\"list-group-item\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"w-50 flex-grow-1\">\r\n <input type=\"checkbox\" data-bind=\"checked: isSelected\">\r\n <span data-bind=\"text: reportName\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: viewOnlyUserRole ? viewOnlyUserRole: 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: userRole ? userRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: deleteOnlyUserRole ? deleteOnlyUserRole : 'Any User'\"></span>\r\n </div>\r\n <div class=\"w-25\">\r\n <span class=\"badge text-bg-info text-white\" data-bind=\"text: clientId ? clientId : 'Any User'\"></span>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <div class=\"p-2 text-muted\" data-bind=\"visible: reports.length === 0\">\r\n No matching reports found\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-success\" data-bind=\"click: exportFoldersReportJson\">Export Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.openApplySecurityModal, enable: $root.anyReportSelected\">Apply Security to All Selected</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.deleteSelectedItems, enable: $root.anyReportSelected\">Delete All Selected</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"modal\" id=\"applySecurityModal\" tabindex=\"-1\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog modal-lg\" data-bind=\"if: $root.anyReportSelected\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\">Apply Security to All Selected</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div data-bind=\"template: { name: 'manage-access-template', data: $root.manageAccess }\"></div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button class=\"btn btn-primary\" data-bind=\"click: $root.applySecurityToAll\">Apply to All</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<!-- Import Json File Modal -->\r\n<div class=\"modal\" id=\"uploadFileModal\" tabindex=\"-1\" aria-labelledby=\"uploadFileModalLabel\" aria-hidden=\"true\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\" data-bind=\"with: ManageJsonFile\">\r\n <div class=\"modal-header\">\r\n <h5 class=\"modal-title\" id=\"uploadFileModalLabel\">Import previously Exported Reports</h5>\r\n <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>\r\n </div>\r\n <div class=\"modal-body\">\r\n\r\n <div class=\"alert alert-info small\">\r\n <strong>Instructions:</strong><br />\r\n \u2022 Select a <code>.json</code> file previously exported from Dotnet Report.<br />\r\n \u2022 The file may include multiple reports and their folders.<br />\r\n \u2022 Any missing folders will be created automatically.<br />\r\n \u2022 If a report with the same name already exists, you will be prompted to:\r\n <em>Skip</em>, <em>Overwrite</em>, or <em>Make a Copy</em>.<br />\r\n \u2022 Once uploaded, all imported reports will be available immediately.\r\n </div>\r\n\r\n <div id=\"dropzone\" class=\"dropzone\"\r\n data-bind=\"event: {click: triggerFileInput }\"\r\n style=\"border: 2px dashed #007bff; border-radius: 5px; padding: 30px; text-align: center; color: #007bff; cursor: pointer;\">\r\n Click here to select a JSON file\r\n </div>\r\n\r\n <input type=\"file\" id=\"fileInputJson\" accept=\".json\" style=\"display: none;\"\r\n data-bind=\"event: { change: handleFileSelect }\">\r\n\r\n <div class=\"mt-3\" data-bind=\"visible: fileName\">\r\n <p><strong>Selected File:</strong> <span data-bind=\"text: fileName\"></span></p>\r\n </div>\r\n\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-primary\" data-bind=\"click: uploadFile\">Upload</button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Templates -->\r\n<div [innerHtml]=\"reportTemplates\"></div>\r\n<!-- Templates -->", styles: [".glyphicon-ok:before{content:\"\\f00c\"}.glyphicon-remove:before{content:\"\\f00d\"}.glyphicon{display:inline-block;font: 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}\n"] }]
3189
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1.DomSanitizer }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
3189
3190
  type: Inject,
3190
3191
  args: [BASE_URL_TOKEN]
3191
- }] }, { type: i2.HttpClient }, { type: i3.ActivatedRoute }]; } });
3192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0c2V0dXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG90bmV0cmVwb3J0LWxpYi9zcmMvbGliL2RvdG5ldHNldHVwL2RvdG5ldHNldHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RvdG5ldHJlcG9ydC1saWIvc3JjL2xpYi9kb3RuZXRzZXR1cC9kb3RuZXRzZXR1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxNQUFNLEVBQStCLE1BQU0sZUFBZSxDQUFDO0FBRWxHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFZMUQsTUFBTSxPQUFPLG9CQUFvQjtJQU1yQjtJQUNBO0lBQ3dCO0lBQ3hCO0lBQ0E7SUFURixjQUFjLENBQVM7SUFDeEIsZUFBZSxDQUFXO0lBQ3pCLFdBQVcsQ0FBNEI7SUFFL0MsWUFBWSxRQUFrQixFQUNwQixTQUF1QixFQUN2QixLQUF3QixFQUNBLE9BQWUsRUFDdkMsSUFBZ0IsRUFDaEIsS0FBcUI7UUFKckIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUNBLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUUzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsOEJBQThCO1FBQzNFLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFHSCxRQUFRO1FBQ04sSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLGtDQUFrQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ25ELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUM7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLEdBQUcsY0FBYyxHQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNwSCxJQUFJLE9BQU8sR0FBRztnQkFDVixLQUFLLEVBQUUsS0FBSztnQkFDWixZQUFZLEVBQUUsMEJBQTBCO2dCQUN4QyxjQUFjLEVBQUUsd0JBQXdCO2dCQUN4QyxlQUFlLEVBQUUseUJBQXlCO2dCQUMxQyxxQkFBcUIsRUFBRSwrQkFBK0I7Z0JBQ3RELHVCQUF1QixFQUFFLGlDQUFpQztnQkFDMUQsZ0JBQWdCLEVBQUUsOEJBQThCO2dCQUNoRCxvQkFBb0IsRUFBRSw4QkFBOEI7Z0JBQ3BELFdBQVcsRUFBRSw4QkFBOEI7Z0JBQzNDLGFBQWEsRUFBRSw0QkFBNEI7Z0JBQzNDLGlCQUFpQixFQUFFLG1DQUFtQztnQkFDdEQsbUJBQW1CLEVBQUUsaUNBQWlDO2dCQUN0RCxlQUFlLEVBQUUsNkNBQTZDO2dCQUM5RCxpQkFBaUIsRUFBRSwyQkFBMkI7Z0JBQzlDLGlCQUFpQixFQUFFLCtCQUErQjtnQkFDbEQsZ0JBQWdCLEVBQUUsMEJBQTBCO2dCQUM1QyxnQkFBZ0IsRUFBRSwrQkFBK0I7Z0JBQ2pELGlCQUFpQixFQUFFLGtDQUFrQztnQkFDckQsYUFBYSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsZ0NBQWdDO2dCQUN0RSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLG1DQUFtQztnQkFDM0UsYUFBYSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsa0NBQWtDO2dCQUN4RSxnQkFBZ0IsRUFBRyxJQUFJLENBQUMsY0FBYyxHQUFHLG1DQUFtQztnQkFDNUUsTUFBTSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsb0NBQW9DO2dCQUNuRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLG9DQUFvQztnQkFDaEYsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGFBQWEsRUFBRSxrQkFBa0I7YUFDcEMsQ0FBQztZQUVGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFFaEUsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFeEMsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsV0FBVztRQUNULEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLElBQUk7UUFDUixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLGlCQUFpQjtRQUV0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThoR2pFLENBQUMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQzt3R0E5bUdZLG9CQUFvQix1R0FRckIsY0FBYzs0RkFSYixvQkFBb0IsdURDZmpDLDZ3b0pBMjZEa0I7OzRGRDU1REwsb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGlCQUFpQjs7MEJBYXhCLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQkFTRV9VUkxfVE9LRU4gfSBmcm9tICcuLy4uL2RvdG5ldHJlcG9ydC1saWIuZGknO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5kZWNsYXJlIHZhciBrbzogYW55O1xyXG5kZWNsYXJlIHZhciBtYW5hZ2VWaWV3TW9kZWw6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWRvdG5ldHNldHVwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG90bmV0c2V0dXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RvdG5ldHNldHVwLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERvdG5ldHNldHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgYmFzZVNlcnZpY2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgcmVwb3J0VGVtcGxhdGVzOiBTYWZlSHRtbDtcclxuICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBjZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KEJBU0VfVVJMX1RPS0VOKSBwcml2YXRlIGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IFxyXG5cclxuICAgICAgdGhpcy5iYXNlU2VydmljZVVybCA9IHRoaXMuYmFzZVVybCArICcvYXBpJzsgLy8gXCJodHRwOi8vbG9jYWxob3N0OjM5Mzc4XCI7IFxcXHJcbiAgICAgIHRoaXMucmVwb3J0VGVtcGxhdGVzID0gXCJcIjtcclxuICAgIH1cclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgbGV0IGxvYWRTZXR1cFNjaGVtYVVybCA9IHRoaXMuYmFzZVNlcnZpY2VVcmwgKyBcIi9Eb3ROZXRSZXBvcnRBcGkvTG9hZFNldHVwU2NoZW1hXCI7XHJcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuICAgIHZhciBkYXRhYmFzZUFwaUtleSA9IHRoaXMucXVlcnlQYXJhbXNbJ2RhdGFiYXNlQXBpS2V5J10gfHwgJyc7XHJcbiAgICB2YXIgb25seUFwaSA9IHRoaXMucXVlcnlQYXJhbXNbJ29ubHlBcGknXSA9PT0gJ2ZhbHNlJztcclxuIFxyXG4gICAgdGhpcy5odHRwLmdldChsb2FkU2V0dXBTY2hlbWFVcmwgKyBcIj9kYXRhYmFzZUFwaUtleT1cIiArIGRhdGFiYXNlQXBpS2V5ICsnJm9ubHlBcGk9JyArIG9ubHlBcGkpLnN1YnNjcmliZSgobW9kZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBtb2RlbDogbW9kZWwsXHJcbiAgICAgICAgICAgIHNhdmVUYWJsZVVybDogJy9SZXBvcnRBcGkvU2F2ZVRhYmxlRGF0YScsXHJcbiAgICAgICAgICAgIGRlbGV0ZVRhYmxlVXJsOiAnL1JlcG9ydEFwaS9EZWxldGVUYWJsZScsXHJcbiAgICAgICAgICAgIGdldFJlbGF0aW9uc1VybDogJy9SZXBvcnRBcGkvR2V0UmVsYXRpb25zJyxcclxuICAgICAgICAgICAgZ2V0RGF0YUNvbm5lY3Rpb25zVXJsOiAnL1JlcG9ydEFwaS9HZXREYXRhQ29ubmVjdGlvbnMnLFxyXG4gICAgICAgICAgICB1cGRhdGVEYXRhQ29ubmVjdGlvblVybDogJy9SZXBvcnRBcGkvVXBkYXRlRGF0YUNvbm5lY3Rpb24nLFxyXG4gICAgICAgICAgICBzYXZlUmVsYXRpb25zVXJsOiAnL1JlcG9ydEFwaS9TYXZlUmVsYXRpb25zRGF0YScsXHJcbiAgICAgICAgICAgIGFkZERhdGFDb25uZWN0aW9uVXJsOiAnL1JlcG9ydEFwaS9BZGREYXRhQ29ubmVjdGlvbicsXHJcbiAgICAgICAgICAgIHNhdmVQcm9jVXJsOiAnL1JlcG9ydEFwaS9TYXZlUHJvY2VkdXJlRGF0YScsXHJcbiAgICAgICAgICAgIGRlbGV0ZVByb2NVcmw6ICcvUmVwb3J0QXBpL0RlbGV0ZVByb2NlZHVyZScsXHJcbiAgICAgICAgICAgIHNhdmVDdXN0b21GdW5jVXJsOiAnL1JlcG9ydEFwaS9TYXZlQ3VzdG9tRnVuY3Rpb25EYXRhJyxcclxuICAgICAgICAgICAgZGVsZXRlQ3VzdG9tRnVuY1VybDogJy9SZXBvcnRBcGkvRGVsZXRlQ3VzdG9tRnVuY3Rpb24nLFxyXG4gICAgICAgICAgICBnZXRTY2hlZHVsZXNVcmw6ICcvUmVwb3J0QXBpL0dldFNjaGVkdWxlZFJlcG9ydHNBbmREYXNoYm9hcmRzJyxcclxuICAgICAgICAgICAgZGVsZXRlU2NoZWR1bGVVcmw6ICcvUmVwb3J0QXBpL0RlbGV0ZVNjaGVkdWxlJyxcclxuICAgICAgICAgICAgc2F2ZUNhdGVnb3JpZXNVcmw6ICcvUmVwb3J0QXBpL1NhdmVDYXRlZ29yaWVzRGF0YScsXHJcbiAgICAgICAgICAgIGdldENhdGVnb3JpZXNVcmw6ICcvUmVwb3J0QXBpL0dldENhdGVnb3JpZXMnLFxyXG4gICAgICAgICAgICBnZXRBcHBTZXR0aW5nVXJsOiAnL1JlcG9ydEFwaS9HZXRBY2NvdW50U2V0dGluZ3MnLFxyXG4gICAgICAgICAgICBzYXZlQXBwU2V0dGluZ1VybDogJy9SZXBvcnRBcGkvQ2hhbmdlQWNjb3VudFNldHRpbmdzJyxcclxuICAgICAgICAgICAgcmVwb3J0c0FwaVVybDogIHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9DYWxsUmVwb3J0QXBpJyxcclxuICAgICAgICAgICAgZ2V0VXNlcnNBbmRSb2xlczogdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL0dldFVzZXJzQW5kUm9sZXMnLFxyXG4gICAgICAgICAgICBzZWFyY2hQcm9jVXJsOiAgdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL1NlYXJjaFByb2NlZHVyZScsXHJcbiAgICAgICAgICAgIGdldFNjaGVtYUZyb21TcWw6ICB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgJy9Eb3ROZXRSZXBvcnRBcGkvR2V0U2NoZW1hRnJvbVNxbCcsXHJcbiAgICAgICAgICAgIGFwaVVybDogIHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9DYWxsUG9zdFJlcG9ydEFwaScsXHJcbiAgICAgICAgICAgIGdldFByZXZpZXdGcm9tU3FsVXJsOiB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgJy9Eb3ROZXRSZXBvcnRBcGkvR2V0UHJldmlld0Zyb21TcWwnLFxyXG4gICAgICAgICAgICBvbmx5QXBpOiBvbmx5QXBpLFxyXG4gICAgICAgICAgICBsb2FkU2NoZW1hVXJsOiBsb2FkU2V0dXBTY2hlbWFVcmxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcktPVGVtcGxhdGVzKCk7XHJcbiAgICAgICAgdmFyIHZtID0gbmV3IG1hbmFnZVZpZXdNb2RlbChvcHRpb25zKTtcclxuICAgICAgICB2bS5Mb2FkSm9pbnMoKTtcclxuICAgICAgICB2bS5zZXR1cE1hbmFnZUFjY2VzcygpO1xyXG4gICAgICAgIHZtLkxvYWRTY2hlZHVsZXMoKTtcclxuICAgICAgICB2bS5Mb2FkQ2F0ZWdvcmllcygpO1xyXG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3Modm0sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuXHJcbiAgICAgICAgdm0uTG9hZERhdGFDb25uZWN0aW9ucygpO1xyXG4gICAgICAgIHZtLmN1c3RvbVNxbC50ZXh0UXVlcnkuc2V0dXBRdWVyeSgpO1xyXG4gICAgICAgICAgICBcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAga28uY2xlYW5Ob2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuIH1cclxuIFxyXG4gcHVibGljIGluaXQoKSB7XHJcbiAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cclxuIHByaXZhdGUgcmVuZGVyS09UZW1wbGF0ZXMoKSB7XHJcbiAgXHJcbiAgICB0aGlzLnJlcG9ydFRlbXBsYXRlcyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGA8IS0tIERvdG5ldCBSZXBvcnQgSFRNTCBUZW1wbGF0ZXMgLS0+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWZpbHRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdmaWx0ZXItJyt1aUlkIH1cIj5cclxuICAgICAgICA8IS0tIGtvIGlmOiAhaGFzRm9yZWlnbktleS0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnRGF0ZVRpbWUnLCdEYXRlJywnVGltZSddLmluZGV4T2YoZmllbGRUeXBlKSAhPSAtMSAtLT5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnPScsJz4nLCc8JywnPj0nLCc8PScsICdub3QgZXF1YWwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6ICRwYXJlbnQuZm10VmFsdWUsIGRhdGVwaWNrZXJPcHRpb25zOiB7dmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXQoKSA9PT0gJ0N1c3RvbScgPyBjdXN0b21EYXRlRm9ybWF0KCkucmVwbGFjZSgveXl5eS9nLCAneXknKSA6ICRyb290LmRhdGVGb3JtYXRNYXBwaW5nc1tkYXRlRm9ybWF0KCldfVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IGZpZWxkVHlwZT09J1RpbWUnIHx8IGZpZWxkRm9ybWF0KCk9PSdUaW1lJyB8fCBmaWVsZEZvcm1hdCgpPT0nRGF0ZSBhbmQgVGltZSctLT5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRpbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTokcGFyZW50LlZhbHVldGltZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogWydiZXR3ZWVuJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgIEZyb21cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCBjbGFzcz1cImZvcm0tY29udHJvbCBmcm9tLWRhdGVcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiAkcGFyZW50LmZtdFZhbHVlLCBkYXRlcGlja2VyT3B0aW9uczoge3ZhbHVlOiAkcGFyZW50LlZhbHVlLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0KCkgPT09ICdDdXN0b20nID8gY3VzdG9tRGF0ZUZvcm1hdCgpLnJlcGxhY2UoL3l5eXkvZywgJ3l5JykgOiAkcm9vdC5kYXRlRm9ybWF0TWFwcGluZ3NbZGF0ZUZvcm1hdCgpXX1cIiAvPlxyXG4gICAgICAgICAgICA8IS0tIGtvIGlmOmZpZWxkVHlwZT09J1RpbWUnIHx8IGZpZWxkRm9ybWF0KCk9PSdUaW1lJyB8fCBmaWVsZEZvcm1hdCgpPT0nRGF0ZSBhbmQgVGltZSctLT5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRpbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTokcGFyZW50LlZhbHVldGltZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB0b1xyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlucHV0IGRhdGEtYmluZD1cImRhdGVwaWNrZXI6ICRwYXJlbnQuZm10VmFsdWUyLCBkYXRlcGlja2VyT3B0aW9uczoge3ZhbHVlOiAkcGFyZW50LlZhbHVlMiwgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdCgpID09PSAnQ3VzdG9tJyA/IGN1c3RvbURhdGVGb3JtYXQoKS5yZXBsYWNlKC95eXl5L2csICd5eScpIDogJHJvb3QuZGF0ZUZvcm1hdE1hcHBpbmdzW2RhdGVGb3JtYXQoKV19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdG8tZGF0ZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6ZmllbGRUeXBlPT0nVGltZScgfHwgZmllbGRGb3JtYXQoKT09J1RpbWUnIHx8IGZpZWxkRm9ybWF0KCk9PSdEYXRlIGFuZCBUaW1lJy0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGltZVwiIGRhdGEtYmluZD1cInZhbHVlOiRwYXJlbnQuVmFsdWV0aW1lMlwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBbJ3JhbmdlJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5Ub2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRvZGF5ICs8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5Ub2RheSAtPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+WWVzdGVyZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VGhpcyBXZWVrPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCBXZWVrPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VGhpcyBNb250aDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPkxhc3QgTW9udGg8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MYXN0IFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFdlZWsgVG8gRGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRoaXMgTW9udGggVG8gRGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRoaXMgWWVhciBUbyBEYXRlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCAzMCBEYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwhLS08b3B0aW9uPlRoaXMgTW9udGggTGFzdCBZZWFyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCBNb250aCBMYXN0IFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MYXN0IFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5GaXJzdCBRdWFydGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+U2Vjb25kIFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlyZCBRdWFydGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+Rm91cnRoIFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5OZXh0IDYgTW9udGhzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCA2IE1vbnRoczwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPjIgWWVhcnMgYWdvPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+MyBZZWFycyBhZ288L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj40IFllYXJzIGFnbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPjUgWWVhcnMgYWdvPC9vcHRpb24+LS0+XHJcbiAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkNvbXBhcmlzb24gT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBUb2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj48PSBUb2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBUb2RheSArPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uPjw9IFRvZGF5ICs8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24+Pj0gVG9kYXkgLTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj48PSBUb2RheSAtPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvb3B0Z3JvdXA+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5WYWx1ZSgpLmluZGV4T2YoJ1RvZGF5ICsnKSA+PSAwIHx8ICRwYXJlbnQuVmFsdWUoKS5pbmRleE9mKCdUb2RheSAtJykgPj0gMFwiIGNsYXNzPVwiZm9ybS1ncm91cCBwdWxsLWxlZnRcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc20gcHVsbC1sZWZ0XCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHBhcmVudC5WYWx1ZTJcIiByZXF1aXJlZCAvPjxzcGFuIHN0eWxlPVwicGFkZGluZzogNXB4IDVweDtcIiBjbGFzcz1cInB1bGwtbGVmdFwiPiBkYXlzPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnSW50JywnTW9uZXknLCdGbG9hdCcsJ0RvdWJsZSddLmluZGV4T2YoZmllbGRUeXBlKSAhPSAtMSAtLT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogWyc9JywnPicsJzwnLCc+PScsJzw9JywgJ25vdCBlcXVhbCddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAmJiBbJ2lzIGJsYW5rJywgJ2lzIG5vdCBibGFuaycsICdpcyBudWxsJywgJ2lzIG5vdCBudWxsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpID09IC0xIC0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCdcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnaW4nLCAnbm90IGluJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnYmV0d2VlbiddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAtLT5cclxuICAgICAgICAgICAgRnJvbVxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICBUb1xyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUyXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBmaWVsZFR5cGU9PSdCb29sZWFuJyAmJiBbJ2lzIGJsYW5rJywgJ2lzIG5vdCBibGFuaycsICdpcyBudWxsJywgJ2lzIG5vdCBudWxsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpID09IC0xIC0tPlxyXG4gICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlLCBkaXNhYmxlOiAkcGFyZW50Lk9wZXJhdG9yKCkgPT0gJ2lzIGRlZmF1bHQnXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+WWVzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIwXCI+Tm88L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludCcsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnLCdEYXRlJywnRGF0ZVRpbWUnLCdUaW1lJywnQm9vbGVhbiddLmluZGV4T2YoZmllbGRUeXBlKSA9PSAtMSAmJiBbJ2lzIGJsYW5rJywgJ2lzIG5vdCBibGFuaycsICdpcyBudWxsJywgJ2lzIG5vdCBudWxsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpID09IC0xIC0tPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCcsYXR0cjoge2lkOiAnY3RsLScgKyAkZWxlbWVudC5jbG9zZXN0KCdbZGF0YS1wYXJlbnRwcmVmaXhdJykuZ2V0QXR0cmlidXRlKCdkYXRhLXBhcmVudHByZWZpeCcpICsgJy0nICsgdWlJZH1cIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IGhhc0ZvcmVpZ25LZXkgJiYgJHBhcmVudC5PcGVyYXRvcigpICE9ICdhbGwnIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IGhhc0ZvcmVpZ25QYXJlbnRLZXkgJiYgJHBhcmVudC5zaG93UGFyZW50RmlsdGVyKCkgLS0+XHJcbiAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgZHJvcGRvd25QYXJlbnQ6ICcjZmlsdGVyLScrdWlJZCwgcGxhY2Vob2xkZXI6ICdQbGVhc2UgQ2hvb3NlJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiAkcGFyZW50LlBhcmVudExpc3QsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJHBhcmVudC5Jc0NvbmRpdGlvbmFsRmlsdGVyID8gJ3RleHQnOiAnaWQnLCBzZWxlY3RlZE9wdGlvbnM6ICRwYXJlbnQuUGFyZW50SW5cIj48L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50Lk9wZXJhdG9yKCk9PSc9Jy0tPlxyXG4gICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7IGRyb3Bkb3duUGFyZW50OiAnI2ZpbHRlci0nK3VpSWQsIHBsYWNlaG9sZGVyOiAnUGxlYXNlIENob29zZScsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogJHBhcmVudC5Mb29rdXBMaXN0LCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICAgJHBhcmVudC5Jc0NvbmRpdGlvbmFsRmlsdGVyID8gJ3RleHQnOiAnaWQnLCB2YWx1ZTogJHBhcmVudC5WYWx1ZSwgb3B0aW9uc0NhcHRpb246ICdQbGVhc2UgQ2hvb3NlJ1wiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuT3BlcmF0b3IoKT09J2luJyB8fCAkcGFyZW50Lk9wZXJhdG9yKCk9PSdub3QgaW4nLS0+XHJcbiAgICAgICAgPHNlbGVjdCByZXF1aXJlZCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgZHJvcGRvd25QYXJlbnQ6ICcjZmlsdGVyLScrdWlJZCwgcGxhY2Vob2xkZXI6ICdQbGVhc2UgQ2hvb3NlJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiAkcGFyZW50Lkxvb2t1cExpc3QsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJHBhcmVudC5Jc0NvbmRpdGlvbmFsRmlsdGVyID8gJ3RleHQnOiAnaWQnLCBzZWxlY3RlZE9wdGlvbnM6ICRwYXJlbnQuVmFsdWVJblwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJwYWdlci10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMlwiPlxyXG5cclxuICAgICAgICA8IS0tIFJvd3MgcGVyIHBhZ2UgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgbXMtMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5QYWdlIHNpemU6PC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gdy1hdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBwYWdlU2l6ZU9wdGlvbnMsIHZhbHVlOiBwYWdlU2l6ZVwiPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBJbm5lciBib3JkZXIgYmxvY2sgZm9yIHBhZ2UgbmF2aWdhdGlvbiBjb250cm9scyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBtcy0zXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgdGl0bGU9XCJGaXJzdFwiIGRhdGEtYmluZD1cImNsaWNrOiBmaXJzdCwgZW5hYmxlOiAhaXNGaXJzdFBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gcGFnZXItYnRuIG1zLTFcIiBhcmlhLWxhYmVsPVwiRmlyc3QgUGFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiB0aXRsZT1cIlByZXZpb3VzXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHByZXZpb3VzLCBlbmFibGU6ICFpc0ZpcnN0UGFnZSgpXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBwYWdlci1idG5cIiBhcmlhLWxhYmVsPVwiUHJldmlvdXMgUGFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1sZWZ0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+UGFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSB0ZXh0LWNlbnRlciBwYWdlci1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNjBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZhbHVlOiBjdXJyZW50UGFnZSwgYXR0cjogeyBtYXg6IHBhZ2VzKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+b2Y8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBwYWdlc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiIHRpdGxlPVwiTmV4dFwiIGRhdGEtYmluZD1cImNsaWNrOiBuZXh0LCBlbmFibGU6ICFpc0xhc3RQYWdlKClcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXNtIHBhZ2VyLWJ0blwiIGFyaWEtbGFiZWw9XCJOZXh0IFBhZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgdGl0bGU9XCJMYXN0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGxhc3QsIGVuYWJsZTogIWlzTGFzdFBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gcGFnZXItYnRuXCIgYXJpYS1sYWJlbD1cIkxhc3QgUGFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3VibGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcblxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtY29sdW1uLWhlYWRlclwiPlxyXG4gICAgPCEtLSBrbyBmb3JlYWNoOiBDb2x1bW5zIC0tPlxyXG4gICAgPHRoIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICFJc1Bpdm90RmllbGQgPyBmaWVsZElkIDogJ3Bpdm90LS0nICsgZmllbGROYW1lIH0sIHN0eWxlOiB7J3RleHQtYWxpZ24nOiBmaWVsZEFsaWduKCkgPyBmaWVsZEFsaWduKCkgOiAoSXNOdW1lcmljID8gJ3JpZ2h0JyA6ICdsZWZ0JyksICdiYWNrZ3JvdW5kLWNvbG9yJzogaGVhZGVyQmFja0NvbG9yIH0sIGhpZGRlbjogb3V0ZXJHcm91cFwiIHN0eWxlPVwiYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIiBkYXRhLWJpbmQ9XCJpZjogISRwYXJlbnQuSXNEcmlsbERvd24oKVwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHVwXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwiZmFsc2VcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLXYgc29ydGFibGVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDx1bCBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhSXNQaXZvdEZpZWxkXCIgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAxO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gc21hbGxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhSXNOdW1lcmljXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZU91dGVyR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xvbmVcIj48L3NwYW4+IE91dGVyIEdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogc2V0dXBGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvc3Bhbj4gRmllbGQgU2V0dGluZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aH1cIj5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpIC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZExhYmVsKCkgPyBmaWVsZExhYmVsKCkgOiBmaWVsZE5hbWUsIHN0eWxlOiB7J2NvbG9yJzogaGVhZGVyRm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBoZWFkZXJGb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCd9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZm5vdDogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpICAtLT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBpZiAoIUlzUGl2b3RGaWVsZCkgeyAkcGFyZW50c1twYWdlckluZGV4KCRwYXJlbnRzKV0uY2hhbmdlU29ydChTcWxGaWVsZCk7IH0gfSwgc3R5bGU6IHsnY29sb3InOiBoZWFkZXJGb250Q29sb3IsICdmb250LXdlaWdodCc6IGhlYWRlckZvbnRCb2xkKCkgPyAnYm9sZCcgOiAnbm9ybWFsJ31cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRwYXJlbnQuSXNEcmlsbERvd24oKSAmJiBmaWVsZExhYmVsMigpID8gZmllbGRMYWJlbDIoKSA6IChmaWVsZExhYmVsKCkgPyBmaWVsZExhYmVsKCkgOiBmaWVsZE5hbWUpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJHBhcmVudHNbcGFnZXJJbmRleCgkcGFyZW50cyldLnBhZ2VyLnNvcnRDb2x1bW4oKSA9PT0gU3FsRmllbGQgPyAoJHBhcmVudHNbcGFnZXJJbmRleCgkcGFyZW50cyldLnBhZ2VyLnNvcnREZXNjZW5kaW5nKCkgPyAnJiM5NjYwOycgOiAnJiM5NjUwOycpIDogJydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3RoPlxyXG4gICAgPCEtLSAva28gLS0+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtd2lkZ2V0XCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyB3aWR0aDogMTAwJTtmb250LXNpemU6IDQ4cHhcIj5cclxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSb3dzLmxlbmd0aCA8IDFcIiB0aXRsZT1cIk5vIGRhdGEgZm91bmRcIj4vPC9zcGFuPlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBSb3dzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiAkcGFyZW50LnJvd3NbMF0uSXRlbXNbMF1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50LlJvd3MubGVuZ3RoID4gMSA/ICgkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMl0uc2hvd1ByaW9ySW5LcGkgIT0gdW5kZWZpbmVkID8gJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLnNob3dQcmlvckluS3BpKCkgOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMV0uc2hvd1ByaW9ySW5LcGkoKSkgOiBmYWxzZSAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInN0eWxlOiB7J2NvbG9yJzogJHBhcmVudC5jYWxjdWxhdGVSYXRlKCkgPiAwID8gJ2dyZWVuJyA6ICdyZWQnLCAnZm9udC1zaXplJzogJzI0cHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6ICRwYXJlbnQuY2FsY3VsYXRlUmF0ZSgpICsgJyUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHsnZm9udC1zaXplJzogJzI0cHgnLCAnY29sb3InOiAnZ3JheSd9LCBjc3M6IHsndGV4dC1tdXRlZCc6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUHJpb3IgUGVyaW9kOiA8c3BhbiBkYXRhLWJpbmQ9XCJodG1sOiAkcGFyZW50LlJvd3NbMV0uSXRlbXNbMF0uZm9ybWF0dGVkVmFsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWNvbHVtblwiPlxyXG4gICAgPCEtLSBrbyBmb3JlYWNoOiBJdGVtcyAtLT5cclxuICAgIDx0ZCBkYXRhLWJpbmQ9XCJoaWRkZW46IG91dGVyR3JvdXAsIHN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiBfYmFja0NvbG9yID8/IGJhY2tDb2xvcigpLCAnY29sb3InOiBfZm9udENvbG9yID8/IGZvbnRDb2xvcigpLCAnZm9udC13ZWlnaHQnOiBmb250Qm9sZCgpIHx8IF9mb250Qm9sZCA/ICdib2xkJyA6ICdub3JtYWwnLCAndGV4dC1hbGlnbic6IGZpZWxkQWxpZ24oKSA/IGZpZWxkQWxpZ24oKSA6IChDb2x1bW4uSXNOdW1lcmljID8gJ3JpZ2h0JyA6ICdsZWZ0Jyl9XCI+XHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGggfSwgY3NzOiB7ICd0ZXh0LXdyYXAnOiBmaWVsZFdpZHRoIH1cIj5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogTGlua1RvLS0+XHJcbiAgICAgICAgICAgIDxhIGRhdGEtYmluZD1cImF0dHI6IHtocmVmOiBMaW5rVG99XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogZm9ybWF0dGVkVmFsXCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZm5vdDogTGlua1RvLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdGQ+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtcGl2b3RcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgZGF0YS1iaW5kPVwid2l0aDogUmVwb3J0RGF0YVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgdGFibGUtY29uZGVuc2VkXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZCBzdHlsZT1cInBvc2l0aW9uOiBzdGlja3k7IHRvcDogLTFweDsgei1pbmRleDogMjtcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBJdGVtc1swXS5Gb3JtYXR0ZWRWYWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkaW5kZXgoKSA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZExhYmVsIHx8IENvbHVtbk5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6ICRwYXJlbnQuUm93cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwic3R5bGU6IHsnYmFja2dyb3VuZC1jb2xvcic6ICRwYXJlbnQuYmFja0NvbG9yLCAnY29sb3InOiAkcGFyZW50LmZvbnRDb2xvciwgJ2ZvbnQtd2VpZ2h0JzogJHBhcmVudC5mb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCcsICd0ZXh0LWFsaWduJzogJHBhcmVudC5maWVsZEFsaWduID8gJHBhcmVudC5maWVsZEFsaWduIDogKCRwYXJlbnQuSXNOdW1lcmljID8gJ3JpZ2h0JyA6ICdsZWZ0JykgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBJdGVtc1skcGFyZW50Q29udGV4dC4kaW5kZXgoKV0uRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtdGFibGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgdGFibGUtY29uZGVuc2VkXCIgZGF0YS1iaW5kPVwiYXR0cjoge2NsYXNzOiAndGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWQgJyArICRwYXJlbnRzWzJdLnNlbGVjdGVkU3R5bGUoKX1cIj5cclxuICAgICAgICAgICAgPHRoZWFkIHN0eWxlPVwicG9zaXRpb246IHN0aWNreTsgdG9wOiAtMXB4OyB6LWluZGV4OiAyO1wiIGRhdGEtYmluZD1cImlmOiAhJHBhcmVudHNbMl0ubm9IZWFkZXJSb3coKVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibm8taGlnaGxpZ2h0XCIgZGF0YS1iaW5kPVwic29ydGFibGVDb2x1bW5zOiB7IGhhbmRsZTogJy5zb3J0YWJsZScsIGN1cnNvcjogJ21vdmUnLCBwbGFjZWhvbGRlcjogJ2Ryb3AtaGlnaGxpZ2h0JyxzZWxlY3RlZEZpZWxkczogJHBhcmVudHNbMl0uU2VsZWN0ZWRGaWVsZHMgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgIUlzRHJpbGxEb3duKCkgJiYgIUNhbkV4cGFuZE9wdGlvbigpICYmICghJHBhcmVudHNbMl0uaGFzUGl2b3RDb2x1bW4oKSB8fCAoJHBhcmVudHNbMl0uaGFzUGl2b3RDb2x1bW4oKSAmJiAkcGFyZW50c1syXS5hcHBTZXR0aW5ncy51c2VBbHRQaXZvdCkpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMHB4OyBib3JkZXItbGVmdDogMXB4IHNvbGlkO1wiIGRhdGEtYmluZD1cInN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiBDb2x1bW5zWzBdLmhlYWRlckJhY2tDb2xvcn1cIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uLWhlYWRlcicsIGRhdGE6ICRkYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAncmVwb3J0LXRhYmxlLWJvZHknICsgJHBhcmVudHNbMl0uUmVwb3J0SUQoKX1cIj5cclxuICAgICAgICAgICAgICAgIDx0ciBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUm93cy5sZW5ndGggPCAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46IENvbHVtbnMubGVuZ3RoICsgMX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3JkcyBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICEkcGFyZW50c1syXS51c2VSZW5kZXJUYWJsZSgpIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiAkcGFyZW50LnJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgISRwYXJlbnQuSXNEcmlsbERvd24oKSAmJiAhJHBhcmVudC5DYW5FeHBhbmRPcHRpb24oKSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMzBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIiBkYXRhLWJpbmQ9XCJzdHlsZTogeydiYWNrZ3JvdW5kLWNvbG9yJzogSXRlbXNbMF0uX2JhY2tDb2xvciA/PyBJdGVtc1swXS5iYWNrQ29sb3IoKSwgJ2NvbG9yJzogSXRlbXNbMF0uX2ZvbnRDb2xvciA/PyBJdGVtc1swXS5mb250Q29sb3IoKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgdG9nZ2xlKCk7IH1cIj48c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiB7J2ZhLXBsdXMnOiAhaXNFeHBhbmRlZCgpLCAnZmEtbWludXMnOiBpc0V4cGFuZGVkKCl9XCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBpc0V4cGFuZGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAzMHB4O1wiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46ICRwYXJlbnQuQ29sdW1ucy5sZW5ndGggfVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogIURyaWxsRG93bkRhdGEoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydC1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBEcmlsbERvd25EYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZFwiIGRhdGEtYmluZD1cIndpdGg6IERyaWxsRG93bkRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJuby1oaWdobGlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogJ3JlcG9ydC1jb2x1bW4taGVhZGVyJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSb3dzICYmIFJvd3MubGVuZ3RoIDwgMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwiYXR0cjoge2NvbHNwYW46IENvbHVtbnMubGVuZ3RofVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3JkcyBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBSb3dzICAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLWNlbnRlcmVkXCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlubGluZSBzbWFsbCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdCB0b3RhbC1yZWNvcmRzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogcGFnZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAnVG90YWwgUmVjb3JkczogJyArIHRvdGFsUmVjb3JkcygpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnQgdG90YWwtcmVjb3Jkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiB0aXRsZT1cIkRvd25sb2FkIEV4Y2VsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuZXhwb3J0RXhjZWxcIj48c3BhbiBjbGFzcz1cImZhIGZhLWZpbGUtZXhjZWwtb1wiPjwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIHRpdGxlPVwiVmlldyBDb2RlXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI3NxbERyaWxsRG93bk1vZGFsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuYWRtaW5Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNvZGVcIj48L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+ICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBwYWdlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdwYWdlci10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBzdWJSZXBvcnRzUmFuKCkubGVuZ3RoID4gMCAtLT5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwiYXR0cjp7Y29sc3BhbjogJHBhcmVudC5Db2x1bW5zLmxlbmd0aCB9XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBzdWJSZXBvcnRzUmFuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJwdWxsLWxlZnRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBSZXBvcnROYW1lXCI+PC9oMj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1vdmVyZmxvdy1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMDsgbWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGRhdGEtYmluZD1cImh0bWw6IFJlcG9ydERlc2NyaXB0aW9uLCB2aXNpYmxlOiBSZXBvcnREZXNjcmlwdGlvblwiPjwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IFJlcG9ydFJlc3VsdFwiIGNsYXNzPVwic21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6ICFSZXBvcnREYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydC1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBwdWxsLWxlZnQgdG90YWwtcmVjb3Jkc1wiIGRhdGEtYmluZD1cImlmOiB0b3RhbFJlY29yZHMoKT4xICYmICRwYXJlbnQuUmVwb3J0VHlwZSgpICE9ICdTaW5nbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1yaWdodFwiIGRhdGEtYmluZD1cImlmOiBwYWdlcygpPjEgJiYgJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0gJ1NpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudENvbnRleHQuJHBhcmVudC5TdWJUb3RhbHMoKS5sZW5ndGggPT0gMSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Lk91dGVyR3JvdXBDb2x1bW5zKCkubGVuZ3RoID09IDAgLS0+XHJcbiAgICAgICAgICAgIDx0Zm9vdCBkYXRhLWJpbmQ9XCJmb3JlYWNoOiAkcGFyZW50Q29udGV4dC4kcGFyZW50LlN1YlRvdGFsc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwic3ViLXRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudENvbnRleHQuJHBhcmVudENvbnRleHQuJHBhcmVudENvbnRleHQuJHBhcmVudC5jYW5EcmlsbGRvd24oKSAmJiAhJHBhcmVudC5Jc0RyaWxsRG93bigpICYmICEkcGFyZW50LkNhbkV4cGFuZE9wdGlvbigpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogVmFsdWUgIT0gJ05BJyAmJiBWYWx1ZSAhPSAnTmFOJyAmJiAhb3V0ZXJHcm91cCgpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWJpbmQ9XCJzdHlsZTogeydiYWNrZ3JvdW5kLWNvbG9yJzogX2JhY2tDb2xvciA/PyBiYWNrQ29sb3IoKSwgJ2NvbG9yJzogX2ZvbnRDb2xvciA/PyBmb250Q29sb3IoKSwgJ2ZvbnQtd2VpZ2h0JzogZm9udEJvbGQoKSB8fCBfZm9udEJvbGQgPyAnYm9sZCcgOiAnbm9ybWFsJywgJ3RleHQtYWxpZ24nOiBmaWVsZEFsaWduKCkgPyBmaWVsZEFsaWduKCkgOiAncmlnaHQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGZvb3Q+XHJcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1yZW5kZXJcIj5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogUmVwb3J0RGF0YVwiPlxyXG4gICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IFJvd3NcIj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImh0bWw6IHJlbmRlcmVkSHRtbCwgY3NzOiB7ICdjYXJkLXZpZXcnOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMV0uY2FyZFZpZXcgfVwiPjwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHN1YlJlcG9ydHNSYW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInB1bGwtbGVmdFwiIGRhdGEtYmluZD1cInRleHQ6IFJlcG9ydE5hbWVcIj48L2gyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1vdmVyZmxvdy1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMDsgbWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgZGF0YS1iaW5kPVwiaHRtbDogUmVwb3J0RGVzY3JpcHRpb24sIHZpc2libGU6IFJlcG9ydERlc2NyaXB0aW9uXCI+PC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBSZXBvcnRSZXN1bHRcIiBjbGFzcz1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6ICFSZXBvcnREYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0LXNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBwYWdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1sZWZ0IHRvdGFsLXJlY29yZHNcIiBkYXRhLWJpbmQ9XCJpZjogdG90YWxSZWNvcmRzKCk+MSAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJpZjogcGFnZXMoKT4xICYmICRwYXJlbnQuUmVwb3J0VHlwZSgpICE9ICdTaW5nbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyZXBvcnQtY2hhcnRcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdjaGFydF9kaXZfJyArICRwYXJlbnQuUmVwb3J0SUQoKX0sIHZpc2libGU6ICRwYXJlbnQuaXNDaGFydFwiPjwvZGl2PlxyXG4gICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgPT0gJ1Bpdm90JyAtLT5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAncmVwb3J0LXBpdm90JywgZGF0YTogJGRhdGEgfVwiPjwvZGl2PlxyXG4gICAgPCEtLSAva28gLS0+XHJcblxyXG4gICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgPT0gJ0h0bWwnIC0tPlxyXG4gICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdyZXBvcnQtcmVuZGVyJywgZGF0YTogJGRhdGEgfVwiPjwvZGl2PlxyXG4gICAgPCEtLSAva28gLS0+XHJcblxyXG4gICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0gJ1Bpdm90JyAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnSHRtbCcgJiYgKCEkcGFyZW50LmlzQ2hhcnQoKSB8fCAkcGFyZW50LlNob3dEYXRhV2l0aEdyYXBoKCkpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1ucygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwiZmFsc2VcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgTWFuYWdlIEdyb3VwcyA8c3BhbiBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLXZcIj48L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBzdHlsZT1cInotaW5kZXg6IDEwMDE7XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiByZW1vdmVcIiB0aXRsZT1cIlJlbW92ZSBmcm9tIEdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jbG9zZVwiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhci1maXhcIj48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IG91dGVyR3JvdXBEYXRhXCI+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogcm93cy5sZW5ndGggPiAwIHx8ICgkcGFyZW50Lm91dGVyR3JvdXBEYXRhICYmICRwYXJlbnQub3V0ZXJHcm91cERhdGEoKS5sZW5ndGggPT0gMSkgLS0+XHJcbiAgICAgICAgPGg2IGRhdGEtYmluZD1cImh0bWw6IGRpc3BsYXlcIj48L2g2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWzFdLlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJy0tPlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAncmVwb3J0LXRhYmxlJywgZGF0YTogJHBhcmVudC5SZXBvcnREYXRhIH1cIj48L2Rpdj5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50c1sxXS5SZXBvcnRUeXBlKCkgPT0gJ1NpbmdsZSctLT5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC13aWRnZXQnLCBkYXRhOiAkcGFyZW50LlJlcG9ydERhdGEgfVwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIC9rbyAtLT5cclxuPC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiYWRtaW4tbW9kZS10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogMTBweDtcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBhZG1pbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIGQtaW5saW5lLWJsb2NrXCIgc3R5bGU9XCJmb250LXNpemU6IDEwcHQ7IHBhZGRpbmc6IDVweDsgbWF4LXdpZHRoOiAzNTBweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXItY2lyY2xlXCI+PC9pPiBZb3UgY2FuIG1hbmFnZSBSZXBvcnRzL0Rhc2hib2FyZHMgZm9yIGFsbCB1c2Vyc1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1YmJsZS1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEFkbWluIE1vZGVcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBhZG1pbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlXCI+XHJcbiAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1rZXlcIj48L3NwYW4+TWFuYWdlIEFjY2VzczwvaDU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBwYW5lbC1ib2R5XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5DbGllbnQgSWQgdG8gUmVzdHJpY3QgQWNjZXNzPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3ggc2luZ2xlLWxpbmVcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBjbGllbnRJZFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIGNvbC1zbS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiTGVhdmUgYmxhbmsgdG8gZ2l2ZSBhbGwgY2xpZW50cyBhY2Nlc3MgKEdsb2JhbCBSZXBvcnRzKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItbyBmYS0yeFwiPjwvc3Bhbj4mbmJzcDtVc2VyIGxldmVsIHJpZ2h0cyBvdmVycmlkZSBSb2xlIGxldmVsIHJpZ2h0cy4gTm8gc2VsZWN0aW9uIGZvciBhIHJ1bGUgaW1wbGllcyByZXBvcnQgaXMgYXZhaWxhYmxlIHRvIGFsbC5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidG9nZ2xlLWljb24gZmFcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlTWFuYWdlVXNlcnMsY3NzOiB7ICdmYS1jaGV2cm9uLWRvd24nOiBzaG93TWFuYWdlVXNlcnMoKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvd01hbmFnZVVzZXJzKCkgfVwiPjwvaT4gPGI+TWFuYWdlIGJ5IFVzZXI8L2I+IChhbGxvdyBlZGl0KVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzaG93TWFuYWdlVXNlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBncm91cGVkVXNlcnMoKS5sZW5ndGggPiAwIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogZ3JvdXBlZFVzZXJzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHNob3coIXNob3coKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSB0b2dnbGUtaWNvblwiIGRhdGEtYmluZD1cImNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvdygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93KCkgfVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBkYXRhLWJpbmQ9XCJ0ZXh0OiBjYXRlZ29yeVwiPjwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB1c2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4gJm5ic3A7IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7IDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGdyb3VwZWRVc2VycygpLmxlbmd0aCA9PSAwICYmIHVzZXJzLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB1c2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBncm91cGVkVXNlcnMoKS5sZW5ndGggPT0gMCAmJiB1c2Vycy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VycyBsaXN0IG5vdCBwb3B1bGF0ZWQgb3Igbm90IGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRvZ2dsZS1pY29uIGZhXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZVZpZXdVc2Vycyxjc3M6IHsgJ2ZhLWNoZXZyb24tZG93bic6IHNob3dWaWV3VXNlcnMoKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvd1ZpZXdVc2VycygpIH1cIj48L2k+IDxiPlZpZXcgb25seSBieSBVc2VyPC9iPiAobm8gZWRpdC9kZWxldGUpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dWaWV3VXNlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBncm91cGVkVmlld09ubHlVc2VycygpLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBncm91cGVkVmlld09ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaGVhZGVyXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBzaG93KCFzaG93KCkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgdG9nZ2xlLWljb25cIiBkYXRhLWJpbmQ9XCJjc3M6IHsgJ2ZhLWNoZXZyb24tZG93bic6IHNob3coKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvdygpIH1cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgZGF0YS1iaW5kPVwidGV4dDogY2F0ZWdvcnlcIj48L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzaG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogdmlld09ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4gJm5ic3A7IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7IDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGdyb3VwZWRWaWV3T25seVVzZXJzKCkubGVuZ3RoID09IDAgJiYgdmlld09ubHlVc2Vycy5sZW5ndGggPiAwIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogdmlld09ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBncm91cGVkVmlld09ubHlVc2VycygpLmxlbmd0aCA9PSAwICYmIHVzZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWZub3Q6IGlzRGFzaGJvYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0b2dnbGUtaWNvbiBmYVwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVEZWxldGVVc2Vycyxjc3M6IHsgJ2ZhLWNoZXZyb24tZG93bic6IHNob3dEZWxldGVVc2VycygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93RGVsZXRlVXNlcnMoKSB9XCI+PC9pPjxiPkRlbGV0ZSBieSBVc2VyPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd0RlbGV0ZVVzZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogZ3JvdXBlZERlbGV0ZU9ubHlVc2VycygpLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBncm91cGVkRGVsZXRlT25seVVzZXJzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHNob3coIXNob3coKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSB0b2dnbGUtaWNvblwiIGRhdGEtYmluZD1cImNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvdygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93KCkgfVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBkYXRhLWJpbmQ9XCJ0ZXh0OiBjYXRlZ29yeVwiPjwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBkZWxldGVPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+ICZuYnNwOyA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwOyA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBncm91cGVkRGVsZXRlT25seVVzZXJzKCkubGVuZ3RoID09IDAgJiYgZGVsZXRlT25seVVzZXJzLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBkZWxldGVPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGdyb3VwZWREZWxldGVPbmx5VXNlcnMoKS5sZW5ndGggPT0gMCAmJiAgdXNlcnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRvZ2dsZS1pY29uIGZhXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZU1hbmFnZVJvbGVzLGNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvd01hbmFnZVJvbGVzKCksICdmYS1jaGV2cm9uLXJpZ2h0JzogIXNob3dNYW5hZ2VSb2xlcygpIH1cIj48L2k+PGI+TWFuYWdlIGJ5IFVzZXIgUm9sZTwvYj4gKGFsbG93IGVkaXQpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dNYW5hZ2VSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogdXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHVzZXJSb2xlcy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VyIFJvbGVzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidG9nZ2xlLWljb24gZmFcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlVmlld1JvbGVzLGNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvd1ZpZXdSb2xlcygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93Vmlld1JvbGVzKCkgfVwiPjwvaT48Yj5WaWV3IG9ubHkgYnkgVXNlciBSb2xlPC9iPiAobm8gZWRpdC9kZWxldGUpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dWaWV3Um9sZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHZpZXdPbmx5VXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHVzZXJSb2xlcy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VyIFJvbGVzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiBpc0Rhc2hib2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidG9nZ2xlLWljb24gZmFcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlRGVsZXRlUm9sZXMsY3NzOiB7ICdmYS1jaGV2cm9uLWRvd24nOiBzaG93RGVsZXRlUm9sZXMoKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvd0RlbGV0ZVJvbGVzKCkgfVwiPjwvaT48Yj5EZWxldGUgYnkgVXNlciBSb2xlPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd0RlbGV0ZVJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogZGVsZXRlT25seVVzZXJSb2xlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiB1c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgUm9sZXMgbGlzdCBub3QgcG9wdWxhdGVkIG9yIG5vdCBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1ncm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXIgZm9ybS1pbmxpbmVcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBGaWx0ZXJHcm91cHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXMtZ3JvdXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1ncm91cC1oZWFkZXJcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7cGFyZW50ZGl2aWQ6IGdlbmVyYXRlVW5pcXVlSWQoKX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogIWlzUm9vdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtdG9nZ2xlIGJ0bi1ncm91cC1zbVwiIGRhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uc1wiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBhY3RpdmVcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBkYXRhLWJpbmQ9XCJhdHRyOiB7IG5hbWU6ICdhbmRPckdyb3VwLScgKyAkZWxlbWVudC5jbG9zZXN0KCcucnVsZXMtZ3JvdXAtaGVhZGVyJykuZ2V0QXR0cmlidXRlKCdwYXJlbnRkaXZpZCcpIH0sIGNoZWNrZWQ6IEFuZE9yXCIgdmFsdWU9XCJBbmRcIiAvPiBBbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBkYXRhLWJpbmQ9XCJhdHRyOiB7IG5hbWU6ICdhbmRPckdyb3VwLScgKyAkZWxlbWVudC5jbG9zZXN0KCcucnVsZXMtZ3JvdXAtaGVhZGVyJykuZ2V0QXR0cmlidXRlKCdwYXJlbnRkaXZpZCcpIH0sIGNoZWNrZWQ6IEFuZE9yXCIgdmFsdWU9XCJPclwiIC8+IE9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuUmVtb3ZlRmlsdGVyR3JvdXAsIHZpc2libGU6ICFpc1Jvb3RcIj5SZW1vdmUgR3JvdXA8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpc1Jvb3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0IHBhZGRlZC1kaXZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiAmbmJzcDtGaWx0ZXIgQ29uZGl0aW9uczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1ncm91cC1ib2R5XCIgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAnZmlsdGVyLWlubmVyJ31cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJmbHktZmlsdGVyLXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiIGRhdGEtYmluZD1cInZpc2libGU6IEZseUZpbHRlcnMoKS5sZW5ndGg+MCB8fCBEb250RXhlY3V0ZU9uUnVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxhIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7J2RhdGEtYnMtdGFyZ2V0JzogJyNmaWx0ZXItcGFuZWwtJyArIFJlcG9ydElEKCkgfVwiIGhyZWY9XCIjXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT4gQ2hvb3NlIEZpbHRlcnNcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZmlsdGVyLXBhbmVsLScgKyBSZXBvcnRJRCgpIH0sIGNzczoge2NvbGxwYXNlZDogIURvbnRFeGVjdXRlT25SdW4oKSwgY29sbGFwc2U6ICFEb250RXhlY3V0ZU9uUnVuKCl9XCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogRmx5RmlsdGVycyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTUgY29sLXhzLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiIGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHRpdGxlPVwiQXBwbHkgdGhpcyBmaWx0ZXJcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiAkcGFyZW50LkFwcGx5LCBkaXNhYmxlZDogZm9yY2VkXCIgLz4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRGaWx0ZXJOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiIGNsYXNzPVwiY29sLXNtLTIgY29sLXhzLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5BcHBseVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBjbGFzcz1cImNvbC1zbS01IGNvbC14cy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRwYXJlbnQuQXBwbHlcIiBkYXRhLXBhcmVudHByZWZpeD1cIkZcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncmVwb3J0LWZpbHRlcicsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRXhlY3V0ZVJlcG9ydFwiPlJ1bjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZmlsdGVyLWlubmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicnVsZXMtbGlzdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiIGRhdGEtYmluZD1cInZpc2libGU6IEZpbHRlcnMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWJvcmRlcmxlc3NcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5GaWVsZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5GaWx0ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IEZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVwidmFsdWU6IEFuZE9yLCB2aXNpYmxlOiAkaW5kZXgoKT4wXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkFuZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPk9yPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMl0uc2VsZWN0ZWRGaWVsZHNDYW5GaWx0ZXIgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5zZWxlY3RlZEZpZWxkc0NhbkZpbHRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMV0uc2VsZWN0ZWRGaWVsZHNDYW5GaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ3NlbGVjdGVkRmllbGROYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnUGxlYXNlIENob29zZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyOiB7cmVxdWlyZWQ6IEZpZWxkKCk9PW51bGw/J3JlcXVpcmVkJzpmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBGaWVsZCgpICYmIEZpZWxkKCkuZm9yY2VkXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCIgZGF0YS1wYXJlbnRwcmVmaXg9XCJNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdyZXBvcnQtZmlsdGVyJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBGaWVsZCgpICYmIEZpZWxkKCkuZmllbGRUeXBlID09ICdEYXRlVGltZScgJiYgT3BlcmF0b3IoKSA9PSAncmFuZ2UnICYmICRpbmRleCgpPT0wIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5jYW5BZGRTZXJpZXMgIT0gdW5kZWZpbmVkICYmICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5jYW5BZGRTZXJpZXMoKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5BZGRTZXJpZXMuYmluZCgkZGF0YSlcIj5BZGQgQ29tcGFyaXNvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0va28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLmNhbkFkZFNlcmllcyA9PSB1bmRlZmluZWQgJiYgJHBhcmVudENvbnRleHQuJHBhcmVudC5jYW5BZGRTZXJpZXMgIT0gdW5kZWZpbmVkICYmICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuQWRkU2VyaWVzKCktLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuQWRkU2VyaWVzLmJpbmQoJGRhdGEpXCI+QWRkIENvbXBhcmlzb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0va28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogRmllbGQoKSAmJiBGaWVsZCgpLmZvcmNlZFwiIGNsYXNzPVwiYmFkZ2UgYmctaW5mb1wiPlJlcXVpcmVkIEZpbHRlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuUmVtb3ZlRmlsdGVyLCBoaWRkZW46IEZpZWxkKCkgJiYgRmllbGQoKS5mb3JjZWRcIiB0aXRsZT1cIlJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgZGF0YS1iaW5kPVwid2l0aDogRmllbGQsIGhpZGRlbjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ZpbHRlci1wYW5lbC5jYXJkLWJvZHkuY29sbGFwc2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGZpbHRlck9uRmx5KCFmaWx0ZXJPbkZseSgpKTsgfSwgY3NzOiB7J2J0bi1zdWNjZXNzJzogZmlsdGVyT25GbHkoKT09dHJ1ZSwgJ2J0bi1zZWNvbmRhcnknOiBmaWx0ZXJPbkZseSgpPT1mYWxzZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWZpbHRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRmlsdGVyIG9uIFJlcG9ydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGNvbXBhcmVUbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+Jm5ic3A7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudHNbMl0uUmVtb3ZlU2VyaWVzXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PC9zcGFuPjwvYnV0dG9uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGVkXCI+Q29tcGFyZSB0bzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogUmFuZ2UsIHZhbHVlOiBWYWx1ZVwiIHJlcXVpcmVkPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1ncm91cCd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogQWRkRmlsdGVyXCI+QWRkIEZpbHRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IEFkZEZpbHRlckdyb3VwXCI+QWRkIEZpbHRlciBHcm91cDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1wYXJhbWV0ZXJzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImhpZGRlbjogc2hvd1BhcmFtZXRlcnNcIj5ObyBmaWx0ZXJzIGF2YWlsYWJsZSB0byBjaG9vc2U8L3NwYW4+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1ib3JkZXJsZXNzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd1BhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMCVcIj5GaWx0ZXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAyMCVcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMCVcIj5WYWx1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogUGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGRhdGEtYmluZD1cImlmbm90OiBIaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwidGV4dDogRGlzcGxheU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogb3BlcmF0b3JzLCB2YWx1ZTogT3BlcmF0b3JcIiByZXF1aXJlZD48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBkYXRhLXBhcmVudHByZWZpeD1cIlBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC1maWx0ZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtc2NoZWR1bGVcIj5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogc2NoZWR1bGVCdWlsZGVyXCIgaWQ9XCJzY2hlZHVsZS1idWlsZGVyLWRpdlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoYXNTY2hlZHVsZVwiIGlkPVwic2NoZWR1bGVSZXBvcnRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2NoZWR1bGVSZXBvcnRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgU2V0IFNjaGVkdWxlIHRvIHNlbmQgYnkgRW1haWxcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBoYXNTY2hlZHVsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ0V2ZXJ5ICcgOiAnJ1wiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBvcHRpb25zLCB2YWx1ZTogc2VsZWN0ZWRPcHRpb25cIiBzdHlsZT1cIm1pbi13aWR0aDogODBweDtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2VsZWN0ZWRPcHRpb24oKSA9PSAnb25jZSdcIiBjbGFzcz1cIm1lLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICZuYnNwO29uJm5ic3A7PGlucHV0IGRhdGEtYmluZD1cImRhdGVwaWNrZXI6IHNlbGVjdGVkRGF0ZSwgZGF0ZXBpY2tlck9wdGlvbnM6IHt2YWx1ZTogc2VsZWN0ZWREYXRlfVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBzaG93RGF5c1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtvbiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG11bHRpcGxlIGNsYXNzPVwiZm9ybS1zZWxlY3QgbXMtMlwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgcGxhY2Vob2xkZXI6ICdDaG9vc2UgRGF5cycsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogZGF5cywgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZERheXNcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBzaG93RGF0ZXNcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tc2VsZWN0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ0Nob29zZSBEYXRlcycsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogZGF0ZXMsIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWREYXRlc1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tc2VsZWN0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ0Nob29zZSBNb250aHMnLCBhbGxvd0NsZWFyOiB0cnVlIH0sIG9wdGlvbnM6IG1vbnRocywgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE1vbnRoc1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNob3dBdFRpbWVcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDthdCZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgbWUtMlwiIHN0eWxlPVwibWluLXdpZHRoOiA2MHB4O1wiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGhvdXJzLCB2YWx1ZTogc2VsZWN0ZWRIb3VyXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBtZS0yXCIgc3R5bGU9XCJtaW4td2lkdGg6IDYwcHg7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogbWludXRlcywgdmFsdWU6IHNlbGVjdGVkTWludXRlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwibWluLXdpZHRoOiA4MHB4O1wiIGRhdGEtYmluZD1cInZhbHVlOiBzZWxlY3RlZEFtUG1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QU08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+UE08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgUmVwb3J0IHdpbGwgYmUgcnVuIGFuZCBlbWFpbGVkIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ2V2ZXJ5JyA6ICcnXCI+PC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE9wdGlvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzZWxlY3RlZE9wdGlvbigpID09ICdvbmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhc2VsZWN0ZWREYXRlKClcIj5QbGVhc2UgcGljayBhIERhdGU8L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkRGF0ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzaG93RGF5c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZERheXMoKS5sZW5ndGggPT0gMFwiPlBsZWFzZSBwaWNrIERheShzKTwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWREYXlzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dEYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZERhdGVzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBEYXRlKHMpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImZvcmVhY2g6IHNlbGVjdGVkRGF0ZXNcIj48c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkaW5kZXgoKT4wXCI+LCA8L3NwYW4+PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJGRhdGEgPT0gMSA/ICcxc3QnOiAoJGRhdGEgPT0gMiA/ICcybmQnIDogKCRkYXRhID09IDMgPyAnM3JkJyA6ICgkZGF0YSA9PSAzMSA/ICczMXN0JyA6ICRkYXRhKyd0aCcpKSlcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIj5cclxuICAgICAgICAgICAgICAgICAgICBvZiA8c3BhbiBjbGFzcz1cImVycm9yXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2VsZWN0ZWRNb250aHMoKS5sZW5ndGggPT0gMFwiPlBsZWFzZSBwaWNrIE1vbnRoKHMpPC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE1vbnRoc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzaG93QXRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgYXQgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRIb3VyXCI+PC9zcGFuPjo8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE1pbnV0ZVwiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRBbVBtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj5FbWFpbCB0bzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGVtYWlsVG9cIiBwbGFjZWhvbGRlcj1cIkVudGVyIEVtYWlsIEFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgY29tbWEgdG8gc2VuZCB0aGUgUmVwb3J0IHRvXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMSBjb2wtZm9ybS1sYWJlbFwiPkZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtYXQsZXZlbnQ6IHsgY2hhbmdlOiBvbkZvcm1hdENoYW5nZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRVhDRUxcIj5FeGNlbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LmNhbkRyaWxsZG93biAmJiAkcGFyZW50LmNhbkRyaWxsZG93bigpXCIgdmFsdWU9XCJFWENFTC1TVUJcIj5FeGNlbCAoRXhwYW5kZWQpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ1NWXCI+Q1NWPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUERGXCI+UERGPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiV09SRFwiPldvcmQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJMSU5LXCI+TGluazwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj5QaWNrIFRpbWUgWm9uZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IHRpbWV6b25PcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnZGlzcGxheU5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVmFsdWU6ICd0aW1lWm9uZUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkVGltZXpvbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDI6IHtkcm9wZG93blBhcmVudDogJCgnI3NjaGVkdWxlLWJ1aWxkZXItZGl2JyksIGFsbG93Q2xlYXI6IHRydWUsIHBsYWNlaG9sZGVyOiAnU2V0IGEgdGltZSB6b25lIHRvIHNlbmQgcmVwb3J0J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIHRpdGxlPVwiU2V0IGEgZGF0ZSB0byBzdGFydCBzZW5kaW5nIHNjaGVkdWxlZCByZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoYXNTY2hlZHVsZVN0YXJ0XCIgaWQ9XCJzY2hlZHVsZVN0YXJ0Q2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzY2hlZHVsZVN0YXJ0Q2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlZHVsZSBTdGFydCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIiBkYXRhLWJpbmQ9XCJpZjogaGFzU2NoZWR1bGVTdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6IHNjaGVkdWxlU3RhcnQsIGRhdGVwaWNrZXJPcHRpb25zOiB7dmFsdWU6IHNjaGVkdWxlU3RhcnR9XCIgdGl0bGU9XCJTY2hlZHVsZWQgUmVwb3J0IHdpbGwgbm90IGJlIHNlbnQgYmVmb3JlIHRoaXMgZGF0ZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIHRpdGxlPVwiU2V0IGEgZGF0ZSB0byBzdG9wIHNlbmRpbmcgc2NoZWR1bGVkIHJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGhhc1NjaGVkdWxlRW5kXCIgaWQ9XCJzY2hlZHVsZUVuZENoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2NoZWR1bGVFbmRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVkdWxlIEVuZCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIiBkYXRhLWJpbmQ9XCJpZjogaGFzU2NoZWR1bGVFbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiBzY2hlZHVsZUVuZCwgZGF0ZXBpY2tlck9wdGlvbnM6IHt2YWx1ZTogc2NoZWR1bGVFbmR9XCIgdGl0bGU9XCJTY2hlZHVsZWQgUmVwb3J0IHdpbGwgbm90IGJlIHNlbnQgYWZ0ZXIgdGhpcyBkYXRlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtZmllbGQtb3B0aW9uc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHN0eWxlPVwibWF4LXdpZHRoOiA3NTBweDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IGVkaXRGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj48c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZE5hbWVcIj48L3NwYW4+IC0gU2V0dXAgQWRkaXRpb25hbCBGaWVsZCBPcHRpb25zPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiPkNvbHVtbiBGb3JtYXQgU2V0dGluZ3M8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERhdGEgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBbJ0RheXMnLCAnSG91cnMnLCAnTWludXRlcycsICdTZWNvbmRzJ10uaW5kZXhPZihmaWVsZEZvcm1hdCgpKSA+PSAwID8gWydEYXlzJywgJ0hvdXJzJywgJ01pbnV0ZXMnLCAnU2Vjb25kcyddIDogJHBhcmVudHNbMV0uZmllbGRGb3JtYXRUeXBlcywgdmFsdWU6IGZpZWxkRm9ybWF0XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnRzWzFdLmRlY2ltYWxGb3JtYXRUeXBlcy5pbmRleE9mKCRkYXRhLmZpZWxkRm9ybWF0KCkpPj0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERlY2ltYWwgUGxhY2VzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGRlY2ltYWxQbGFjZXNcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGZpZWxkRm9ybWF0KCk9PSdDdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBpY2sgQ3VycmVuY3kgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50c1sxXS5jdXJyZW5jeUZvcm1hdHMsIG9wdGlvbnNUZXh0OiAnZGlzcGxheScsb3B0aW9uc1ZhbHVlOiAndmFsdWUnLCB2YWx1ZTogY3VycmVuY3lGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmllbGRGb3JtYXQoKT09J0RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50c1sxXS5kYXRlRm9ybWF0cywgdmFsdWU6IGRhdGVGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTpzZWxlY3RlZEFnZ3JlZ2F0ZSgpPT0nUGl2b3QnICYmIGZpZWxkRm9ybWF0KCk9PSdEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+UGl2b3QgRHJpbGxkb3duIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBbJycsICdEYXknLCAnTW9udGgnLCAnWWVhcicsICdNb250aC9ZZWFyJ10sIHZhbHVlOiBkcmlsbERhdGFGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGZpZWxkRm9ybWF0KCk9PSdEYXRlJyAmJiBkYXRlRm9ybWF0KCk9PT0nQ3VzdG9tJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+RW50ZXIgQ3VzdG9tIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBjdXN0b21EYXRlRm9ybWF0XCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgQ29sdW1uIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBmaWVsZExhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5Jbm5lciBDb2x1bW4gTGFiZWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZpZWxkTGFiZWwyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgVGV4dCBBbGlnbm1lbnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnRzWzFdLmZpZWxkQWxpZ25tZW50cywgdmFsdWU6IGZpZWxkQWxpZ25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgV2lkdGggKGxlYXZlIGJsYW5rIGZvciBhdXRvKTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZmllbGRXaWR0aFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5IZWFkZXIgU2V0dGluZ3M8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaWNrIFRleHQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHg7IGhlaWdodDogMzhweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGhlYWRlckZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBoZWFkZXJGb250Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgdGl0bGU9XCJBcHBseSB0byBhbGwgY29sdW1uc1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2FwcGx5QWxsSGVhZGVyRm9udENvbG9yKCFhcHBseUFsbEhlYWRlckZvbnRDb2xvcigpKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxIZWFkZXJGb250Q29sb3IoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGljayBCYWNrZ3JvdW5kIENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDM4cHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBoZWFkZXJCYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG1lLTJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhZGVyQmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEhlYWRlckJhY2tDb2xvcighYXBwbHlBbGxIZWFkZXJCYWNrQ29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsSGVhZGVyQmFja0NvbG9yKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoZWFkZXJGb250Qm9sZFwiIGlkPVwiaGVhZGVyRm9udEJvbGRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJoZWFkZXJGb250Qm9sZENoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvbGQgVGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxIZWFkZXJCb2xkKCFhcHBseUFsbEhlYWRlckJvbGQoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEhlYWRlckJvbGQoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UZXh0IFNldHRpbmdzPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGljayBUZXh0IENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDM4cHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBmb250Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxGb250Q29sb3IoIWFwcGx5QWxsRm9udENvbG9yKCkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEZvbnRDb2xvcigpID8gJ2ZhLWNoZWNrJyA6ICdmYS1wYXN0ZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaWNrIEJhY2tncm91bmQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHg7IGhlaWdodDogMzhweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGJhY2tDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIG1lLTJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogYmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEJhY2tDb2xvcighYXBwbHlBbGxCYWNrQ29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsQmFja0NvbG9yKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBmb250Qm9sZFwiIGlkPVwiZm9udEJvbGRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmb250Qm9sZENoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvbGQgVGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxCb2xkKCFhcHBseUFsbEJvbGQoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEJvbGQoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGVkLWRpdlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkge2FkZENvbmRpdGlvbmFsRm9ybWF0U2V0dGluZyhudWxsKX1cIj5BZGQgQ29uZGl0aW9uYWwgRm9ybWF0dGluZzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IGZpZWxkQ29uZHRpb25hbEZvcm1hdHNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNvbmRpdGlvbmFsIEZvcm1hdCAjPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJGluZGV4KCkrMVwiPjwvc3Bhbj48L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQucmVtb3ZlU2V0dGluZ1wiPlJlbW92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGljayBUZXh0IENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHg7IGhlaWdodDogMzhweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpY2sgQmFja2dyb3VuZCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDM4cHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZm9udEJvbGRcIiBpZD1cImZvbnRCb2xkQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZvbnRCb2xkQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvbGQgVGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtLTJcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmaWx0ZXIuRmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBmaWVsZEZpbHRlciwgdmFsdWU6ICRwYXJlbnQuT3BlcmF0b3JcIiByZXF1aXJlZD48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBkYXRhLXBhcmVudHByZWZpeD1cIkNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC1maWx0ZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiAkcGFyZW50c1sxXS51c2VTdG9yZWRQcm9jKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBwdWxsLWxlZnRcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGNoZWNrT3V0ZXJHcm91cFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0ZXIgR3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGNhbmNlbEZpZWxkT3B0aW9uc1wiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZpZWxkT3B0aW9uc1wiPlNhdmUgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWxpbmstZWRpdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHN0eWxlPVwibWF4LXdpZHRoOiA3NTBweDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IGVkaXRMaW5rRmllbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5TZXR1cCBMaW5rIEZpZWxkPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIiBkYXRhLWJpbmQ9XCJ3aXRoOiBsaW5rRmllbGRJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+VGhpcyBmaWVsZCB3aWxsIGxpbmsgdG88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBsaW5rVHlwZXMsIHZhbHVlOiBzZWxlY3RlZExpbmtUeXBlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IExpbmtzVG9SZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBSZXBvcnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuU2F2ZWRSZXBvcnRzLCBvcHRpb25zVGV4dDogJ3JlcG9ydE5hbWUnLCBvcHRpb25zVmFsdWU6ICdyZXBvcnRJZCcsIHZhbHVlOiBMaW5rZWRUb1JlcG9ydElkLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSB0aGUgUmVwb3J0IHRvIGxpbmsgdG8nXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImlmOiBMaW5rZWRUb1JlcG9ydElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBmaWVsZCB2YWx1ZSBhcyBSZXBvcnQgRmlsdGVyIFBhcmFtZXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBSZXBvcnQgRmlsdGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhbGxGaWVsZHMsIG9wdGlvbnNUZXh0OiAnZmllbGROYW1lJywgb3B0aW9uc1ZhbHVlOiAnZmllbGRJZCcsIHZhbHVlOiBTZWxlY3RlZEZpbHRlcklkLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSB0aGUgRmllbGQgdG8gRmlsdGVyIGJ5IHZhbHVlJ1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogTGlua3NUb1JlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+TGluayB0byB0aGlzIFVSTDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdXJsIHRvIG9wZW5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogTGlua1RvVXJsXCIgdGl0bGU9XCJWYWxpZCBVUkwgbmVlZHMgdG8gc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2VuZEFzUXVlcnlQYXJhbWV0ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBmaWVsZCB2YWx1ZSBhcyBRdWVyeSBQYXJhbWV0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJpZjogU2VuZEFzUXVlcnlQYXJhbWV0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBhcmFtZXRlciBOYW1lIHRvIHVzZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkVudGVyIHBhcmFtZXRlciBuYW1lIHRvIHNlbmQgdmFsdWUgYXNcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUXVlcnlQYXJhbWV0ZXJOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHJlbW92ZUxpbmtGaWVsZFwiPlJlbW92ZSBMaW5rPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlTGlua0ZpZWxkXCI+U2F2ZSBDaGFuZ2VzPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJkZXNpZ25lci1jaG9vc2UtdmlzdWFsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlZpc3VhbGl6YXRpb24gT3B0aW9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ0xpc3QnKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nTGlzdCcgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWxpc3QtYWx0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5MaXN0PC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1N1bW1hcnknKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nU3VtbWFyeScgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5TdW1tYXJ5PC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ0JhcicpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdCYXInIH1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1iYXItY2hhcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxwPkJhcjwvcD5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdQaWUnKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nUGllJyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtcGllLWNoYXJ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5QaWU8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnTGluZScpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdMaW5lJyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtbGluZS1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+TGluZTwvcD5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdDb21ibycpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdDb21ibycgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXNpZ25hbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+Q29tYm88L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnSHRtbCcpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdIdG1sJyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtY29kZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+Q3VzdG9tPC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ01hcCcpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCkuaW5kZXhPZignTWFwJyk9PTAgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWdsb2JlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5NYXA8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnSGVhdE1hcCcpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCkuaW5kZXhPZignSGVhdE1hcCcpPT0wIH1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1tYXBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxwPkhlYXRNYXA8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnU2luZ2xlJyk7IH0sIGNzczogeyBhY3RpdmU6IFJlcG9ydFR5cGUoKT09J1NpbmdsZScgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXdpbmRvdy1tYXhpbWl6ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+S1BJPC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1RyZWVtYXAnKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nVHJlZW1hcCcgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXdpbmRvdy1yZXN0b3JlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5UcmVlbWFwPC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1Bpdm90Jyk7IH0sIGNzczogeyBhY3RpdmU6IFJlcG9ydFR5cGUoKT09J1Bpdm90JyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtcmFuZG9tXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5UcmFuc3Bvc2U8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImRlc2lnbmVyLWNob29zZS1kYXRhXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnQgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGVcIiByb2xlPVwiZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogUmVwb3J0SUQoKSA8PSAwXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IGFjdGl2ZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCIgdGl0bGU9XCJZb3UgY2FuIGNoYW5nZSB0aGUgRGF0YSBzb3VyY2Ugb25seSB3aGVuIGNyZWF0aW5nIGEgbmV3IHJlcG9ydCwgY2hhbmdpbmcgdGhpcyB3aWxsIGNsZWFyIGFsbCBzZWxlY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImRhdGFvcHRpb25cIiBpZD1cInRhYmxlXCIgY2hlY2tlZCBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTdG9yZWRQcm9jLCBjaGVja2VkVmFsdWU6IGZhbHNlXCI+IER5bmFtaWNcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImRhdGFvcHRpb25cIiBpZD1cInByb2NcIiB2YWx1ZT1cIjFcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTdG9yZWRQcm9jLCBjaGVja2VkVmFsdWU6IHRydWVcIj4gUHJlZGVmaW5lZFxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0aXRsZT1cIkFkZCBDdXN0b20gRmllbGQgdXNpbmcgRm9ybXVsYVwiIGRhdGEtYmluZD1cImhpZGRlbjogaXNGdW5jdGlvbkZpZWxkKCkgfHwgdXNlU3RvcmVkUHJvYygpLCBjbGljazogY2FuY2VsRm9ybXVsYUZpZWxkLCB0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpPyAnQ2FuY2VsJzogJ0N1c3RvbSBGaWVsZCcsIGNzczogeydidG4tcHJpbWFyeSc6ICFpc0Zvcm11bGFGaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRm9ybXVsYUZpZWxkfVwiPjwvYT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIHRpdGxlPVwiQWRkIEN1c3RvbSBGaWVsZCB1c2luZyBGdW5jdGlvblwiIGRhdGEtYmluZD1cImhpZGRlbjogdHJ1ZSB8fCBpc0Zvcm11bGFGaWVsZCgpIHx8IHVzZVN0b3JlZFByb2MoKSwgY2xpY2s6IGZ1bmN0aW9uKCl7ZGVzaWduRnVuY3Rpb25GaWVsZCgpfSwgdGV4dDogaXNGdW5jdGlvbkZpZWxkKCk/ICdDYW5jZWwnOiAnRnVuY3Rpb24gRmllbGQnLCBjc3M6IHsnYnRuLXByaW1hcnknOiAhaXNGdW5jdGlvbkZpZWxkKCksICdidG4tZGFuZ2VyJzogaXNGdW5jdGlvbkZpZWxkfVwiPjwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGRhdGEtYmluZD1cImRpc2FibGU6IGlzRm9ybXVsYUZpZWxkLCBoaWRkZW46IHVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiB0ZXh0UXVlcnkuc2VhcmNoRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwic2VhcmNoLWZpZWxkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7ZHJvcGRvd25QYXJlbnQ6ICRyb290LmFjdGl2ZURlc2lnbigpID8gJCgnI2Nob29zZS1kYXRhLWRlc2lnbicpIDogJCgnI2Nob29zZS1kYXRhLWNhcmQnKSwgcGxhY2Vob2xkZXI6ICdTZWFyY2ggZm9yIGEgRGF0YSBGaWVsZC4uLicsIGFqYXg6IHsgdXJsOiB1cmwsIGRhdGFUeXBlOiAnanNvbicsIGRhdGE6IHF1ZXJ5LCBwcm9jZXNzUmVzdWx0czogcHJvY2Vzc1Jlc3VsdHMsIGhlYWRlcnM6IGhlYWRlcnMgfSwgbWluaW11bUlucHV0TGVuZ3RoOiAyLCBhbGxvd0NsZWFyOiB0cnVlIH0sIHZhbHVlOiBzZWxlY3RlZE9wdGlvblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGRhdGEtYmluZD1cInZpc2libGU6IHVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyVmFsdWU6IHtkcm9wZG93blBhcmVudDogJHJvb3QuYWN0aXZlRGVzaWduKCkgPyAkKCcjY2hvb3NlLWRhdGEtZGVzaWduJykgOiAkKCcjY2hvb3NlLWRhdGEtY2FyZCcpfSwgb3B0aW9uczogUHJvY3MsIG9wdGlvbnNDYXB0aW9uOiAnQ2hvb3NlIFNlY3Rpb24uLi4nLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgdmFsdWU6IFNlbGVjdGVkUHJvYywgdmlzaWJsZTogdXNlU3RvcmVkUHJvY1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgZGF0YS1iaW5kPVwiaGlkZGVuOiB1c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAxNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IERhdGEgdG8gdXNlIGluIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgdGV4dC1tdXRlZFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiQ2hvb3NlIGEgdGFibGUgdG8gc2hvdyBmaWVsZHMgdG8gc2VsZWN0LlwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1zZWxlY3QtdHJlZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBDYXRlZ29yaXplZFRhYmxlcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGlzRXhwYW5kZWQoIWlzRXhwYW5kZWQoKSk7IH0sIHZpc2libGU6IGNhdGVnb3J5TmFtZVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBpc0V4cGFuZGVkKCkgPyAnZmEtY2hldnJvbi1kb3duIHRleHQtc2Vjb25kYXJ5JyA6ICdmYS1jaGV2cm9uLXJpZ2h0IHRleHQtc2Vjb25kYXJ5J1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogaXNFeHBhbmRlZCgpID8gJ2ZhLWZvbGRlci1vcGVuJyA6ICdmYS1mb2xkZXInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjYXRlZ29yeU5hbWVcIiBjbGFzcz1cIm1sLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydC1saXN0XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNFeHBhbmRlZCgpLCBmb3JlYWNoOiB0YWJsZXNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBib3JkZXItYm90dG9tIHB5LTIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBzZWxlY3RUYWJsZSgkZGF0YSk7IH0sIGNzczogeyd0ZXh0LW11dGVkJzogIWlzRW5hYmxlZCgpfSwgc3R5bGU6IHtjdXJzb3I6IGlzRW5hYmxlZCgpID8gJ3BvaW50ZXInIDogJyd9LCBhdHRyOiB7dGl0bGU6ICFpc0VuYWJsZWQoKSA/ICdDYW5ub3QgdXNlIHRhYmxlIGFzIGpvaW5zIGRvIG5vdCBleGlzdCc6ICcnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IGZhXCIgZGF0YS1iaW5kPVwiY3NzOiBpc0VuYWJsZWQoKSA/ICgkZGF0YSA9PT0gJHBhcmVudHNbMV0uU2VsZWN0ZWRUYWJsZSgpID8gJ2ZhLWNoZXZyb24tZG93bicgOiAnZmEtY2hldnJvbi1yaWdodCcpIDogJ2ZhLWJhbidcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L3NwYW4+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGFibGVOYW1lXCIgY2xhc3M9XCJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkZGF0YSA9PT0gJHBhcmVudHNbMV0uU2VsZWN0ZWRUYWJsZSgpICYmICEkcGFyZW50c1sxXS5pc0Zvcm11bGFGaWVsZCgpICYmICEkcGFyZW50c1sxXS5TZWxlY3RlZFRhYmxlKCkuZHluYW1pY0NvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudHNbMV0uTW92ZUFsbEZpZWxkc1wiPlNlbGVjdCBhbGw8L2E+IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudHNbMV0uUmVtb3ZlU2VsZWN0ZWRGaWVsZHNcIj5SZW1vdmUgYWxsPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWVsZHMgRXhwYW5kIEhlcmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6ICRkYXRhID09PSAkcGFyZW50c1sxXS5TZWxlY3RlZFRhYmxlKClcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMzBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6ICRwYXJlbnRzWzFdLkNob29zZUZpZWxkcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGJvcmRlci1ib3R0b20gcHktMiBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWRJbkFycmF5OiB7YXJyYXk6ICRwYXJlbnRzWzJdLmlzRm9ybXVsYUZpZWxkKCkgPyAkcGFyZW50c1syXS5mb3JtdWxhRmllbGRzIDogJHBhcmVudHNbMl0uU2VsZWN0ZWRGaWVsZHMsIHZhbHVlOiAkZGF0YX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZGVzaWduZXItc2VsZWN0ZWQtZGF0YVwiPlxyXG4gICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBTZWxlY3RlZEZpZWxkcygpLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgUGxlYXNlIGNob29zZSBkYXRhXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IFNlbGVjdGVkRmllbGRzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nQmFyJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7Rm9yIEJhciBHcmFwaCwgdGhlIGZpcnN0IGZpZWxkIGJlbG93IHdpbGwgc2hvdyBvbiB0aGUgeC1heGlzLiBBbGwgb3RoZXIgbnVtZXJpYyBmaWVsZHMgd2lsbCBzaG93IG9uIHktYXhpcy5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBiYXJDaGFydEhvcml6b250YWxcIiAvPlxyXG4gICAgICAgICAgICAgICAgSG9yaXpvbnRhbCBCYXIgQ2hhcnRcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBiYXJDaGFydFN0YWNrZWRcIiAvPlxyXG4gICAgICAgICAgICAgICAgU3RhY2tlZCBCYXIgQ2hhcnRcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdQaWUnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItb1wiPjwvc3Bhbj4mbmJzcDtGb3IgUGllIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBiZSBncm91cGVkLCBhbmQgdGhlIGZpcnN0IG51bWVyaWMgZmllbGQgd2lsbCBzaG93IGFzIHRoZSByYXRpby5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBwaWVDaGFydERvbnV0XCIgLz5cclxuICAgICAgICAgICAgICAgIERvbnV0IENoYXJ0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nVHJlZW1hcCdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHNtYWxsIHB5LTEgbWItMFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vXCI+PC9zcGFuPiZuYnNwO0ZvciBUcmVlbWFwLCB0aGUgZGF0YSBtdXN0IGJlIGluIGEgaGllcmFyY2hpY2FsIGZvcm1hdCB3aXRoIDJuZCBjb2x1bW4gaGF2aW5nIHBhcmVudCBhbmQgdGhpcmQgY29sdW1uIGhhdmluZyBhIG51bWVyaWMgdmFsdWUuIFRoZSBkYXRhIG11c3QgaGF2ZSBhIHNpbmdsZSByb290IG5vZGUgaGF2aW5nIG51bGwgYXMgaXRzIHBhcmVudCBhcyB3ZWxsLlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0hlYXRNYXAnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO0ZvciBIZWF0TWFwLCB0aGUgZmlyc3QgdHdvIGNvbHVtbnMgbXVzdCBiZSBudW1lcmljIHZhbHVlcyByZXByZXNlbnRpbmdcclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+TGF0aXR1ZGU8L3N0cm9uZz4gYW5kIDxzdHJvbmc+TG9uZ2l0dWRlPC9zdHJvbmc+LiBBdCBsZWFzdCBvbmUgYWRkaXRpb25hbCBudW1lcmljIGNvbHVtbiBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRoZVxyXG4gICAgICAgICAgICAgICAgPHN0cm9uZz5pbnRlbnNpdHk8L3N0cm9uZz4gb2YgZWFjaCBwb2ludC5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogaGVhdE1hcE9wdGlvbnMuc2hvd01hcmtlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgTWFya2VyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgZnctYm9sZFwiPkhlYXRtYXAgQ29sb3JzPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgbWItMlwiPiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZhbHVlOiBoZWF0TWFwT3B0aW9ucy5ncmFkaWVudDFcIiB0aXRsZT1cIkdyYWRpZW50IDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhdE1hcE9wdGlvbnMuZ3JhZGllbnQyXCIgdGl0bGU9XCJHcmFkaWVudCAyXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6IGhlYXRNYXBPcHRpb25zLmdyYWRpZW50M1wiIHRpdGxlPVwiR3JhZGllbnQgM1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nTGluZSdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHNtYWxsIHB5LTEgbWItMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vXCI+PC9zcGFuPiZuYnNwO0ZvciBMaW5lIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBzaG93IG9uIHRoZSB4LWF4aXMuIEFsbCBvdGhlciBmaWVsZHMgd2lsbCBudW1lcmljIGZpZWxkcyB3aWxsIHNob3cgb24geS1heGlzLlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IHNtYWxsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGxpbmVDaGFydEFyZWFcIiAvPlxyXG4gICAgICAgICAgICAgICAgQXJlYSBDaGFydFxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0NvbWJvJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7Rm9yIENvbWJvIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBzaG93IG9uIHRoZSB4LWF4aXMuIEFsbCBvdGhlciBudW1lcmljIGZpZWxkcyB3aWxsIHNob3cgb24geS1heGlzLCBhbmQgeW91IGNhbiBjaG9vc2UgZGlzcGxheSBlYWNoIHNlcmllcyBhcyBsaW5lLCBiYXIgb3IgYXJlYS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5EZWZhdWx0IFNlcmllcyBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IHNlcmllc1R5cGVzLCB2YWx1ZTogY29tYm9DaGFydFR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J1Bpdm90J1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7Rm9yIFRyYW5zcG9zZSwgdGhlIGZpcnN0IGZpZWxkIGJlbG93IHdpbGwgYmUgdXNlZCB0byBQaXZvdC9UcmFuc3Bvc2UgdGhlIHJvd3MgYXMgY29sdW1ucywgYW5kIGl0IG11c3QgYmUgZ3JvdXBlZC5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nU2luZ2xlJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7S1BJIGlzIGEgc2luZ2xlIHZhbHVlIHJlcG9ydCB0aGF0IGlzIGlkZWFsIGZvciBwbGFjaW5nIG9uIGEgRGFzaGJvYXJkLiBBbGwgZmllbGRzIGV4Y2VwdCBvbmUgbXVzdCBiZSBoaWRkZW4gZm9yIFdpZGdldHMuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0h0bWwnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgc21hbGxcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZG9udEdyb3VwQ3VzdG9tXCIgLz5cclxuICAgICAgICAgICAgICAgIExpc3QgKERvbid0IFN1bW1hcml6ZSlcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdNYXAnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItb1wiPjwvc3Bhbj4mbmJzcDtGb3IgTWFwIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgaGFzIHRvIGJlIGEgUmVnaW9uLCBsaWtlIGEgQ291bnRyeS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+TWFwIERpc3BsYXk8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IG1hcFJlZ2lvbnMsIHZhbHVlOiBtYXBSZWdpb25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwic29ydGFibGU6IHsgZGF0YTogU2VsZWN0ZWRGaWVsZHMsIG9wdGlvbnM6IHsgaGFuZGxlOiAnLnNvcnRhYmxlJywgY3Vyc29yOiAnbW92ZScsIHBsYWNlaG9sZGVyOiAnZHJvcC1oaWdobGlnaHQnIH0sIHN0cmF0ZWd5TW92ZTogdHJ1ZSB9XCI+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29ydGFibGUgcHVsbC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiIGRhdGEtYmluZD1cImlmbm90OiAkcGFyZW50LnVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY29sdW1uc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZEZpZWxkTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpID8gJygnICsgZmllbGRGb3JtYXQoKSArICcpJyA6ICcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6ICEkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUgfHwgZmllbGRGb3JtYXQoKSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSkgJiYgJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0nVHJlZW1hcCcgJiYgJHBhcmVudC5pc0NoYXJ0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1kYW5nZXJcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhZ3JvdXBJbkdyYXBoKClcIj5XaWxsIG5vdCBzaG93IGluIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRwYXJlbnQuUmVwb3J0VHlwZVwiPjwvc3Bhbj5DaGFydDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5Jc1Bpdm90RmllbGRMYXN0Q29sdW1uKCRpbmRleCgpLHNlbGVjdGVkQWdncmVnYXRlKCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctZGFuZ2VyXCIgPlBpdm90IGZpZWxkIGNhbm5vdCBiZSB0aGUgbGFzdCBjb2x1bW4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LklzRHluYW1pY0ZpZWxkRmlyc3RDb2x1bW4oJGluZGV4KCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctZGFuZ2VyXCIgPkR5bmFtaWMgY2Fubm90IGJlIGZpcnN0IGNvbHVtbi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwibWFyZ2luLXRvcDogLTVweDtcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5BZ2dyZWdhdGVSZXBvcnQoKSAmJiAhJHBhcmVudC51c2VTdG9yZWRQcm9jKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgJGluZGV4KCk+MCA/IGZpZWxkQWdncmVnYXRlV2l0aERyaWxsZG93biA6IGZpZWxkQWdncmVnYXRlLCB2YWx1ZTogc2VsZWN0ZWRBZ2dyZWdhdGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCIgZGF0YS1iaW5kPVwiaWZub3Q6ICRwYXJlbnQudXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiB0aXRsZT1cIkNhbm5vdCBEZWxldGUgUmVxdWlyZWQgRmlsdGVyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZm9yY2VGaWx0ZXJGb3JUYWJsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRGVsZXRlIHRoaXMgRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5SZW1vdmVGaWVsZCwgaGlkZGVuOiBmb3JjZUZpbHRlckZvclRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJpZm5vdDogJHBhcmVudC51c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGZpbHRlck9uRmx5KCFmaWx0ZXJPbkZseSgpKTsgfSwgY3NzOiB7YWN0aXZlOiBmaWx0ZXJPbkZseSgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkZpbHRlciBieSB0aGlzIGZpZWxkIG9uIHRoZSBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVEaXNhYmxlLCBjc3M6IHthY3RpdmU6IGRpc2FibGVkKCk9PXRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEbyBub3QgaW5jbHVkZSBpbiBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90JyAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J0xpc3QnICYmICEkcGFyZW50LnVzZVN0b3JlZFByb2MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBoaWRlSW5EZXRhaWwoIWhpZGVJbkRldGFpbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBoaWRlSW5EZXRhaWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJIaWRlIGluIERldGFpbHNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUgfHwgZmllbGRGb3JtYXQoKSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSkgICYmICRwYXJlbnQuaXNDaGFydCgpICYmICRpbmRleCgpPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgZ3JvdXBJbkdyYXBoKCFncm91cEluR3JhcGgoKSk7IH0sIGNzczoge2FjdGl2ZTogZ3JvdXBJbkdyYXBoKCk9PWZhbHNlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1zaWduYWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkluY2x1ZGUgaW4gc2VyaWVzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5JbmNsdWRlU3ViVG90YWwoKSAgJiYgIChbJ0ludCcsICdEb3VibGUnLCAnTW9uZXknLCAnRGVjaW1hbCcsICdDdXJyZW5jeSddLmluZGV4T2YoZmllbGRUeXBlKSA+PSAwIHx8IFsnSW50JywgJ0RvdWJsZScsICdNb25leScsICdEZWNpbWFsJywgJ0N1cnJlbmN5J10uaW5kZXhPZihmaWVsZEZvcm1hdCgpKSA+PSAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBkb250U3ViVG90YWwoIWRvbnRTdWJUb3RhbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBkb250U3ViVG90YWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRvbid0IGFkZCB0byBUb3RhbCByb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBzZXR1cExpbmtGaWVsZCwgY3NzOiB7YWN0aXZlOiBsaW5rRmllbGQoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiTGluayB0byBhbm90aGVyIFJlcG9ydCBvciBVcmxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKT09J0NvbWJvJyAmJiAkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUgfHwgZmllbGRGb3JtYXQoKSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSkgICYmICRwYXJlbnQuaXNDaGFydCgpICYmICRpbmRleCgpPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2VyaWVzVHlwZShzZXJpZXNUeXBlKCkgPT0gJ2xpbmUnID8gJ2FyZWEnIDogKHNlcmllc1R5cGUoKT09J2JhcnMnID8gJ2xpbmUnIDogJ2JhcnMnKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWJpbmQ9XCJjc3M6IHsnZmEtbGluZS1jaGFydCc6IHNlcmllc1R5cGUoKSA9PSAnbGluZScsICdmYS1iYXItY2hhcnQnOiBzZXJpZXNUeXBlKCkgPT0gJ2JhcnMnLCAnZmEtYXJlYS1jaGFydCc6IHNlcmllc1R5cGUoKT09J2FyZWEnIH0sIGF0dHI6IHt0aXRsZTogc2VyaWVzVHlwZX1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogc2V0dXBGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZ2VhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiTW9yZSBPcHRpb25zXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCIgZGF0YS1iaW5kPVwiaWY6IGlzRm9ybXVsYUZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGVkaXRGb3JtdWxhRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJFZGl0IEZvcm11bGEgRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImRlc2lnbmVyLXN1Yi1yZXBvcnRcIj5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+XHJcbiAgICAgICAgTGlua2VkIHJlcG9ydHMgYXJlIGF2YWlsYWJsZSB0byBhZGQgYXMgc3ViIHJlcG9ydHMuXHJcbiAgICAgICAgU2VsZWN0aW5nIHN1YiByZXBvcnRzIHdpbGwgcmVzdHJpY3QgdGhlIHJlcG9ydCB0byA8c3Ryb25nPm9uZSByZWNvcmQgcGVyIHBhZ2U8L3N0cm9uZz4uXHJcbiAgICA8L3A+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwib3B0aW9uczogbGlua2VkUmVwb3J0RmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1RleHQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFN1YlJlcG9ydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnU2VsZWN0IGEgbGlua2VkIHJlcG9ydC4uLidcIj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiXHJcbiAgICAgICAgZGF0YS1iaW5kPVwic29ydGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3ViUmVwb3J0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyBoYW5kbGU6ICcuc29ydGFibGUnLCBjdXJzb3I6ICdtb3ZlJywgcGxhY2Vob2xkZXI6ICdkcm9wLWhpZ2hsaWdodCcgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBzb3J0YWJsZSBtZS0yXCIgc3R5bGU9XCJjdXJzb3I6bW92ZTtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBuYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnJlbW92ZVN1YlJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgRGVsZXRlXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZGVzaWduZXItaHRtbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IFNlbGVjdGVkRmllbGRzLCB2YWx1ZTogU2VsZWN0RmllbGRUb0luc2VydCwgb3B0aW9uc0NhcHRpb246ICdTZWxlY3QgYSBmaWVsZC4uLicsIG9wdGlvbnNUZXh0OiAnc2VsZWN0ZWRGaWVsZE5hbWUnXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRhYmxlXCI+PC9pPiBJbnNlcnQgYXMgVGFibGVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbnNlcnRGaWVsZFRhYmxlVHJhbnNwb3NlZFwiPlRyYW5zcG9zZWQ8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbnNlcnRGaWVsZFRhYmxlU3RhbmRhcmRcIj5TdGFuZGFyZDwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPjxociBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGluc2VydEhlYWRlckJyZWFrXCI+QWRkIEhlYWRlciBCcmVhazwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGluc2VydEZvb3RlckJyZWFrXCI+QWRkIEZvb3RlciBCcmVhazwvYT48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLWF1dG8gbXMtMlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogY2FyZFZpZXdcIj5cclxuICAgICAgICAgICAgQ2FyZCBMYXlvdXRcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDx0ZXh0YXJlYSBkYXRhLWJpbmQ9XCJzdW1tZXJub3RlOiByZXBvcnRIdG1sXCI+PC90ZXh0YXJlYT5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZGVzaWduZXItc29ydFwiPlxyXG4gICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtYXV0byBjb250cm9sLWxhYmVsXCI+U29ydCBCeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwib3B0aW9uczogRmlsdGVyZWRGaWVsZHMsIG9wdGlvbnNUZXh0OiAnc2VsZWN0ZWRGaWVsZE5hbWUnLCBvcHRpb25zVmFsdWU6ICdmaWVsZElkJywgdmFsdWU6IFNvcnRCeUZpZWxkLCBvcHRpb25zQ2FwdGlvbjogJ1NlbGVjdCBmaWVsZCB0byBzb3J0Li4uJywgYWxsb3dDbGVhcjogdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInRleHQ6ICFTb3J0RGVzYygpID8gJ+KWsiBBc2NlbmRpbmcnIDogJ0Rlc2NlbmRpbmcg4pa8JywgY2xpY2s6IGZ1bmN0aW9uKCkgeyBTb3J0RGVzYyghU29ydERlc2MoKSk7IHJldHVybiBmYWxzZTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjbGljazogYWRkU29ydEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIEFkZCBTb3J0XHJcbiAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IFNvcnRGaWVsZHNcIj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtYXV0byBjb250cm9sLWxhYmVsXCI+Jm5ic3A7Jm5ic3A7VGhlbiBTb3J0IEJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50LkZpbHRlcmVkRmllbGRzLCBvcHRpb25zVGV4dDogJ3NlbGVjdGVkRmllbGROYW1lJywgb3B0aW9uc1ZhbHVlOiAnZmllbGRJZCcsIHZhbHVlOiBzb3J0QnlGaWVsZElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBkLWZsZXggZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjbGljazogcmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgU29ydFxyXG4gICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ0ZXh0OiAhc29ydERlc2MoKSA/ICfilrIgQXNjZW5kaW5nJyA6ICdEZXNjZW5kaW5nIOKWvCcsIGNsaWNrOiBmdW5jdGlvbigpIHsgc29ydERlc2MoIXNvcnREZXNjKCkpOyByZXR1cm4gZmFsc2U7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuYWRkU29ydEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgU29ydFxyXG4gICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImRlc2lnbmVyLW9wdGlvbnNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpIT0nUGl2b3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEluY2x1ZGVTdWJUb3RhbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBUb3RhbCBSb3dcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJoaWRkZW46IEFnZ3JlZ2F0ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTaG93VW5pcXVlUmVjb3Jkc1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgU2hvdyBvbmx5IFVuaXF1ZSBSZWNvcmRzXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpIT0nTGlzdCdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2hvd0V4cGFuZE9wdGlvblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRG9uJ3QgU2hvdyBFeHBhbmQgT3B0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IGlzQ2hhcnRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2hvd0RhdGFXaXRoR3JhcGhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIFNob3cgRGF0YSBhbG9uZyB3aXRoIEdyYXBoXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IERvbnRFeGVjdXRlT25SdW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIFdhaXQgdG8gU2VsZWN0IEZpbHRlcnMgYmVmb3JlIFJ1bm5pbmcgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBtYXhSZWNvcmRzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTWF4IFJlY29yZHNcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIiBkYXRhLWJpbmQ9XCJpZjogbWF4UmVjb3Jkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIk9ubHkgdG9wIG4uLi5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogT25seVRvcCwgdmlzaWJsZTogbWF4UmVjb3Jkc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFuZ2VQYWdlU2l6ZSwgZGlzYWJsZTogc3ViUmVwb3J0cygpLmxlbmd0aCA+IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIENoYW5nZSBQYWdlIFNpemVcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmlzaWJsZTogY2hhbmdlUGFnZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzOiB7ICd0ZXh0LW11dGVkJzogc3ViUmVwb3J0cygpLmxlbmd0aCA+IDAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBzdHlsZT1cIndpZHRoOiAxNTBweDtcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwib3B0aW9uczogWzEsMTAsMzAsNTAsMTAwLDE1MCwyMDAsNTAwLDEwMDBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRGVmYXVsdFBhZ2VTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBzdWJSZXBvcnRzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEZvcmNlIGRlZmF1bHQgdG8gMSBpZiBzdWIgcmVwb3J0cyBzZWxlY3RlZCAtLT5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc3ViUmVwb3J0cygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICBQYWdlIHNpemUgaXMgcmVzdHJpY3RlZCB0byAxIHdoZW4gc3ViIHJlcG9ydHMgYXJlIHNlbGVjdGVkLlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9XCJmYSBmYS1wYWludC1icnVzaFwiPjwvc3Bhbj4gUGljayBSZXBvcnQgRm9ybWF0PC9wPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB0YWJsZVN0eWxlcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25cIiBkYXRhLWJpbmQ9XCJ0aXRsZTogJGRhdGEubmFtZSwgY2xpY2s6ICRwYXJlbnQuc2VsZWN0U3R5bGUsIGNzczogeydkcm9wZG93bi1vcHRpb24tc2VsZWN0ZWQnOiAkcGFyZW50LnNlbGVjdGVkU3R5bGUoKSA9PSAkZGF0YS5jb2xvcnNjaGVtZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS10YWJsZS1wcmV2aWV3XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogbmV3IEFycmF5KDUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLXRhYmxlLXJvd1wiIGRhdGEtYmluZD1cImZvcmVhY2g6IG5ldyBBcnJheSg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktdGFibGUtY2VsbFwiIGRhdGEtYmluZD1cInN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogJHBhcmVudENvbnRleHQuJGluZGV4KCkgPT09IDAgPyAkcGFyZW50c1sxXS5oZWFkZXJCZyA6ICgkcGFyZW50Q29udGV4dC4kaW5kZXgoKSAlIDIgPT09IDAgPyAkcGFyZW50c1sxXS5hbHRSb3dCZyA6ICRwYXJlbnRzWzFdLnJvd0JnKSwgY29sb3I6ICRwYXJlbnRzWzFdLnRleHRDb2xvciB9XCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9IZWFkZXJSb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIEhlYWRlciBSb3dcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9EYXNoYm9hcmRCb3JkZXJzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICBCb3JkZXJsZXNzIG9uIERhc2hib2FyZFxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImlmOiBSZXBvcnRUeXBlKCkgPT0gJ1NpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2hvd1ByaW9ySW5LcGlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIFNob3cgcHJldmlvdXMgY29tcGFyaXNpb24gaW4gS1BJIGlmIGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJjdXN0b20tZmllbGQtZGVzaWduZXJcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNGb3JtdWxhRmllbGQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIG5vdyBjcmVhdGluZyBhIEN1c3RvbWl6ZWQgRmllbGQuIFBsZWFzZSBzZWxlY3QgdGhlIGZpZWxkcyB5b3Ugd2FudCB0byB1c2UgaW4gdGhlIGNhbGN1bGF0aW9uLCB0aGVuIGNob29zZSB0aGUgb3BlcmF0aW9ucyB5b3Ugd2FudCB0byBwZXJmb3JtLCBhbmQgY2xpY2sgXCJTYXZlXCIgdG8gYWRkIHlvdXIgQ3VzdG9tIGZpZWxkLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICBTZXR1cCB5b3VyIEZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRoaXMgRmllbGRcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiByaWdodC1hbGlnblwiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcm11bGFUeXBlKCk9PSdidWlsZCdcIj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkRm9ybXVsYVBhcmVudGhlc2VzXCI+QWRkICggKTwvYT5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0aXRsZT1cIkFkZCBUb2RheVwiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkcygpIHx8IGZvcm11bGFGaWVsZHMoKS5sZW5ndGggPT0gMCwgY2xpY2s6IGFkZEZvcm11bGFEYXRlVG9kYXlcIj5BZGQgVG9kYXk8L2E+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgdGl0bGU9XCJBZGQgYSBDb25zdGFudCBWYWx1ZVwiIGRhdGEtYmluZD1cImNsaWNrOiBhZGRGb3JtdWxhQ29uc3RhbnRWYWx1ZVwiPkFkZCBWYWx1ZTwvYT5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogY2xlYXJGb3JtdWxhRmllbGRcIj5DbGVhcjwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgZGF0YS1iaW5kPVwiaWY6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIEZvciBEYXRlcyBGaWVsZCBjYWxjdWxhdGlvbiwgeW91IGNhbiBvbmx5IHN1YnN0cmFjdCBkYXRlIGZpZWxkcyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0IGFzIGRheXMsIGhvdXJzLCBtaW51dGVzIG9yIHNlY29uZHMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRmllbGRMYWJlbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiQ3VzdG9tIEZpZWxkIExhYmVsXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5EYXRhIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRGF0YUZvcm1hdFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWZub3Q6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlN0cmluZzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+SW50ZWdlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+RGVjaW1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Q3VycmVuY3k8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBmb3JtdWxhT25seUhhc0RhdGVGaWVsZHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5EYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Ib3Vyczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+TWludXRlczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+U2Vjb25kczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcm11bGFEYXRhRm9ybWF0KCkgPT0gJ0RlY2ltYWwnIHx8IGZvcm11bGFEYXRhRm9ybWF0KCkgPT0gJ0N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+Um91bmQgdG8gRGVjaW1hbCBQbGFjZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvcm11bGFEZWNpbWFsUGxhY2VzXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgRGVjaW1hbCBwbGFjZXMgKGxlYXZlIGJsYW5rIHRvIG5vdCB1c2Ugcm91bmRpbmcpXCIgdGl0bGU9XCJDaG9vc2UgRGVjaW1hbCBwbGFjZXMgKGxlYXZlIGJsYW5rIHRvIG5vdCB1c2Ugcm91bmRpbmcpXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogYXBwU2V0dGluZ3MudXNlU3FsQ3VzdG9tRmllbGRcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPkZpZWxkIEJ1aWxkZXIgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhVHlwZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJidWlsZFwiPlNpbXBsZSBDYWxjdWxhdGlvbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzcWxcIj5BZHZhbmNlZCBFeHByZXNzaW9uPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBmb3JtdWxhVHlwZSgpPT0nYnVpbGQnXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBGb3JtdWxhPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmb3JtdWxhRmllbGRzKCkubGVuZ3RoID09IDBcIj5QaWNrIGZpZWxkcyB0byBidWlsZCBjYWxjdWxhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogZm9ybXVsYUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1lLTNcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc1N0YXJ0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPig8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICFzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc1N0YXJ0KCkgJiYgIXNldHVwRm9ybXVsYS5pc1BhcmVudGhlc2VzRW5kKClcIiBjbGFzcz1cImxpc3QtZ3JvdXAgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZm9ybXVsYS1maWVsZC1pdGVtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDsgcGFkZGluZzogNXB4IDE1cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTmFtZSwgdmlzaWJsZTogIXNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWUoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWVcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVwidmFsdWU6IHNldHVwRm9ybXVsYS5jb25zdGFudFZhbHVlLCB2aXNpYmxlOiBzZXR1cEZvcm11bGEuY29uc3RhbnRWYWx1ZSgpIT0nfFRvZGF5fCdcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWUtMlwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogc2V0dXBGb3JtdWxhLmNvbnN0YW50VmFsdWUoKSA9PSAnfFRvZGF5fCdcIj48Yj5Ub2RheTwvYj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gbXMtMlwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnJlbW92ZUZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtZS0zXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2V0dXBGb3JtdWxhLmlzUGFyZW50aGVzZXNFbmRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDA7XCI+KTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNXB4O1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnQuc2hvd0Zvcm11bGFPcGVyYXRpb24oJGluZGV4KCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDUwcHg7XCIgZGF0YS1iaW5kPVwidmFsdWU6IHNldHVwRm9ybXVsYS5mb3JtdWxhT3BlcmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAhJHBhcmVudC5mb3JtdWxhT25seUhhc0RhdGVGaWVsZHMoKSB8fCAoJHBhcmVudC5mb3JtdWxhT25seUhhc0RhdGVGaWVsZHMoKSAmJiAkcGFyZW50LmlzQ29uc3RhbnRPcGVyYXRpb24oJGluZGV4KCkpKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Kzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnSW50ZWdlcicsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnLCdEZWNpbWFsJywnQ3VycmVuY3knXS5pbmRleE9mKCRwYXJlbnQuZm9ybXVsYURhdGFGb3JtYXQoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPio8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Lzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBjdXN0b21TcWxGaWVsZCwgdmlzaWJsZTogZm9ybXVsYVR5cGUoKT09J3NxbCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IERhdGEgT3BlcmF0aW9uOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHtcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duUGFyZW50OiAkcm9vdC5hY3RpdmVEZXNpZ24oKSA/ICQoJyNjaG9vc2UtZGF0YS1kZXNpZ24nKSA6ICQoJyNjaG9vc2UtZGF0YS1jYXJkJyksXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBGdW5jdGlvbi4uLicsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBhdmFpbGFibGVGdW5jdGlvbnNHcm91cGVkKCksXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlc3VsdDogdGVtcGxhdGVSZXN1bHRcclxuICAgICAgICAgICAgfSwgdmFsdWU6IHNlbGVjdGVkU3FsRnVuY3Rpb25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJoaWRkZW46IGlzQ29uZGl0aW9uYWxGdW5jdGlvbigpIHx8IHNlbGVjdGVkU3FsRnVuY3Rpb24oKSA9PSAnT3RoZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgdGhlIERhdGEgRmllbGQgdG8gdXNlOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwic2VsZWN0Mjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93blBhcmVudDogJHJvb3QuYWN0aXZlRGVzaWduKCkgPyAkKCcjY2hvb3NlLWRhdGEtZGVzaWduJykgOiAkKCcjY2hvb3NlLWRhdGEtY2FyZCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBGaWVsZC4uLicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJHBhcmVudC50ZXh0UXVlcnkuc2VhcmNoRmllbGRzLnVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAkcGFyZW50LnRleHRRdWVyeS5zZWFyY2hGaWVsZHMucXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0czogJHBhcmVudC50ZXh0UXVlcnkuc2VhcmNoRmllbGRzLnByb2Nlc3NSZXN1bHRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogJHBhcmVudC50ZXh0UXVlcnkuc2VhcmNoRmllbGRzLmhlYWRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0NsZWFyOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2VsZWN0MlRleHQ6IHNlbGVjdGVkRmllbGQsc2VsZWN0MlRhYmxlSWQ6c2VsZWN0ZWRGaWVsZFRhYmxlSWRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBzZWxlY3RlZEZpZWxkXCIgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiA8c3BhbiBjbGFzcz1cImhpZ2hsaWdodFwiIGRhdGEtYmluZD1cInRleHQ6ICRkYXRhXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJpZjogcmVxdWlyZXNWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW5wdXRWYWx1ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlByb3ZpZGUgdGhlIHJlbGV2YW50IHZhbHVlIHRvIHVzZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlucHV0VmFsdWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBpbnB1dFZhbHVlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZFNxbEZ1bmN0aW9uKCkgPT0gJ090aGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY3VzdG9tLXNxbFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkN1c3RvbSBTUUwgRXhwcmVzc2lvbjo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHlvdXIgY3VzdG9tIFNRTCBFeHByZXNzaW9uIGJlbG93IGJ5IHNlbGVjdGluZyBkYXRhIGZpZWxkcywgYWRkaW5nIGNhbGN1bGF0aW9ucyBvciB1c2luZyBTUUwga2V5d29yZHMgYXMgbmVlZGVkLiBGb3Igc3RyaW5nIHZhbHVlcywgcmVtZW1iZXIgdG8gZW5jbG9zZSB0aGVtIGluIHNpbmdsZSBxdW90ZXMgKCcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGlkPVwiY3VzdG9tLXNxbFwiIGNsYXNzPVwiaGludC1pbnB1dFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIldyaXRlIHlvdXIgY3VzdG9tIFNRTFwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IGlzQ29uZGl0aW9uYWxGdW5jdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHlvdXIgY29uZGl0aW9uYWwgbG9naWMgYmVsb3cgYnkgc2VsZWN0aW5nIGRhdGEgZmllbGRzLCBhZGRpbmcgY2FsY3VsYXRpb25zIGFuZCBkZWZpbmluZyBjb25kaXRpb25zIGFzIG5lZWRlZCwgYW5kIHByb3ZpZGUgY29ycmVzcG9uZGluZyByZXN1bHRzLiBGb3Igc3RyaW5nIHZhbHVlcywgcmVtZW1iZXIgdG8gZW5jbG9zZSB0aGVtIGluIHNpbmdsZSBxdW90ZXMgKCcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhpbnQtaW5wdXRcIiBpZD1cImNvbmRpdGlvbi1maWVsZFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIkZpZWxkIHRvIGNvbXBhcmVcIiB0aXRsZT1cIkZpZWxkIHRvIGNvbXBhcmVcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiIHN0eWxlPVwid2lkdGg6IDEyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZU9wZXJhdG9ycywgdmFsdWU6IHNlbGVjdGVkT3BlcmF0b3JcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGludC1pbnB1dFwiIGlkPVwiY29uZGl0aW9uLXZhbHVlXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiVmFsdWUgdG8gY29tcGFyZVwiIHRpdGxlPVwiVmFsdWUgdG8gY29tcGFyZVwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIHN0eWxlPVwibWF4LWhlaWdodDogMzJweDtcIj5USEVOPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGludC1pbnB1dFwiIGlkPVwiY29uZGl0aW9uLXJlc3VsdFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIkNvbmRpdGlvbiBSZXN1bHRcIiB0aXRsZT1cIkNvbmRpdGlvbiBSZXN1bHRcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkQ29uZGl0aW9uXCI+QWRkIENvbmRpdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIG10LTNcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBjb25kaXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGNvbmRpdGlvbkRpc3BsYXlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnJlbW92ZUNvbmRpdGlvblwiPlJlbW92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMnB4O1wiPkVMU0U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhpbnQtaW5wdXRcIiBpZD1cImNvbmRpdGlvbi1lbHNlXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiRGVmYXVsdCBSZXN1bHRcIiB0aXRsZT1cIkRlZmF1bHQgUmVzdWx0XCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiB0aXRsZT1cIlNhdmUgQ3VzdG9tIEZvcm11bGEgRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZvcm11bGFGaWVsZCwgdmlzaWJsZTogaXNGb3JtdWxhRmllbGRcIj5TYXZlPC9hPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiQ3VzdG9tIEZpZWxkIHVzaW5nIEZvcm11bGFcIiBkYXRhLWJpbmQ9XCJjbGljazogY2FuY2VsRm9ybXVsYUZpZWxkLCB0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpPyAnQ2FuY2VsJzogJ0N1c3RvbWl6ZScsIGNzczogeydidG4tcHJpbWFyeSc6ICFpc0Zvcm11bGFGaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRm9ybXVsYUZpZWxkfVwiPjwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWRlc2lnbmVyLWNvbXBhY3RcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25lci1jb250YWluZXIgY29tcGFjdC1kZXNpZ25lclwiIGlkPVwiY2hvb3NlLWRhdGEtZGVzaWduXCIgc3R5bGU9XCJmb250LXNpemU6MTJweDtcIj5cclxuXHJcbiAgICAgIDwhLS0gVmlzdWFsaXphdGlvbiBUb29sYmFyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTEgbWItMlwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvaT4gVmlzdWFsaXphdGlvbjwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRJRCgpLCBjbGljazogZnVuY3Rpb24oKSB7YWN0aXZlRGVzaWduKGZhbHNlKTt9XCIgdGl0bGU9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPiBDbG9zZSBEZXNpZ25lclxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTFcIj5cclxuICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1jaG9vc2UtdmlzdWFsJ1wiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gTWFpbiBHcmlkIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBnYXAtMiBjb21wYWN0LWZpbHRlcnMgbmVlZHMtdmFsaWRhdGlvblwiPlxyXG5cclxuICAgICAgICA8IS0tIERhdGEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImRhdGFQYW5lbFwiIHN0eWxlPVwibWF4LXdpZHRoOiAzMDBweFwiXHJcbiAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6eydjb2xsYXBzZWQtdmVydGljYWwnOiBwYW5lbHMuaXNDb2xsYXBzZWQoJ2RhdGFQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtMVwiIGRhdGEtYmluZD1cImNsaWNrOmZ1bmN0aW9uKCl7cGFuZWxzLnRvZ2dsZVBhbmVsKCdkYXRhUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvaT4gRGF0YVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItY2hvb3NlLWRhdGEnXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTZWxlY3RlZCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwic2VsZWN0ZWRQYW5lbFwiIHN0eWxlPVwibWF4LXdpZHRoOiA0MDBweFwiXHJcbiAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnc2VsZWN0ZWRQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtMVwiIGRhdGEtYmluZD1cImNsaWNrOmZ1bmN0aW9uKCl7cGFuZWxzLnRvZ2dsZVBhbmVsKCdzZWxlY3RlZFBhbmVsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L2k+IFNlbGVjdGVkIGRhdGEgZm9yIHRoZSBSZXBvcnRcclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWQgZmxvYXQtZW5kXCJcclxuICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmlzaWJsZTogU2VsZWN0ZWRGaWVsZHMoKS5sZW5ndGgsIGNsaWNrOmZ1bmN0aW9uKCl7U2VsZWN0ZWRGaWVsZHMoW10pO31cIj5DbGVhciBhbGw8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGRlc2lnbmVyLWF1dG8tdXBkYXRlIHAtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwMHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1zZWxlY3RlZC1kYXRhJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwic3ViUmVwb3J0c1BhbmVsXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnc3ViUmVwb3J0c1BhbmVsJyl9LCB2aXNpYmxlOiBsaW5rZWRSZXBvcnRGaWVsZHMoKS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBwLTFcIiBkYXRhLWJpbmQ9XCJjbGljazpmdW5jdGlvbigpe3BhbmVscy50b2dnbGVQYW5lbCgnc3ViUmVwb3J0c1BhbmVsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYm9va21hcmtcIj48L2k+IFN1YiBSZXBvcnRzXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc3ViLXJlcG9ydCcsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwiaHRtbFJlcG9ydFBhbmVsXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnaHRtbFJlcG9ydFBhbmVsJyl9LCB2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdIdG1sJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ2h0bWxSZXBvcnRQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiPjwvaT4gQ3VzdG9tIERlc2lnblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTFcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ2Rlc2lnbmVyLWh0bWwnLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBDdXN0b20gRmllbGQgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImN1c3RvbUZpZWxkUGFuZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpc0Zvcm11bGFGaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFnaWNcIj48L2k+IEN1c3RvbSBGaWVsZFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTEgY3VzdG9tLWZpZWxkLWRlc2lnblwiIHN0eWxlPVwibWF4LWhlaWdodDogNDAwcHg7IG92ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6IGhpZGRlbjtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdjdXN0b20tZmllbGQtZGVzaWduZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEZpZWxkIE9wdGlvbnMgUGFuZWwgLS0+XHJcbiAgICAgICAgPGRpdiBpZD1cImZpZWxkT3B0aW9uc1BhbmVsXCIgY2xhc3M9XCJjYXJkIHAtMiBtdC0yIGNvbGxhcHNlXCI+XHJcbiAgICAgICAgPCEtLSBkeW5hbWljIGZpZWxkIHNldHRpbmdzIGxvYWQgaGVyZSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEZpbHRlcnMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImZpbHRlcnNQYW5lbFwiXHJcbiAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6eydjb2xsYXBzZWQtdmVydGljYWwnOiBwYW5lbHMuaXNDb2xsYXBzZWQoJ2ZpbHRlcnNQYW5lbCcpfSwgaGlkZGVuOiBpc0Zvcm11bGFGaWVsZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtMVwiIGRhdGEtYmluZD1cImNsaWNrOmZ1bmN0aW9uKCl7cGFuZWxzLnRvZ2dsZVBhbmVsKCdmaWx0ZXJzUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+IEZpbHRlcnNcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTEgZGVzaWduZXItYXV0by11cGRhdGVcIiBzdHlsZT1cIm1heC1oZWlnaHQ6MzAwcHg7IG92ZXJmbG93LXk6YXV0bztcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjp1c2VTdG9yZWRQcm9jXCI+PGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTp7bmFtZTonZmlsdGVyLXBhcmFtZXRlcnMnfVwiPjwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OnVzZVN0b3JlZFByb2NcIj48ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOntuYW1lOidmaWx0ZXItZ3JvdXAnfVwiPjwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU29ydCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwic29ydFBhbmVsXCJcclxuICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnc29ydFBhbmVsJyl9LCBoaWRkZW46IHVzZVN0b3JlZFByb2MoKSB8fCBpc0Zvcm11bGFGaWVsZCgpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ3NvcnRQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnRcIj48L2k+IFNvcnRcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTEgZGVzaWduZXItYXV0by11cGRhdGUgcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1zb3J0J1wiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2V0dGluZ3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cInNldHRpbmdzUGFuZWxcIlxyXG4gICAgICAgICAgICAgZGF0YS1iaW5kPVwiY3NzOnsnY29sbGFwc2VkLXZlcnRpY2FsJzogcGFuZWxzLmlzQ29sbGFwc2VkKCdzZXR0aW5nc1BhbmVsJyl9LCBoaWRkZW46IGlzRm9ybXVsYUZpZWxkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ3NldHRpbmdzUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1nZWFyXCI+PC9pPk9wdGlvbnNcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1mb3JtLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9pPiBSZXBvcnQgTmFtZVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIlJlcG9ydCBOYW1lXCIgZGF0YS1iaW5kPVwidmFsdWU6IFJlcG9ydE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gUmVwb3J0IERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIHJvd3M9XCIzXCIgcGxhY2Vob2xkZXI9XCJBZGRpdGlvbmFsIGRldGFpbHMgKG9wdGlvbmFsKVwiIGRhdGEtYmluZD1cInZhbHVlOiBSZXBvcnREZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IENhblNhdmVSZXBvcnRzKClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNhdmUgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbCBoNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyLW9wZW5cIj48L2k+IENob29zZSBGb2xkZXJcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9sZGVycywgb3B0aW9uc1RleHQ6ICdGb2xkZXJOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCB2YWx1ZTogRm9sZGVySURcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1vcHRpb25zJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2NoZWR1bGUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cInNjaGVkdWxlUGFuZWxcIlxyXG4gICAgICAgICAgICAgZGF0YS1iaW5kPVwiY3NzOnsnY29sbGFwc2VkLXZlcnRpY2FsJzogcGFuZWxzLmlzQ29sbGFwc2VkKCdzY2hlZHVsZVBhbmVsJyl9XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ3NjaGVkdWxlUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1ob3VyZ2xhc3NcIj48L2k+IFNjaGVkdWxlXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0xIGRlc2lnbmVyLWF1dG8tdXBkYXRlIHJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC1zY2hlZHVsZSd9XCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBBY2Nlc3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImFjY2Vzc1BhbmVsXCJcclxuICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnYWNjZXNzUGFuZWwnKX0sIHZpc2libGU6IGFkbWluTW9kZSgpICYmICFpc0Zvcm11bGFGaWVsZCgpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ2FjY2Vzc1BhbmVsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5XCI+PC9pPlNlY3VyaXR5XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIlwiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlJywgZGF0YTogbWFuYWdlQWNjZXNzfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxociAvPlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWRlc2lnbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMHZoO1wiIGlkPVwicmVwb3J0LWRlc2lnbmVyLW1vZGFsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm15TW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiTmVlZCBoZWxwIHNldHRpbmcgdXAgYSByZXBvcnQ/XCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vZG90bmV0cmVwb3J0LmNvbS9ibG9ncy9kb2NzL2Rlc2lnbmluZy1yZXBvcnRzXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48L3NwYW4+PC9hPiBEZXNpZ24geW91ciBSZXBvcnRcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6IG9uTW9kYWxDbG9zZUNsaWNrZWRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIiBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87IGZsZXgtZ3JvdzogMTtcIj5cclxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIiBpZD1cImNob29zZS1kYXRhLWNhcmRcIiAgc3R5bGU9XCJtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjAwcHgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvaT4gUmVwb3J0IE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiUmVwb3J0IE5hbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUmVwb3J0TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT48c3BhbiBjbGFzcz1cImZhIGZhLWRhdGFiYXNlXCI+PC9zcGFuPiZuYnNwO0Nob29zZSBEYXRhIGZvciBSZXBvcnQ8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ2Rlc2lnbmVyLWNob29zZS1kYXRhJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+IFJlcG9ydCBEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiByb3dzPVwiM1wiIHBsYWNlaG9sZGVyPVwiQWRkaXRpb25hbCBkZXRhaWxzIChvcHRpb25hbClcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUmVwb3J0RGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBDYW5TYXZlUmVwb3J0cygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyLW9wZW5cIj48L2k+IENob29zZSBGb2xkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9sZGVycywgb3B0aW9uc1RleHQ6ICdGb2xkZXJOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCB2YWx1ZTogRm9sZGVySURcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9zcGFuPiZuYnNwO0Nob29zZSBWaXN1YWxpemF0aW9uPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy14OiBhdXRvOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1jaG9vc2UtdmlzdWFsJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogaXNGdW5jdGlvbkZpZWxkXCIgY2xhc3M9XCJjdXN0b20tZmllbGQtZGVzaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcHVsbC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSBDdXN0b20gRnVuY3Rpb24gRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZ1bmN0aW9uRmllbGQsIHZpc2libGU6IGlzRnVuY3Rpb25GaWVsZFwiPlNhdmU8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJDdXN0b20gRmllbGQgdXNpbmcgRnVuY3Rpb25cIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXtpc0Z1bmN0aW9uRmllbGQoIWlzRnVuY3Rpb25GaWVsZCgpKX0sIHRleHQ6IGlzRnVuY3Rpb25GaWVsZCgpPyAnQ2FuY2VsJzogJ0Z1bmN0aW9uJywgY3NzOiB7J2J0bi1wcmltYXJ5JzogIWlzRnVuY3Rpb25GaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRnVuY3Rpb25GaWVsZH1cIj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkZWQtZGl2XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNGdW5jdGlvbkZpZWxkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgbm93IGNyZWF0aW5nIGEgQ3VzdG9taXplZCBGaWVsZCB1c2luZyBGdW5jdGlvbnMgYXZhaWxhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybXVsYUZpZWxkTGFiZWxcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkN1c3RvbSBGaWVsZCBMYWJlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5EYXRhIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvcm11bGFEYXRhRm9ybWF0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlN0cmluZzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5JbnRlZ2VyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkRlY2ltYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Q3VycmVuY3k8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+RGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRhdGVUaW1lXCI+RGF0ZSBhbmQgVGltZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZm9ybXVsYURhdGFGb3JtYXQoKSA9PSAnRGVjaW1hbCcgfHwgZm9ybXVsYURhdGFGb3JtYXQoKSA9PSAnQ3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPlJvdW5kIHRvIERlY2ltYWwgUGxhY2VzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybXVsYURlY2ltYWxQbGFjZXNcIiBwbGFjZWhvbGRlcj1cIkNob29zZSBEZWNpbWFsIHBsYWNlcyAobGVhdmUgYmxhbmsgdG8gbm90IHVzZSByb3VuZGluZylcIiB0aXRsZT1cIkNob29zZSBEZWNpbWFsIHBsYWNlcyAobGVhdmUgYmxhbmsgdG8gbm90IHVzZSByb3VuZGluZylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgeW91ciBGdW5jdGlvbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmdW5jdGlvbi1jb2RlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGxhc3RQaWNrZWRGaWVsZCgpICYmIGxhc3RQaWNrZWRGaWVsZCgpLmZpZWxkVHlwZSA9PSAnSnNvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5TZWxlY3QgRGF0YSBGaWVsZHMgZnJvbSA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBsYXN0UGlja2VkRmllbGQoKS5maWVsZE5hbWVcIj48L3NwYW4+PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDoganNvbkZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tNCBjb2wteHMtNiBsaXN0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWRJbkFycmF5OiB7YXJyYXk6ICRwYXJlbnQuU2VsZWN0ZWRGaWVsZHMsIHZhbHVlOiAkZGF0YX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDoganNvbkNvbHVtbk5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJjdXN0b21GaWVsZFNlY3Rpb25cIiBkYXRhLWJpbmQ9XCJpZjogaXNGb3JtdWxhRmllbGRcIiBjbGFzcz1cImN1c3RvbS1maWVsZC1kZXNpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJ1aWxkIEN1c3RvbSBGaWVsZDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ2N1c3RvbS1maWVsZC1kZXNpZ25lcidcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY29sLTggcHVsbC1sZWZ0XCI+PHNwYW4gY2xhc3M9XCJmYSBmYS10YWJsZVwiPjwvc3Bhbj4mbmJzcDtTZWxlY3RlZCBkYXRhIGZvciB0aGUgUmVwb3J0PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHVsbC1yaWdodCByaWdodC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZFwiIGRhdGEtYmluZD1cInZpc2libGU6IFNlbGVjdGVkRmllbGRzKCkubGVuZ3RoLCBjbGljazogZnVuY3Rpb24oKSB7U2VsZWN0ZWRGaWVsZHMoW10pO31cIj5DbGVhciBhbGw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc2VsZWN0ZWQtZGF0YSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGxpbmtlZFJlcG9ydEZpZWxkcygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBiZy1saWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1ib29rbWFya1wiPjwvaT4gSW5jbHVkZSBTdWIgUmVwb3J0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc3ViLXJlcG9ydCdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdIdG1sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJnLWxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiPjwvaT4gRGVzaWduIHlvdXIgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1odG1sJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIEZpbHRlcnM8L2g1PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTBweDsgb3ZlcmZsb3cteDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiB1c2VTdG9yZWRQcm9jXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdmaWx0ZXItcGFyYW1ldGVycyd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogdXNlU3RvcmVkUHJvY1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAnZmlsdGVyLWdyb3VwJ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogRWRpdEZpbHRlcnNPblJlcG9ydFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvdyBzZXR0aW5nIHVwIGFuZCBzYXZpbmcgZmlsdGVycyBvbiBSZXBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaGlkZGVuOiB1c2VTdG9yZWRQcm9jXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEtc29ydFwiPjwvc3Bhbj4mbmJzcDtDaG9vc2UgU29ydGluZzwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc29ydCdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFNhdmVSZXBvcnRcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1ob3VyZ2xhc3NcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIFNjaGVkdWxlPC9oNT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4XCIgZGF0YS1iaW5kPVwiaWY6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC1zY2hlZHVsZSd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiB1c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItb3B0aW9ucydcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogYWRtaW5Nb2RlXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlJywgZGF0YTogbWFuYWdlQWNjZXNzfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBhZG1pbk1vZGUsIGNsaWNrOiBSdW5SZXBvcnRTcWxQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2RlXCI+PC9pPiBQcmV2aWV3IFJlcG9ydCBDb2RlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiBjYW5jZWxDcmVhdGVSZXBvcnRcIj5DYW5jZWwgZWRpdGluZyBSZXBvcnQ8L2E+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYmluZD1cInZpc2libGU6IFNhdmVSZXBvcnQoKSAmJiBDYW5TYXZlUmVwb3J0cygpLCBjbGljazogU2F2ZVdpdGhvdXRSdW5cIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCI+U2F2ZSBSZXBvcnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1iaW5kPVwidGV4dDogU2F2ZVJlcG9ydCgpICYmIENhblNhdmVSZXBvcnRzKCk/ICdTYXZlICYgUnVuIFJlcG9ydCc6ICdSdW4gUmVwb3J0JywgY2xpY2s6IFJ1blJlcG9ydFwiPlJ1biBSZXBvcnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJjaGFydC1zZXR0aW5nc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lciBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMiBjaGFydC1zZXR0aW5ncy1idG5cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZUNoYXJ0U2V0dGluZ3NcIiB0aXRsZT1cIlJlcG9ydCBzZXR0aW5nc1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZ1wiPjwvaT5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0LXNldHRpbmdzLXBhbmVsIGJvcmRlciBwLTIgc2hhZG93LXNtIGJnLWxpZ2h0XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd1NldHRpbmdzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1jbG9zZVwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVDaGFydFNldHRpbmdzXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtYi0wXCI+UmVwb3J0IFNldHRpbmdzPC9oNj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXNtIG1iLTIgc21hbGxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZSdcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaHJlZjogJyNjaGFydFRhYi0nICsgUmVwb3J0SUQoKSB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJhdHRyOiB7IGhyZWY6ICcjdGFibGVUYWItJyArIFJlcG9ydElEKCkgfSwgY3NzOiB7IGFjdGl2ZTogIShSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVcclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgc21hbGxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItcGFuZSBmYWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogJ2NoYXJ0VGFiLScgKyBSZXBvcnRJRCgpIH0sIGNzczogeyAnc2hvdyBhY3RpdmUnOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiQmFyIENoYXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY3NzOiB7ICdhY3RpdmUnOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIH0sIGNsaWNrOiBmdW5jdGlvbigpIHsgUmVwb3J0VHlwZSgnQmFyJyk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWJhci1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0XCIgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJQaWUgQ2hhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6IHsgJ2FjdGl2ZSc6IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfSwgY2xpY2s6IGZ1bmN0aW9uKCkgeyBSZXBvcnRUeXBlKCdQaWUnKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGllLWNoYXJ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIkxpbmUgQ2hhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6IHsgJ2FjdGl2ZSc6IFJlcG9ydFR5cGUoKSA9PT0gJ0xpbmUnIH0sIGNsaWNrOiBmdW5jdGlvbigpIHsgUmVwb3J0VHlwZSgnTGluZScpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saW5lLWNoYXJ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nQmFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYmFyQ2hhcnRIb3Jpem9udGFsXCIgLz4gSG9yaXpvbnRhbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYmFyQ2hhcnRTdGFja2VkXCIgLz4gU3RhY2tlZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdQaWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBwaWVDaGFydERvbnV0XCIgLz4gRG9udXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nTGluZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGxpbmVDaGFydEFyZWFcIiAvPiBBcmVhPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsXCI+QmFja2dyb3VuZCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLmJhY2tncm91bmRDb2xvciwgYXR0cjogeyBwbGFjZWhvbGRlcjogJ1NlbGVjdCcgfSwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5Gb250IENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogY2hhcnRPcHRpb25zKCkuZm9udENvbG9yLCBhdHRyOiB7IHBsYWNlaG9sZGVyOiAnU2VsZWN0JyB9LCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPlNlcmllcyBDb2xvcnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IGNoYXJ0T3B0aW9ucygpLnNlcmllc0NvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWJveCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6ICRkYXRhLCBldmVudDogeyBpbnB1dDogZnVuY3Rpb24oZGF0YSwgZXZlbnQpIHsgJHBhcmVudC51cGRhdGVTZXJpZXNDb2xvcigkaW5kZXgoKSwgZXZlbnQudGFyZ2V0LnZhbHVlKTsgfSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlciByZW1vdmUtY29sb3JcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5yZW1vdmVTZXJpZXNDb2xvclwiPiZ0aW1lczs8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbG9yLWJveCBidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkU2VyaWVzQ29sb3JcIiB0aXRsZT1cIkFkZCBTZXJpZXMgQ29sb3JcIiBzdHlsZT1cIm1hcmdpbi10b3A6IC03cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPkxlZ2VuZCBQb3NpdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogY2hhcnRPcHRpb25zKCkubGVnZW5kUG9zaXRpb24sIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlQ2hhcnQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyaWdodFwiPlJpZ2h0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRvcFwiPlRvcDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib3R0b21cIj5Cb3R0b208L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9uZVwiPk5vbmU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5Gb250IFNpemU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZm9udC1zaXplLWlucHV0XCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLmZvbnRTaXplLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkhPSdQaWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFydE9wdGlvbnMoKS5zaG93WEF4aXNMYWJlbCwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+WC1BeGlzIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFydE9wdGlvbnMoKS5zaG93WUF4aXNMYWJlbCwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+WS1BeGlzIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkgIT09ICdQaWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogY2hhcnRPcHRpb25zKCkuc2hvd0dyaWRsaW5lcywgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+R3JpZGxpbmVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFydE9wdGlvbnMoKS5zaG93U21hbGxWYWx1ZXNPbkxhYmVsLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5TaG93IFNtYWxsIFZhbHVlcyBPbiBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBzbWFsbCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+WS1BeGlzIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBwbGFjZWhvbGRlcj1cIiMsIyMwLjAwXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLnlBeGlzRm9ybWF0LCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgc21hbGwgbWItMSBkLWZsZXggZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlktQXhpcyBNaW48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLnlNaW4sIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlQ2hhcnQgfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlktQXhpcyBNYXg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLnlNYXgsIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlQ2hhcnQgfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgZmFkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICd0YWJsZVRhYi0nICsgUmVwb3J0SUQoKSB9LCBjc3M6IHsgJ3Nob3cgYWN0aXZlJzogIShSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5IZWFkZXIgQmFjayBDb2xvcjwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICd0YmwtY29sb3ItcGlja2VyLScgKyBSZXBvcnRJRCgpfSAsIHZhbHVlOiB0YWJsZVNldHRpbmdzKCkuaGVhZGVyQmFja0NvbG9yLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZVRhYmxlIH1cIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPkhlYWRlciBGb250IENvbG9yPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogJ3RibC1jb2xvci1waWNrZXItJyArIFJlcG9ydElEKCl9ICx2YWx1ZTogdGFibGVTZXR0aW5ncygpLmhlYWRlckZvbnRDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5Sb3cgQmFjayBDb2xvcjwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICd0YmwtY29sb3ItcGlja2VyLScgKyBSZXBvcnRJRCgpfSAsdmFsdWU6IHRhYmxlU2V0dGluZ3MoKS5yb3dCYWNrQ29sb3IsIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlVGFibGUgfVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsXCI+Um93IEZvbnQgQ29sb3I8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJhdHRyOiB7IGlkOiAndGJsLWNvbG9yLXBpY2tlci0nICsgUmVwb3J0SUQoKX0gLHZhbHVlOiB0YWJsZVNldHRpbmdzKCkucm93Rm9udENvbG9yLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZVRhYmxlIH1cIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5BbHQgUm93IEJhY2sgQ29sb3I8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ2YWx1ZTogdGFibGVTZXR0aW5ncygpLmFsdFJvd0JhY2tDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5BbHQgUm93IEZvbnQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ2YWx1ZTogdGFibGVTZXR0aW5ncygpLmFsdFJvd0ZvbnRDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsXCI+Qm9yZGVyczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZC1mbGV4IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbGV4LWZpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgdGFibGVTZXR0aW5ncygpLmJvcmRlcignbm9uZScpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnbm9uZScgfVwiPk5vbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxleC1maWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHRhYmxlU2V0dGluZ3MoKS5ib3JkZXIoJ2FsbCcpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnYWxsJyB9XCI+QWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsZXgtZmlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyB0YWJsZVNldHRpbmdzKCkuYm9yZGVyKCdvdXRlcicpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnb3V0ZXInIH1cIj5PdXRzaWRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsZXgtZmlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyB0YWJsZVNldHRpbmdzKCkuYm9yZGVyKCdpbm5lcicpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnaW5uZXInIH1cIj5JbnNpZGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGNvbC02XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPkJvcmRlciBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6IHRhYmxlU2V0dGluZ3MoKS5ib3JkZXJDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHNtYWxsIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBjbGVhclRhYmxlU2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkcmlsbGRvd25Nb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBDaGFydERyaWxsRG93bkRhdGFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EcmlsbGRvd24gRGF0YTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBwdWxsLXJpZ2h0XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IERyaWxsRG93bkRhdGEgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgbWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBEcmlsbERvd25EYXRhLCBhdHRyOiB7Y2xhc3M6ICd0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZCAnICsgJHBhcmVudC5zZWxlY3RlZFN0eWxlKCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBzdHlsZT1cInBvc2l0aW9uOiBzdGlja3k7IHRvcDogLTFweDsgei1pbmRleDogMjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIm5vLWhpZ2hsaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogQ29sdW1ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogZmllbGRJZCB9LCBjc3M6IHsncmlnaHQtYWxpZ24nOiBJc051bWVyaWN9LCBzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGgsICdiYWNrZ3JvdW5kLWNvbG9yJzogaGVhZGVyQmFja0NvbG9yIH0sIGhpZGRlbjogb3V0ZXJHcm91cFwiIHN0eWxlPVwiYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTGFiZWwyKCkgPyBmaWVsZExhYmVsMigpIDogKGZpZWxkTGFiZWwoKSA/IGZpZWxkTGFiZWwoKSA6IGZpZWxkTmFtZSksIHN0eWxlOiB7J2NvbG9yJzogaGVhZGVyRm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBoZWFkZXJGb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCd9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IFJvd3MgJiYgUm93cy5sZW5ndGggPCAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46IENvbHVtbnMubGVuZ3RofVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImhpZGRlbjogb3V0ZXJHcm91cCwgc3R5bGU6IHsnYmFja2dyb3VuZC1jb2xvcic6IGJhY2tDb2xvciwgJ2NvbG9yJzogZm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBmb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBMaW5rVG8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYmluZD1cImF0dHI6IHtocmVmOiBMaW5rVG99XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogZm9ybWF0dGVkVmFsXCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBMaW5rVG8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1jZW50ZXJlZFwiIGRhdGEtYmluZD1cIndpdGg6IHBhZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5saW5lIHNtYWxsIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdCB0b3RhbC1yZWNvcmRzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogcGFnZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJ1RvdGFsIFJlY29yZHM6ICcgKyB0b3RhbFJlY29yZHMoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXhzXCIgdGl0bGU9XCJEb3dubG9hZCBFeGNlbFwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LmV4cG9ydEV4Y2VsXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWxlLWV4Y2VsLW9cIj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI3NxbERyaWxsRG93bk1vZGFsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuYWRtaW5Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jb2RlXCI+PC9zcGFuPiBWaWV3IENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1yaWdodFwiIGRhdGEtYmluZD1cInZpc2libGU6IHBhZ2VzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdwYWdlci10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwic3FsTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5SZXBvcnQgQ29kZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbihkYXRhLCBldmVudCkgeyBjb3B5U3FsVG9DbGlwYm9hcmQoZXZlbnQudGFyZ2V0KTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9pPiZuYnNwO0NvcHlcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgcHVsbC1yaWdodFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIGRhdGEtYmluZD1cIndpdGg6IFJlcG9ydFJlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydFNxbENvZGVcIiBzdHlsZT1cIm92ZXJmbG93LXg6IGF1dG87IG1heC1oZWlnaHQ6IDUwMHB4OyBvdmVyZmxvdy15OiBzY3JvbGw7IGJvcmRlcjogMXB4IHNvbGlkOyBwYWRkaW5nOiAxMHB4O1wiIGNsYXNzPVwiYmctZGFyayB0ZXh0LWxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT48Y29kZSBkYXRhLWJpbmQ9XCJodG1sOiBSZXBvcnRTcWxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj48L2NvZGU+PC9wcmU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInNxbERyaWxsRG93bk1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6Q2hhcnREcmlsbERvd25EYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EcmlsbCBEb3duIFJlcG9ydCBDb2RlPC9oND5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKGRhdGEsIGV2ZW50KSB7IGNvcHlTcWxUb0NsaXBib2FyZChldmVudC50YXJnZXQpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L2k+Jm5ic3A7Q29weVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBwdWxsLXJpZ2h0XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgZGF0YS1iaW5kPVwid2l0aDpEcmlsbERvd25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVwb3J0U3FsQ29kZVwiIHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgbWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IHNjcm9sbDsgYm9yZGVyOiAxcHggc29saWQ7IHBhZGRpbmc6IDEwcHg7XCIgY2xhc3M9XCJiZy1kYXJrIHRleHQtbGlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIGRhdGEtYmluZD1cImh0bWw6IFJlcG9ydFNxbFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPjwvY29kZT48L3ByZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJub2FjY291bnRNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BY2NvdW50IG5vdCBTZXR1cDwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5kb3RuZXQgUmVwb3J0IEFjY291bnQgQ29uZmlndXJhdGlvbiBtaXNzaW5nITwvcD5cclxuICAgICAgICAgICAgICAgIDxwPllvdSBkbyBub3QgaGF2ZSB0aGUgbmVjY2Vzc2FyeSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gY29tcGxldGVkIHRvIHVzZSBkb3RuZXQgUmVwb3J0LjwvcD5cclxuICAgICAgICAgICAgICAgIDxwPlBsZWFzZSB2aWV3IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9kb3RuZXRyZXBvcnQuY29tL2Jsb2dzL2dldHRpbmctc3RhcnRlZC13aXRoLWRvdG5ldC1yZXBvcnQvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R2V0dGluZyBTdGFydGVkIEd1aWRlPC9hPiB0byBjb3JyZWN0bHkgY29uZmlndXJlIGRvdG5ldCBSZXBvcnQuPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInBkZi1vcHRpb25zLXNjaGVkdWxlLXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogUGRmUGFnZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwicGRmT3B0aW9uc1NjaGVkdWxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1wZGYtbyBtZS0yXCI+PC9pPiBTZXQgUERGIFBhZ2UgU2l6ZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHJvdyBnLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUERGIHdpbGwgYmUgZXhwb3J0ZWQgdXNpbmcgdGhlIHNlbGVjdGVkIHBhZ2Ugc2l6ZS4gRW5zdXJlIHlvdXIgY29udGVudCBmaXRzIHdlbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb250ZW50IHdpZHRoIGV4Y2VlZHMgdGhlIHNlbGVjdGVkIHNpemUsIGl0IHdpbGwgZGVmYXVsdCB0byBMZXR0ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cIndvcmQtb3B0aW9ucy1zY2hlZHVsZS10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IFdvcmRQYWdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJwZGZPcHRpb25zU2NoZWR1bGVNb2RhbExhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLXBkZi1vIG1lLTJcIj48L2k+IFNldCBXT1JEIFBhZ2UgU2l6ZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHJvdyBnLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgV09SRCB3aWxsIGJlIGV4cG9ydGVkIHVzaW5nIHRoZSBzZWxlY3RlZCBwYWdlIHNpemUuIEVuc3VyZSB5b3VyIGNvbnRlbnQgZml0cyB3ZWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29udGVudCB3aWR0aCBleGNlZWRzIHRoZSBzZWxlY3RlZCBzaXplLCBpdCB3aWxsIGRlZmF1bHQgdG8gTGV0dGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJ3b3JkLW9wdGlvbnMtdGVtcGxhdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogV29yZFBhZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIndvcmRPcHRpb25zTW9kYWxMYWJlbFwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsZS1wZGYtbyBtZS0yXCI+PC9pPiBFeHBvcnQgdG8gV09SRDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSByb3cgZy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExlZnQgU2lkZTogUGFnZSBQcmV2aWV3IFNWRyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBGb3JtIE9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgV29yZCB3aWxsIGJlIGV4cG9ydGVkIHVzaW5nIHRoZSBzZWxlY3RlZCBwYWdlIHNpemUuIEVuc3VyZSB5b3VyIGNvbnRlbnQgZml0cyB3ZWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29udGVudCB3aWR0aCBleGNlZWRzIHRoZSBzZWxlY3RlZCBzaXplLCBpdCB3aWxsIGRlZmF1bHQgdG8gTGV0dGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtYmluZD1cImNsaWNrOiBkb3dubG9hZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWQgbWUtMVwiPjwvaT4gRG93bmxvYWQgV09SRFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInBkZi1vcHRpb25zLXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogUGRmUGFnZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwicGRmT3B0aW9uc01vZGFsTGFiZWxcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtcGRmLW8gbWUtMlwiPjwvaT4gRXhwb3J0IHRvIFBERjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSByb3cgZy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExlZnQgU2lkZTogUGFnZSBQcmV2aWV3IFNWRyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBGb3JtIE9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUERGIHdpbGwgYmUgZXhwb3J0ZWQgdXNpbmcgdGhlIHNlbGVjdGVkIHBhZ2Ugc2l6ZS4gRW5zdXJlIHlvdXIgY29udGVudCBmaXRzIHdlbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb250ZW50IHdpZHRoIGV4Y2VlZHMgdGhlIHNlbGVjdGVkIHNpemUsIGl0IHdpbGwgZGVmYXVsdCB0byBMZXR0ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGRvd25sb2FkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBtZS0xXCI+PC9pPiBEb3dubG9hZCBQREZcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuYCk7XHJcbiAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuXHJcbn1cclxuIiwiPGRpdiBpZD1cImRvdC1uZXQtcmVwb3J0XCIgY2xhc3M9XCJib2R5LWNvbnRlbnRcIj5cclxuXHJcbjxkaXY+XHJcbiAgICA8aDI+TWFuYWdlIERhdGFiYXNlPC9oMj5cclxuICAgIDxwPlxyXG4gICAgICAgIFlvdSBjYW4gc2VsZWN0IGFuZCBtYW5hZ2UgZGlzcGxheSBuYW1lcyBmb3IgdGhlIFRhYmxlcyBhbmQgQ29sdW1ucyB5b3Ugd291bGQgbGlrZSB0byBhbGxvdyBpbiBEb3RuZXQgUmVwb3J0IEJ1aWxkZXIuXHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICBEbyBub3QgZXhwb3NlIHRoaXMgU2V0dXAgVG9vbCB0byBlbmQgdXNlcnMgd2hvIHNob3VsZCBub3QgaGF2ZSBhY2Nlc3MgdG8gaXQuIElkZWFsbHksIG9ubHkgRGV2ZWxvcGVycyBzaG91bGQgYmUgZ2l2ZW4gYWNjZXNzIHRvIHRoaXMgdXRpbGl0eS5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIiBkYXRhLWJpbmQ9XCJjbGljazogcmVmcmVzaEFsbFwiIHRpdGxlPVwiUmVsb2FkIGFsbCBUYWJsZSBhbmQgQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+IFJlZnJlc2hcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2U7XCI+XHJcbiAgICAgICAgTG9hZGluZy4uLlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8IS0tIE5hdiB0YWJzIC0tPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBmbGV4LWdyb3ctMVwiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI3RhYmxlc2ZpZWxkc1wiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjdXN0b21UYWJsZU1vZGUoZmFsc2UpOyBhY3RpdmVUYWJsZShudWxsKTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvaT4gRGF0YWJhc2UgVGFibGVzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdGFibGVzZmllbGRzXCIgYXJpYS1jb250cm9scz1cImN1c3RvbVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgY3VzdG9tVGFibGVNb2RlKHRydWUpOyBhY3RpdmVUYWJsZShudWxsKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L2k+IEN1c3RvbSBUYWJsZXNcclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNyZWxhdGlvbnNcIiBhcmlhLWNvbnRyb2xzPVwicHJvZmlsZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjwvaT4gUmVsYXRpb25zXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjcHJvY2VkdXJlXCIgYXJpYS1jb250cm9scz1cInByb2NlZHVyZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29kZVwiPjwvaT4gU3RvcmVkIFByb2NzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjc2NoZWR1bGVzXCIgYXJpYS1jb250cm9scz1cInNjaGVkdWxlc1wiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xvY2stb1wiPjwvaT4gU2NoZWR1bGVzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI2Z1bmN0aW9uc1wiIGFyaWEtY29udHJvbHM9XCJmdW5jdGlvbnNcIiByb2xlPVwidGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZ3NcIj48L2k+IEN1c3RvbSBGdW5jdGlvbnNcclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNtYW5hZ2VhY2Nlc3NcIiBhcmlhLWNvbnRyb2xzPVwibWFuYWdlYWNjZXNzXCIgcm9sZT1cInRhYlwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1mb2xkZXJcIj48L2k+IE1hbmFnZSBSZXBvcnRzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29ubmVjdGlvblwiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVnXCI+PC9pPiBEYXRhIENvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJyIC8+XHJcbjwvZGl2PlxyXG48IS0tIFRhYiBwYW5lcyAtLT5cclxuPGRpdiBjbGFzcz1cImZpeC1jb250ZW50XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IHRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwiY29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICA8Yj5NYW5hZ2UgRGF0YSBDb25uZWN0aW9uPC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIERhdGEgQ29ubmVjdGlvbiBncm91cHMgZGF0YSBzY2hlbWFzIChpbmNsdWRpbmcgdGFibGVzIGFuZCBzdG9yZWQgcHJvY2VkdXJlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiksIFJlcG9ydHMsIGFuZCBEYXNoYm9hcmRzIGludG8gYSBzaW5nbGUgZW52aXJvbm1lbnQuIFlvdSBjYW4gY3JlYXRlIG11bHRpcGxlIERhdGEgQ29ubmVjdGlvbnMgYW5kIGVhc2lseSBzd2l0Y2ggYmV0d2VlbiB0aGVtIGZvciBzZXBhcmF0ZSBlbnZpcm9ubWVudCBtYW5hZ2VtZW50LlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6MjUlXCIgZGF0YS1iaW5kPVwib3B0aW9uczogRGF0YUNvbm5lY3Rpb25zLCBvcHRpb25zVGV4dDogJ0RhdGFDb25uZWN0TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0RhdGFDb25uZWN0R3VpZCcsIHZhbHVlOiBjdXJyZW50Q29ubmVjdGlvbktleVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGVkLXRvcFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cInZpc2libGU6IGZhbHNlXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2Nvbm5lY3Rpb24tc2V0dXAtbW9kYWxcIj5NYW5hZ2UgREIgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBzd2l0Y2hDb25uZWN0aW9uLCB2aXNpYmxlOiBjYW5Td2l0Y2hDb25uZWN0aW9uXCI+U3dpdGNoIENvbm5lY3Rpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogZWRpdERhdGFDb25uZWN0aW9uTW9kYWwsIGhpZGRlbjogY2FuU3dpdGNoQ29ubmVjdGlvblwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNhZGQtY29ubmVjdGlvbi1tb2RhbFwiPkVkaXQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBuZXdEYXRhQ29ubmVjdGlvbk1vZGFsXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2FkZC1jb25uZWN0aW9uLW1vZGFsXCI+QWRkIE5ldyBDb25uZWN0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGV4cG9ydEFsbCwgdmlzaWJsZTogZmFsc2VcIj5FeHBvcnQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBpbXBvcnRTdGFydCwgdmlzaWJsZTogZmFsc2VcIj5JbXBvcnQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogaW1wb3J0aW5nRmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSBmaWxlIHlvdSBoYXZlIHByZXZpb3VzbHkgZXhwb3J0ZWQgZnJvbSB0aGlzIHV0aWxpdHkuIFRoZSBzeXN0ZW0gd2lsbCBsb2FkIHRoZSBzY3JlZW4gd2l0aCB0aGUgRGF0YSBDb25uZWN0aW9uIHNldHRpbmcgaW4gdGhlIGZpbGUsIGhvd2V2ZXIsIGl0IHdpbGwgPGI+Tk9UPC9iPiBiZSBzYXZlZCB1bnRpbCB5b3UgcHJlc3MgdGhlIFNhdmUgQWxsIGJ1dHRvbiBvciBTYXZlIGluZGl2aWR1YWwgdGFibGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi5qc29uXCIgaWQ9XCJpbXBvcnQtZmlsZVwiIGRhdGEtYmluZD1cImV2ZW50OiB7IGNoYW5nZTogZnVuY3Rpb24oKSB7IGltcG9ydEZpbGUoJGVsZW1lbnQuZmlsZXNbMF0pIH0gfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlua1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbXBvcnRDYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGI+QWNjb3VudCBMZXZlbCBTZXR0aW5nczwvYj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogc2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibXQtMiBtYi0yXCI+QWRtaW4gT3B0aW9uczwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwidXNlQ2xpZW50SWRJbkFkbWluXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogdXNlQ2xpZW50SWRJbkFkbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJ1c2VDbGllbnRJZEluQWRtaW5cIj5Vc2UgQ2xpZW50IElEIGluIEFkbWluIG1vZGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5FbmFibGUgdGhpcyB0byByZXNwZWN0IGNsaWVudCBJRHMgZXZlbiB3aGVuIGluIGFkbWluIG1vZGUuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJ1c2VTcWxCdWlsZGVySW5BZG1pbk1vZGVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTcWxCdWlsZGVySW5BZG1pbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInVzZVNxbEJ1aWxkZXJJbkFkbWluTW9kZVwiPlVzZSBTUUwgQnVpbGRlciBpbiBBZG1pbiBNb2RlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+QWxsb3dzIFNRTCBxdWVyeSBidWlsZGVyIGFjY2VzcyA8Yj5vbmx5PC9iPiBpbiBhZG1pbiBtb2RlLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibXQtMyBtYi0yXCI+Q3VzdG9taXphdGlvbjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwidXNlU3FsQ3VzdG9tRmllbGRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTcWxDdXN0b21GaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwidXNlU3FsQ3VzdG9tRmllbGRcIj5Vc2UgU1FMIGluIEN1c3RvbSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPkFsbG93cyB0aGUgdXNlIG9mIFNRTCBleHByZXNzaW9ucyBpbiBjdXN0b20gZmllbGRzLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHVzZVByb21wdEJ1aWxkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlVzZSBBSSBhaWRlZCwgcHJvbXB0IGJhc2VkIFJlcG9ydCBCdWlsZGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+TGV0IG5vbiBBZG1pbiB1c2VycyBjcmVhdGUgcmVwb3J0cyB1c2luZyB0aGUgQUkgYWlkZWQgUHJvbXB0IGJhc2VkIGJ1aWxkZXI8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VBbHRQaXZvdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UGl2b3Qgd2l0aCBEcmlsbGRvd248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5Vc2UgYWx0ZXJuYXRlIFBpdm90IG1ldGhvZCB0aGF0IGRvZXNu4oCZdCB1c2UgU1FM4oCZcyBQSVZPVC48YnI+QWxsb3dzIGRyaWxsZG93biwgYnV0IG1heSBiZSBzbG93ZXIuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtdC0zIG1iLTJcIj5SZXBvcnQgT3B0aW9uczwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwiYWxsb3dVc2Vyc1RvQ3JlYXRlUmVwb3J0c1wiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGFsbG93VXNlcnNUb0NyZWF0ZVJlcG9ydHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImFsbG93VXNlcnNUb0NyZWF0ZVJlcG9ydHNcIj5BbGxvdyBBbGwgVXNlcnMgdG8gQ3JlYXRlIFJlcG9ydHM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5QZXJtaXRzIHVzZXJzIHRvIGdlbmVyYXRlIGFuZCBjdXN0b21pemUgcmVwb3J0cy48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzaG93SW1wb3J0RXhwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5BbGxvdyBBbGwgVXNlcnMgdG8gZXhwb3J0L2ltcG9ydMKgcmVwb3J0czwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3cgbm9uIGFkbWluIHVzZXJzIHRvIGV4cG9ydCBhbmQgaW1wb3J0IFJlcG9ydHMgaW4gdGhlIHN5c3RlbS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibXQtMiBtYi0yXCI+Rm9sZGVyIE9wdGlvbnM8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwibm9Gb2xkZXJzXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9Gb2xkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJub0ZvbGRlcnNcIj5ObyBGb2xkZXJzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+RGlzYWJsZXMgdGhlIHVzZSBvZiBmb2xkZXJzIGluIHRoZSBhcHBsaWNhdGlvbi48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwibm9EZWZhdWx0Rm9sZGVyXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9EZWZhdWx0Rm9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJub0RlZmF1bHRGb2xkZXJcIj5ObyBEZWZhdWx0IEZvbGRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlJlbW92ZXMgdGhlIERlZmF1bHQgZm9sZGVyLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNob3dFbXB0eUZvbGRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlNob3cgRW1wdHkgRm9sZGVyczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPldpbGwgc2hvdyBlbXB0eSBmb2xkZXJzIGZvciBub24gYWRtaW4gdXNlcnMuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJhbGxvd1VzZXJzVG9NYW5hZ2VGb2xkZXJzXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYWxsb3dVc2Vyc1RvTWFuYWdlRm9sZGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiYWxsb3dVc2Vyc1RvTWFuYWdlRm9sZGVyc1wiPkFsbG93IEFsbCBVc2VycyB0byBNYW5hZ2UgRm9sZGVyczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPkdyYW50cyBwZXJtaXNzaW9uIHRvIG9yZ2FuaXplIGFuZCBtYW5hZ2UgZm9sZGVycyB3aXRob3V0IGFkbWluIG1vZGUuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtdC0zIG1iLTJcIj5FeHBvcnQgT3B0aW9uczwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHVzZUFsdFBkZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UERGIEV4cG9ydCB3aXRob3V0IENocm9taXVtPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+VXNlIGFsdGVybmF0ZSBQREYgZXhwb3J0IG1ldGhvZCB0aGF0IGRvZXNu4oCZdCByZWx5IG9uIENocm9taXVtLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGRvbnRYbWxFeHBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPkhpZGUgWE1MIEV4cG9ydCBvcHRpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5SZW1vdmUgWE1MIEV4cG9ydCBvcHRpb24uPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZG9udFdvcmRFeHBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPkhpZGUgV29yZCBFeHBvcnQgb3B0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+UmVtb3ZlIFdvcmQgRXhwb3J0IG9wdGlvbi48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzaG93UGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlNob3cgUGFnZSBTaXplIG9uIFBERiAmIFdvcmQgZXhwb3J0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+RGlzcGxheSBkb2N1bWVudCBkaW1lbnNpb25zIGluIGV4cG9ydGVkIFBERiAmIFdvcmQuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInNhdmVBcHBTZXR0aW5nc1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVBcHBTZXR0aW5nc1wiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZSBhY3RpdmVcIiBpZD1cInRhYmxlc2ZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8YiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjdXN0b21UYWJsZU1vZGUoKSA/ICdDdXN0b20gVGFibGVzJyA6ICdEYXRhYmFzZSBUYWJsZXMnXCI+PC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIERlZmluZSBDdXN0b20gVGFibGVzIHVzaW5nIFNRTCBTZWxlY3QgUXVlcnkgdG8gdXNlIGluIERvdG5ldCBSZXBvcnQgZm9yIFJlcG9ydGluZyBhbmQgQW5hbHl0aWNzLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaGlkZGVuOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICBTZWxlY3QgVGFibGVzIG9yIFZpZXdzIGZyb20geW91ciBEYXRhYmFzZSB0byB1c2UgaW4gRG90bmV0IFJlcG9ydCBmb3IgUmVwb3J0aW5nIGFuZCBBbmFseXRpY3MuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogVGFibGVzXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyIFRhYmxlcy4uLlwiIGRhdGEtYmluZD1cInZhbHVlOiB0YWJsZUZpbHRlciwgdmFsdWVVcGRhdGU6ICdhZnRlcmtleWRvd24nXCIgc3R5bGU9XCJmbG9hdDogbGVmdDsgd2lkdGg6IDE4MHB4OyBtYXJnaW4tcmlnaHQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBjbGVhclRhYmxlRmlsdGVyLCAgdmlzaWJsZTogdGFibGVGaWx0ZXIoKSE9JycgJiYgdGFibGVGaWx0ZXIoKSE9bnVsbFwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtcmVtb3ZlXCI+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZVNob3dBbGwsIGhpZGRlbjogJHJvb3QuY3VzdG9tVGFibGVNb2RlKCkgfHwgJHJvb3Qub25seUFwaSgpLCB0ZXh0OiB1c2VkT25seSgpID8gJ1Nob3cgYWxsJyA6ICdTaG93IHVzZWQgb25seSdcIj5TaG93IHVzZWQgb25seTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QuY3VzdG9tU3FsLmFkZE5ld0N1c3RvbVNxbFRhYmxlLCB2aXNpYmxlOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5BZGQgTmV3IEN1c3RvbSBUYWJsZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QubG9hZEZyb21EYXRhYmFzZSwgaGlkZGVuOiAkcm9vdC5jdXN0b21UYWJsZU1vZGUoKSB8fCAhJHJvb3Qub25seUFwaSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvc3Bhbj4gTG9hZCBhbGwgRGF0YWJhc2UgVGFibGVzXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnZpc3VhbGl6ZUpvaW5zXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1hcnJvd3MtaFwiPjwvc3Bhbj4gVmlzdWFsaXplIEpvaW5zPC9idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgZXhwb3J0VGFibGVzSnNvbih0cnVlKSB9LCB2aXNpYmxlOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9zcGFuPiBFeHBvcnQgQ3VzdG9tIFRhYmxlc1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgZXhwb3J0VGFibGVzSnNvbihmYWxzZSkgfSwgdmlzaWJsZTogISRyb290LmN1c3RvbVRhYmxlTW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvc3Bhbj4gRXhwb3J0IFRhYmxlcy9WaWV3c1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjdXBsb2FkVGFibGVzRmlsZU1vZGFsXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWZpbGVcIj48L3NwYW4+IEltcG9ydCBUYWJsZXMvVmlld3NcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIk1hbmFnZSBDYXRlZ29yaWVzXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NhdGVnb3J5LW1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1zZXJ2ZXJcIj48L3NwYW4+IE1hbmFnZSBDYXRlZ29yaWVzXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNlbGVjdEFsbCwgdmlzaWJsZTogISRyb290Lm9ubHlBcGkoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L3NwYW4+IFNlbGVjdCBBbGwgVGFibGVzXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5zYXZlQ2hhbmdlcygkcm9vdC5jdXN0b21UYWJsZU1vZGUoKSkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW9cIj48L3NwYW4+IFNhdmUgQWxsIFRhYmxlc1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGhyIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00IGNvbC1sZy0zIGJvcmRlci1lbmRcIiBzdHlsZT1cImhlaWdodDogMTAwdmg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlcy5tb2RlbCgpLmZpbHRlcih0ID0+ICF0LkN1c3RvbVRhYmxlKCkpLmxlbmd0aFwiPjwvc3Bhbj4gVGFibGVzL1ZpZXdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJHJvb3Qub25seUFwaSgpID8gJ2NvbmZpZ3VyZWQgYW5kIHVzZWQnIDogJ3JlYWQgZnJvbSBkYXRhYmFzZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgZy0zXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogcGFnZWRUYWJsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2F0ZWdvcnkgY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2VsZWN0ZWRcIiB0aXRsZT1cIkNoZWNrIHRvIHVzZSBpbiBEb3RuZXQgUmVwb3J0LCB1bmNoZWNrIHRvIFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogVGFibGVOYW1lLGF0dHI6IHsgdGl0bGU6IFRhYmxlTmFtZSB9LCBjbGljazogZnVuY3Rpb24oKSB7ICRyb290LmFjdGl2ZVRhYmxlKCRkYXRhKTsgfVwiIGNsYXNzPVwidGFibGUtbmFtZS1sYWJlbFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogSXNWaWV3XCIgY2xhc3M9XCJsYWJlbC1zbVwiPih2aWV3KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0aXRsZT1cIlNhdmUgdGhpcyBUYWJsZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgc2F2ZVRhYmxlKCRyb290LmtleXMuQWNjb3VudEFwaUtleSwgJHJvb3Qua2V5cy5EYXRhYmFzZUFwaUtleSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiUHJldmlldyB0aGlzIFRhYmxlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBwcmV2aWV3VGFibGUoJHJvb3Qua2V5cy5BY2NvdW50QXBpS2V5LCAkcm9vdC5rZXlzLkRhdGFiYXNlQXBpS2V5KTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10YWJsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5hY3RpdmVUYWJsZSgkZGF0YSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGNvbC1tZC0xMlwiIGRhdGEtYmluZD1cIndpdGg6IHBhZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncGFnZXItdGVtcGxhdGUnLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMCBwdC0wXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweFwiIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04IGNvbC1sZy05XCIgaWQ9XCJ0YWJsZURldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IHBhZ2VkVGFibGVzKCkubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6NDBweDtmbG9hdDpsZWZ0O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSB0cmFuc2xhdGVZKDZweCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO1wiIGZpbGw9XCIjMDAwMDAwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gZmxhdC1saW5lXCI+PGcgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCIgc3Ryb2tlLXdpZHRoPVwiMC4wNDhcIj48L2c+PGc+PHBhdGggZD1cIk0xOCwyMUExMy4xNywxMy4xNywwLDAsMSw5LDguNTFWM1wiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz1cIjEyIDYgOSAzIDYgNlwiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BvbHlsaW5lPjwvZz48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgZnctYm9sZFwiIHN0eWxlPVwiZmxvYXQ6bGVmdDsgcGFkZGluZy1sZWZ0OiA1cHg7XCI+Tm8gPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+Q3VzdG9tIDwvc3Bhbj4gVGFibGVzIGFkZGVkIHlldCwgY2xpY2sgXCI8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjdXN0b21UYWJsZU1vZGUoKSA/ICdBZGQgTmV3IEN1c3RvbSBUYWJsZScgOiAnTG9hZCBBbGwgVGFibGVzJ1wiPjwvc3Bhbj5cIiB0byBnZXQgc3RhcnRlZCE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhYWN0aXZlVGFibGUoKSAmJiBwYWdlZFRhYmxlcygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6NDBweDtmbG9hdDpsZWZ0O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSB0cmFuc2xhdGVZKDZweCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO1wiIGZpbGw9XCIjMDAwMDAwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gZmxhdC1saW5lXCI+PGcgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCIgc3Ryb2tlLXdpZHRoPVwiMC4wNDhcIj48L2c+PGc+PHBhdGggZD1cIk0xOCwyMUExMy4xNywxMy4xNywwLDAsMSw5LDguNTFWM1wiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz1cIjEyIDYgOSAzIDYgNlwiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BvbHlsaW5lPjwvZz48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgZnctYm9sZFwiIHN0eWxlPVwiZmxvYXQ6bGVmdDsgcGFkZGluZy1sZWZ0OiA1cHg7XCI+U2VsZWN0IGEgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+Q3VzdG9tIDwvc3Bhbj4gVGFibGUsIG9yIFwiPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogY3VzdG9tVGFibGVNb2RlKCkgPyAnQWRkIE5ldyBDdXN0b20gVGFibGUnIDogJ0xvYWQgQWxsIFRhYmxlcydcIj48L3NwYW4+XCI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBhY3RpdmVUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZWxlY3RlZFwiIHRpdGxlPVwiQ2hlY2sgdG8gdXNlIGluIERvdG5ldCBSZXBvcnQsIHVuY2hlY2sgdG8gUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogSXNWaWV3XCIgY2xhc3M9XCJsYWJlbC1zbVwiPih2aWV3KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHNhdmVUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+IFNhdmUgQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJQcmV2aWV3IHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHByZXZpZXdUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L2k+IFByZXZpZXcgRGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXJcIiB0aXRsZT1cIkRlbGV0ZSB0aGlzIFRhYmxlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBkZWxldGVUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+IFJlbW92ZSBUYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJNYW5hZ2UgQ2F0ZWdvcnlcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjY2F0ZWdvcnktbWFuYWdlLW1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdGVkQ2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiRXhwb3J0IHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGV4cG9ydFRhYmxlSnNvbigpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtc21cIj5EaXNwbGF5IE5hbWU8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPlNjaGVtYSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IFNjaGVtYU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkZXByZWNhdGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPkFjY291bnQgSWQgRmllbGQ8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogQWNjb3VudElkRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBEb05vdERpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIE5vdCBEaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogQ3VzdG9tVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5jdXN0b21TcWwudmlld0N1c3RvbVNxbC5iaW5kKCRkYXRhKVwiPlZpZXcgQ3VzdG9tIFNRTDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtIG0tMFwiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6IENvbHVtbnMoKS5sZW5ndGhcIj48L3NwYW4+IENvbHVtbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYXV0b0Zvcm1hdCwgdmlzaWJsZTogU2VsZWN0ZWRcIj5BdXRvIEZvcm1hdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogdW5zZWxlY3RBbGxDb2x1bW5zLCB2aXNpYmxlOiBTZWxlY3RlZFwiPlVuc2VsZWN0IEFsbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2VsZWN0QWxsQ29sdW1ucywgdmlzaWJsZTogU2VsZWN0ZWRcIj5TZWxlY3QgQWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cInNvcnRhYmxlOiB7IGRhdGE6IENvbHVtbnMsIG9wdGlvbnM6IHsgaGFuZGxlOiAnLnNvcnRhYmxlJywgY3Vyc29yOiAnbW92ZScgfSwgYWZ0ZXJNb3ZlOiAkcm9vdC5UYWJsZXMuY29sdW1uU29ydGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRwYXJlbnQuRHluYW1pY0NvbHVtbnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogRGlzcGxheU5hbWUsIGF0dHI6IHsgdGl0bGU6ICdEQiBmaWVsZCBpcyAnICsgQ29sdW1uTmFtZSgpIH1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJpZjogISRwYXJlbnQuRHluYW1pY0NvbHVtbnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZWxlY3RlZCwgZW5hYmxlOiAkcGFyZW50LlNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWUsIGF0dHI6IHsgdGl0bGU6ICdEQiBmaWVsZCBpcyAnICsgQ29sdW1uTmFtZSgpIH1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IEZpZWxkVHlwZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidmlzaWJsZTogUHJpbWFyeUtleVwiIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1wcmltYXJ5XCI+UHJpbWFyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtYmluZD1cInZpc2libGU6IEZvcmVpZ25LZXlcIiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCI+Rm9yZWlnbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1yaWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2x1bW4tbW9kYWxcIiB0aXRsZT1cIkFsbCBjb2x1bW4gb3B0aW9uc1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zZWxlY3RDb2x1bW4uYmluZCgkZGF0YSwgZmFsc2UpXCI+Li4uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0IHNvcnRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1hcnJvd3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cInJlbGF0aW9uc1wiPlxyXG4gICAgICAgICAgICA8Yj5SZWxhdGlvbnM8L2I+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgU2V0dXAgeW91ciBEYXRhYmFzZSBSZWxhdGlvbnMgZm9yIERvdG5ldCBSZXBvcnQgdG8gcHJvZHVjZSBkeW5hbWljIHF1ZXJpZXNcclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBBZGRBbGxSZWxhdGlvbnNcIj5BdXRvIEFkZCBKb2luczwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBBZGRKb2luXCI+QWRkIG5ldyBKb2luPC9idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IFNhdmVKb2luc1wiPlNhdmUgSm9pbnM8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogdmlzdWFsaXplSm9pbnNcIj5WaXN1YWxpemUgSm9pbnM8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRGVsZXRlVmlzaWJsZUpvaW5zXCIgdGl0bGU9XCJEZWxldGUgZmlsdGVyZWQgSm9pbnNcIj5EZWxldGUgSm9pbnM8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRXhwb3J0Sm9pbnNcIiB0aXRsZT1cIkV4cG9ydCBmaWx0ZXJlZCBKb2luc1wiPkV4cG9ydCBKb2luczwvYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiN1cGxvYWRKb2luc0ZpbGVNb2RhbFwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvc3Bhbj4gSW1wb3J0IEpvaW5zXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImZvcm0tam9pbnNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNEaXJ0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gUGxlYXNlIGJlIHN1cmUgdG8gY2xpY2sgPGI+U2F2ZSBKb2luczwvYj4gdG8gc2F2ZSB5b3VyIGNoYW5nZXMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmdy1ib2xkIGJnLWxpZ2h0IGJvcmRlci1ib3R0b20gcHktMlwiIGRhdGEtYmluZD1cIndpdGg6IEpvaW5GaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVwZWF0IGZvciBlYWNoIGNvbHVtbiBoZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBUYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogcHJpbWFyeVRhYmxlLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNvcnRCeVByaW1hcnlUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiAkcm9vdC5zb3J0RGlyZWN0aW9uLnByaW1hcnlUYWJsZSgpID8gJ2ZhLXNvcnQtYXNjJyA6ICdmYS1zb3J0LWRlc2MnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBwcmltYXJ5RmllbGQsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj48aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc29ydEJ5RmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5wcmltYXJ5RmllbGQoKSA/ICdmYS1zb3J0LWFzYycgOiAnZmEtc29ydC1kZXNjJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGpvaW5UeXBlLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc29ydEJ5Sm9pblR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5qb2luVHlwZSgpID8gJ2ZhLXNvcnQtYXNjJyA6ICdmYS1zb3J0LWRlc2MnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luIFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBqb2luVGFibGUsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zb3J0QnlKb2luVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5qb2luVGFibGUoKSA/ICdmYS1zb3J0LWFzYycgOiAnZmEtc29ydC1kZXNjJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBqb2luRmllbGQsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zb3J0QnlKb2luRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5qb2luRmllbGQoKSA/ICdmYS1zb3J0LWFzYycgOiAnZmEtc29ydC1kZXNjJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmV3IEpvaW4gUm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYmctaW5mbyBiZy1vcGFjaXR5LTI1IHAtMlwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dOZXdKb2luUm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogVGFibGVzLmF2YWlsYWJsZVRhYmxlcywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBOZXdKb2luKCkuSm9pblRhYmxlLCBvcHRpb25zQ2FwdGlvbjogJ1BpY2sgYSB0YWJsZS4uLidcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiIGRhdGEtYmluZD1cIndpdGg6IE5ld0pvaW4oKS5Kb2luVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZUNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCBvcHRpb25zQ2FwdGlvbjogJ1BpY2sgYSBmaWVsZC4uLicsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogJHJvb3QuTmV3Sm9pbigpLkZpZWxkTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcm9vdC5Kb2luVHlwZXMsIHZhbHVlOiBOZXdKb2luKCkuSm9pblR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogTmV3Sm9pbigpLk90aGVyVGFibGVzLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgdmFsdWU6IE5ld0pvaW4oKS5PdGhlclRhYmxlLCBvcHRpb25zQ2FwdGlvbjogJ1BpY2sgYSB0YWJsZS4uLidcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiIGRhdGEtYmluZD1cIndpdGg6IE5ld0pvaW4oKS5PdGhlclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVDb2x1bW5zLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiAkcm9vdC5OZXdKb2luKCkuSm9pbkZpZWxkTmFtZSwgb3B0aW9uc0NhcHRpb246ICdQaWNrIGEgZmllbGQuLi4nXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IENvbmZpcm1BZGRKb2luXCI+KyBBZGQgSm9pbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBFeGlzdGluZyBKb2luIFJvd3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBwYWdlZEpvaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci1ib3R0b20gcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuVGFibGVzLmF2YWlsYWJsZVRhYmxlcywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBKb2luVGFibGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgZGF0YS1iaW5kPVwid2l0aDogSm9pblRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogYXZhaWxhYmxlQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogJHBhcmVudC5GaWVsZE5hbWVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuSm9pblR5cGVzLCB2YWx1ZTogSm9pblR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogT3RoZXJUYWJsZXMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCB2YWx1ZTogT3RoZXJUYWJsZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBPdGhlclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogYXZhaWxhYmxlQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogJHBhcmVudC5Kb2luRmllbGROYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXdhcm5pbmcgdGV4dC1kYXJrIG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZpc2libGU6IGlzTmV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTmV3IHJlY29yZCBhZGRlZCBvciBpbXBvcnRlZCwgbm90IHNhdmVkIHlldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXdhcm5pbmdcIj48L2k+IE5ld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBEZWxldGVKb2luXCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGNvbC1tZC0xMlwiIGRhdGEtYmluZD1cIndpdGg6IGpvaW5zUGFnZXJcIj4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMCBwdC0wXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweFwiIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwcm9jZWR1cmVcIiBjbGFzcz1cInRhYi1wYW5lXCI+XHJcbiAgICAgICAgICAgIDxiPlN0b3JlZCBQcm9jZWR1cmVzPC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBhbmQgbWFuYWdlIFN0b3JlZCBQcm9jZWR1cmVzIHRvIHVzZSBpbiBEb3RuZXQgUmVwb3J0IGZvciBtb3JlIGNvbXBsZXggYW5kIGNvZGVkIFJlcG9ydHNcclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNwcm9jZWR1cmUtbW9kYWxcIj48c3BhbiBjbGFzcz1cImZhIGZhLXBsdXNcIj48L3NwYW4+IEFkZCBTdG9yZWQgUHJvY3MgZnJvbSBkYXRhYmFzZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiN1cGxvYWRTdG9yZWRQcm9jZWR1cmVzRmlsZU1vZGFsXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvc3Bhbj4gSW1wb3J0IFN0b3JlZCBQcm9jZWR1cmVzXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogUHJvY2VkdXJlcy5zYXZlZFByb2NlZHVyZXMoKS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICBObyBTdG9yZWQgUHJvY2VkdXJlcyBoYXZlIGJlZW4gc2V0dXAgeWV0LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIGRhdGEtYmluZD1cImlmOiBQcm9jZWR1cmVzLnNhdmVkUHJvY2VkdXJlcygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBQYW5lbCBmb3IgU3RvcmVkIFByb2NlZHVyZSBOYW1lcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTQgY29sLWxnLTMgYm9yZGVyLWVuZFwiIHN0eWxlPVwiaGVpZ2h0OiAxMDB2aDsgb3ZlcmZsb3cteTogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudSBnLTNcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBQcm9jZWR1cmVzLnNhdmVkUHJvY2VkdXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jYXRlZ29yeSBjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgY2xlYXJmaXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZSwgY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5hY3RpdmVQcm9jZWR1cmUoJGRhdGEpOyB9XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5zYXZlUHJvY2VkdXJlKCRkYXRhLlRhYmxlTmFtZSwgZmFsc2UpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXNhdmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiRGVsZXRlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkZGF0YS5kZWxldGVUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENsaWNrIHRvIGFjdGl2YXRlIHByb2NlZHVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7ICRyb290LmFjdGl2ZVByb2NlZHVyZSgkZGF0YSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBQYW5lbCBmb3IgU3RvcmVkIFByb2NlZHVyZSBEZXRhaWxzIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtOCBjb2wtbGctOVwiIGlkPVwicHJvY0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IGFjdGl2ZVByb2NlZHVyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgZGF0YS1iaW5kPVwidGV4dDogVGFibGVOYW1lXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSB0aGlzIFByb2NlZHVyZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgJHJvb3Quc2F2ZVByb2NlZHVyZSgkZGF0YS5UYWJsZU5hbWUsIGZhbHNlKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXNhdmVcIj48L3NwYW4+IFNhdmUgQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJEZWxldGUgdGhpcyBQcm9jZWR1cmVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7ICRkYXRhLmRlbGV0ZVRhYmxlKCRyb290LmtleXMuQWNjb3VudEFwaUtleSwgJHJvb3Qua2V5cy5EYXRhYmFzZUFwaUtleSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvc3Bhbj4gRGVsZXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0aXRsZT1cIk1hbmFnZSBSb2xlIEFjY2Vzc1wiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNyb2xlLWFjY2Vzcy1tb2RhbFwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zZWxlY3RBbGxvd2VkUm9sZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJFeHBvcnQgdGhpcyBQcm9jZWR1cmVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7ICRyb290LmV4cG9ydFByb2NlZHVyZUpzb24oJGRhdGEuVGFibGVOYW1lKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+RGlzcGxheSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtc21cIj5TY2hlbWEgTmFtZTwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBTY2hlbWFOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPkNvbHVtbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lLCBhdHRyOiB7IHRpdGxlOiAnREIgZmllbGQgaXMgJyArIENvbHVtbk5hbWUoKSB9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBGaWVsZFR5cGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1yaWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2x1bW4tbW9kYWxcIiB0aXRsZT1cIkFsbCBjb2x1bW4gb3B0aW9uc1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zZWxlY3RDb2x1bW4uYmluZCgkZGF0YSwgdHJ1ZSlcIj4uLi48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5QYXJhbWV0ZXJzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IFBhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZSwgYXR0cjogeyB0aXRsZTogJ0RCIGZpZWxkIGlzICcgKyBQYXJhbWV0ZXJOYW1lKCkgfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogUGFyYW1ldGVyRGF0YVR5cGVTdHJpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgcHVsbC1yaWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNwYXJhbWV0ZXItbW9kYWxcIiB0aXRsZT1cIkFsbCBQYXJhbWV0ZXIgb3B0aW9uc1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5lZGl0UGFyYW1ldGVyXCI+Li4uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBpZD1cIm1hbmFnZWFjY2Vzc1wiIGNsYXNzPVwidGFiLXBhbmVcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJhY2Nlc3NUYWJzXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBpZD1cInJlcG9ydHMtdGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIiBkYXRhLWJzLXRhcmdldD1cIiNyZXBvcnRzQWNjZXNzXCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJ0YWJcIj5SZXBvcnRzIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGlua1wiIGlkPVwiZm9sZGVycy10YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGRhdGEtYnMtdGFyZ2V0PVwiI2ZvbGRlcnNBY2Nlc3NcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInRhYlwiPkZvbGRlcnMgQWNjZXNzPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGUgc2hvdyBhY3RpdmVcIiBpZD1cInJlcG9ydHNBY2Nlc3NcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJyZXBvcnRzLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiPlJlcG9ydHMgQWNjZXNzPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gc2V0dXAgYWNjZXNzIHRvIGluZGl2aWR1YWwgUmVwb3J0cyBoZXJlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGV4cG9ydEZvbGRlcnNSZXBvcnRKc29uKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L3NwYW4+IEV4cG9ydCBTZWxlY3RlZCBSZXBvcnRzIEFjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiN1cGxvYWRGaWxlTW9kYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvc3Bhbj4gSW1wb3J0IFJlcG9ydHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI3NlYXJjaE1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10YXNrc1wiPjwvc3Bhbj4gQnVsayBBY3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiByZXBvcnRzQW5kRm9sZGVyc1wiIGNsYXNzPVwibGlzdC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjaGVja2VkOiBhbGxSZXBvcnRzU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHtocmVmOiAnI2ZvbGRlci0nICsgZm9sZGVySWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyXCI+PC9pPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZvbGRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZm9sZGVyLScgKyBmb2xkZXJJZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogcmVwb3J0cy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBSZXBvcnRzIGZvdW5kIGluIHRoaXMgZm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IHJlcG9ydHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGJvcmRlci1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBpc1NlbGVjdGVkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogeydmYS1maWxlJzogcmVwb3J0VHlwZT09J0xpc3QnLCAnZmEtdGgtbGlzdCc6IHJlcG9ydFR5cGU9PSdTdW1tYXJ5JywgJ2ZhLWJhci1jaGFydCc6IHJlcG9ydFR5cGU9PSdCYXInLCAnZmEtcGllLWNoYXJ0JzogcmVwb3J0VHlwZT09J1BpZScsICAnZmEtbGluZS1jaGFydCc6IHJlcG9ydFR5cGU9PSdMaW5lJywgJ2ZhLWdsb2JlJzogcmVwb3J0VHlwZSA9PSdNYXAnfVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB0OyBjb2xvcjogIzgwODA4MFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiByZXBvcnROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtLXRleHQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiByZXBvcnREZXNjcmlwdGlvblwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkN1cnJlbnQgUmVwb3J0IEFjY2VzczwvYj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VySWQoKSA/IHVzZXJJZCgpIDogJ0FueSBVc2VyJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgb25seSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiAodmlld09ubHlVc2VySWQoKSA/IHZpZXdPbmx5VXNlcklkKCkgOiAodXNlcklkKCkgPyB1c2VySWQoKSA6ICdBbnkgVXNlcicpKVwiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGRlbGV0ZU9ubHlVc2VySWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZSBvbmx5IGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IGRlbGV0ZU9ubHlVc2VySWQoKVwiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogdXNlclJvbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZSBieSBSb2xlIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VyUm9sZSgpID8gdXNlclJvbGUoKSA6ICdBbnkgUm9sZSdcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHZpZXdPbmx5VXNlclJvbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgb25seSBieSBSb2xlIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB2aWV3T25seVVzZXJSb2xlKCkgPyB2aWV3T25seVVzZXJSb2xlKCkgOiAnQW55IFJvbGUnXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBkZWxldGVPbmx5VXNlclJvbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZSBvbmx5IGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IGRlbGV0ZU9ubHlVc2VyUm9sZSgpID8gZGVsZXRlT25seVVzZXJSb2xlKCkgOiAnU2FtZSBhcyBNYW5hZ2UnXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBDbGllbnQgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IGNsaWVudElkKCkgPyBjbGllbnRJZCgpIDogJ0FsbCBDbGllbnRzJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VBY2Nlc3MoIWNoYW5nZUFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnLCBoaWRkZW46IGNoYW5nZUFjY2Vzc1wiPkNoYW5nZSBBY2Nlc3M8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBjaGFuZ2VBY2Nlc3NcIiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdC5tYW5hZ2VBY2Nlc3MgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlQWNjZXNzQ2hhbmdlc1wiPlNhdmUgQWNjZXNzIENoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VBY2Nlc3MoIWNoYW5nZUFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItcGFuZSBmYWRlXCIgaWQ9XCJmb2xkZXJzQWNjZXNzXCIgcm9sZT1cInRhYnBhbmVsXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZm9sZGVycy10YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Yj5Gb2xkZXJzIEFjY2VzczwvYj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHNldHVwIGFjY2VzcyB0byBpbmRpdmlkdWFsIEZvbGRlcnMgaGVyZTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IEZvbGRlcnNcIiBjbGFzcz1cImxpc3QtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aHJlZjogJyNmb2xkZXJBY2Nlc3MtJyArIElkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyXCI+PC9pPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IEZvbGRlck5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZm9sZGVyQWNjZXNzLScgKyBJZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgYm9yZGVyLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5DdXJyZW50IEZvbGRlciBBY2Nlc3M8L2I+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IFVzZXJJZCgpPyBVc2VySWQoKSA6ICdBbnkgVXNlcidcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBvbmx5IGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IChWaWV3T25seVVzZXJJZCgpID8gVmlld09ubHlVc2VySWQoKSA6IChVc2VySWQoKSA/IFVzZXJJZCgpIDogJ0FueSBVc2VyJykpXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IERlbGV0ZU9ubHlVc2VySWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUgb25seSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBEZWxldGVPbmx5VXNlcklkKClcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogVXNlclJvbGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IFVzZXJSb2xlcygpID8gVXNlclJvbGVzKCkgOiAnQW55IFJvbGUnXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IFZpZXdPbmx5VXNlclJvbGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBvbmx5IGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IFZpZXdPbmx5VXNlclJvbGVzKCkgPyBWaWV3T25seVVzZXJSb2xlcygpIDogJ0FueSBSb2xlJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBEZWxldGVPbmx5VXNlclJvbGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIG9ubHkgYnkgUm9sZSA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogRGVsZXRlT25seVVzZXJSb2xlcygpID8gRGVsZXRlT25seVVzZXJSb2xlcygpIDogJ1NhbWUgYXMgTWFuYWdlJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQ2xpZW50IDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBDbGllbnRJZCgpID8gQ2xpZW50SWQoKSA6ICdBbGwgQ2xpZW50cydcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGNoYW5nZUZvbGRlckFjY2VzcyghY2hhbmdlRm9sZGVyQWNjZXNzKCkpfSwgdGV4dDogIWNoYW5nZUZvbGRlckFjY2VzcygpID8gJ0NoYW5nZSBBY2Nlc3MnOiAnQ2FuY2VsIENoYW5naW5nIEFjY2VzcycsIGhpZGRlbjogY2hhbmdlRm9sZGVyQWNjZXNzXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogY2hhbmdlRm9sZGVyQWNjZXNzXCIgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdC5tYW5hZ2VBY2Nlc3MgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVGb2xkZXJBY2Nlc3NDaGFuZ2VzXCI+U2F2ZSBBY2Nlc3MgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VGb2xkZXJBY2Nlc3MoIWNoYW5nZUZvbGRlckFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VGb2xkZXJBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwiZnVuY3Rpb25zXCIgZGF0YS1iaW5kPVwid2l0aDogRnVuY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxiPkN1c3RvbSBGdW5jdGlvbnM8L2I+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgQ3JlYXRlIGFuZCBtYW5hZ2UgQ3VzdG9tIEZ1bmN0aW9uIHRoYXQgeW91IGNhbiB1c2UgaW4gYnVpbGRpbmcgUmVwb3J0cyBhbmQgRGFzaGJvYXJkc1xyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGNyZWF0ZU5ld0Z1bmN0aW9uXCI+QWRkIG5ldyBGdW5jdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgPGhyIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGJvcmRlci1lbmRcIiBzdHlsZT1cImhlaWdodDogMTAwdmg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNlYXJjaElucHV0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMlwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogc2VhcmNoLCB2YWx1ZVVwZGF0ZTogJ2lucHV0JywgdmlzaWJsZTogZnVuY3Rpb25zKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogZmlsdGVyZWRGdW5jdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogbmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnNlbGVjdEZ1bmN0aW9uXCI+RWRpdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcGFyZW50LmRlbGV0ZUZ1bmN0aW9uKCRkYXRhKSB9XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBmdW5jdGlvbnMoKS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gRnVuY3Rpb25zIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiIGRhdGEtYmluZD1cIndpdGg6IHNlbGVjdGVkRnVuY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlNldHVwIEZ1bmN0aW9uPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJ2YWxpZGF0aW9uRWxlbWVudDogZnVuY3Rpb25OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZnVuY3Rpb25OYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVuY3Rpb24gTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJmdW5jdGlvbk5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBuYW1lLCB2YWx1ZVVwZGF0ZTogJ2lucHV0J1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPkZ1bmN0aW9uIE5hbWUgaXMgcmVxdWlyZWQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZ1bmN0aW9uVHlwZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZ1bmN0aW9uIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cImZ1bmN0aW9uVHlwZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZ1bmN0aW9uVHlwZSwgZXZlbnQ6IHsgY2hhbmdlOiAkcGFyZW50LnVwZGF0ZUNvZGVFZGl0b3JNb2RlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3NoYXJwXCI+QyM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPG9wdGlvbiB2YWx1ZT1cImphdmFzY3JpcHRcIj5KYXZhU2NyaXB0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNxbFwiPlNRTDwvb3B0aW9uPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZ1bmN0aW9uRGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmdW5jdGlvbkRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGVzY3JpcHRpb24sIHZhbHVlVXBkYXRlOiAnaW5wdXQnXCIgcGxhY2Vob2xkZXI9XCJBZGQgYW55IGhlbHBmdWwgZGVzY3JpcHRpb24gaGVyZSBmb3IgdGhlIHVzZXIuLi5cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5Bcmd1bWVudHM8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRpc3BsYXkgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRhdGEgVHlwZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UmVxdWlyZWQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogcGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IHBhcmFtZXRlck5hbWUsIHZhbHVlVXBkYXRlOiAnaW5wdXQnXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogbmFtZS5oYXNFcnJvciwgdGV4dDogbmFtZS52YWxpZGF0aW9uTWVzc2FnZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGRpc3BsYXlOYW1lLCB2YWx1ZVVwZGF0ZTogJ2lucHV0J1wiIC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGVzY3JpcHRpb24sIHZhbHVlVXBkYXRlOiAnaW5wdXQnXCIgcGxhY2Vob2xkZXI9XCJGcmllbmRseSBkZXNjcmlwdGlvbiBmb3IgdXNlci4uLlwiIC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGF0YXR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5vYmplY3Q8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5zdHJpbmc8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5pbnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5mbG9hdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPmJvb2w8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHJlcXVpcmVkXCIgLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXJcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5yZW1vdmVQYXJhbWV0ZXJcIj5SZW1vdmU8L2J1dHRvbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkUGFyYW1ldGVyXCI+QWRkIEFyZ3VtZW50PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb2RlRWRpdG9yXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+V3JpdGUgdGhlIDxiPkNvZGU8L2I+IGZvciB0aGUgZnVuY3Rpb24gYmVsb3c6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImNvZGVFZGl0b3JcIiBjbGFzcz1cImNvZGUtZWRpdG9yIGZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBjb2RlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnNhdmVGdW5jdGlvblwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuY2FuY2VsRWRpdFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cInNjaGVkdWxlc1wiPlxyXG4gICAgICAgICAgICA8Yj5TY2hlZHVsZWQgUmVwb3J0czwvYj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICBWaWV3IFNjaGVkdWxlcyBzZXR1cCBmb3Igc2VuZGluZyBSZXBvcnRzIGFuZCBEYXNoYm9hcmRzXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGhyIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzY2hlZHVsZXMoKS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGVcIj48L2k+IE5vIHNjaGVkdWxlZCBSZXBvcnRzIG9yIERhc2hib2FyZHMgYXZhaWxhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBkYXRhLWJpbmQ9XCJpZjogc2NoZWR1bGVzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHNjaGVkdWxlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBib3JkZXItYm90dG9tIHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBEYXNoYm9hcmRJZCA9PT0gMCA/ICdSZXBvcnQnIDogJ0Rhc2hib2FyZCdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6IE5hbWVcIj48L3NwYW4+PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbm5lciBzY2hlZHVsZSBpdGVtcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZnctYm9sZCBiZy1saWdodCBweS0yIGQtbm9uZSBkLW1kLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG9jay1vXCI+PC9pPiBTY2hlZHVsZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlXCI+PC9pPiBFbWFpbCBUbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWZpbGVcIj48L2k+IEZvcm1hdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWhpc3RvcnlcIj48L2k+IExhc3QgUnVuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPjxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT4gVXNlciBJRDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWdsb2JlXCI+PC9pPiBUaW1lIFpvbmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCI+PGkgY2xhc3M9XCJmYSBmYS1jb2dzXCI+PC9pPiBBY3Rpb25zPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHsgZGF0YTogU2NoZWR1bGVzLCBhczogJ2l0ZW0nIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGJvcmRlci1ib3R0b20gcHktMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiIGRhdGEtYmluZD1cInRleHQ6IGl0ZW0uU2NoZWR1bGVEaXNwbGF5XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBpdGVtLkVtYWlsVG9cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiaWY6IGl0ZW0uRm9ybWF0ICYmIGl0ZW0uRm9ybWF0LnRyaW0oKS5zdWJzdHJpbmcoMCwxKSA9PT0gJ3snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImh0bWw6IGl0ZW0uRm9ybWF0LnNsaWNlKDEsLTEpLnNwbGl0KCcsJykuam9pbignPGJyPicpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJpZjogIWl0ZW0uRm9ybWF0IHx8IGl0ZW0uRm9ybWF0LnRyaW0oKS5zdWJzdHJpbmcoMCwxKSAhPT0gJ3snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IGl0ZW0uRm9ybWF0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCIgZGF0YS1iaW5kPVwidGV4dDogaXRlbS5MYXN0UnVuXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBpdGVtLlVzZXJJZCA/IGl0ZW0uVXNlcklkIDogJ04vQSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiIGRhdGEtYmluZD1cInRleHQ6IGl0ZW0uVGltZXpvbmUgPyBpdGVtLlRpbWV6b25lIDogJ04vQSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5kZWxldGVTY2hlZHVsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+IERlbGV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJjb2x1bW4tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdENvbHVtbigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJteU1vZGFsTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogQ29sdW1uTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwPkNob29zZSBvcHRpb25zIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHVzZXJzIGludGVyYWN0IHdpdGggdGhpcyBjb2x1bW4gb24gUmVwb3J0czwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCIgcm9sZT1cInRhYmxpc3RcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2NvbHVtbi1tYWluXCIgYXJpYS1jb250cm9scz1cImhvbWVcIiByb2xlPVwidGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIj5NYWluIE9wdGlvbnM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29sdW1uLWZvcmVpZ25cIiBhcmlhLWNvbnRyb2xzPVwicHJvZmlsZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPkZvcmVpZ24gS2V5IE9wdGlvbnM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29sdW1uLWZpbHRlclwiIGFyaWEtY29udHJvbHM9XCJwcm9jZWR1cmVcIiByb2xlPVwidGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIj5GaWx0ZXIgT3B0aW9uczwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmUgYWN0aXZlXCIgaWQ9XCJjb2x1bW4tbWFpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkRpc3BsYXlfTmFtZVwiIGRhdGEtYmluZD1cImF0dHI6e3BsYWNlaG9sZGVyOidFeCBGaXJzdCBOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEZpcnN0IE5hbWVcIj5EaXNwbGF5IE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWJveCBzaW5nbGUtbGluZVwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIERpc3BsYXlOYW1lIGZpZWxkIGlzIHJlcXVpcmVkLlwiIGlkPVwiRGlzcGxheU5hbWVcIiBuYW1lPVwiRGlzcGxheU5hbWVcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiRmlyc3QgTmFtZVwiIGRhdGEtYmluZD1cInZhbHVlOiBEaXNwbGF5TmFtZSwgYXR0cjp7cGxhY2Vob2xkZXI6J0V4IEZpcnN0IE5hbWUnfVwiIHBsYWNlaG9sZGVyPVwiRXggRmlyc3QgTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyBhIGZyaWVuZGx5IG5hbWUgdG8gZGlzcGxheSB0byB5b3VyIHVzZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkZpZWxkX1R5cGVcIiBkYXRhLWJpbmQ9XCJcIj5GaWVsZCBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cIkZpZWxkVHlwZV9TZWxlY3RlZElkXCIgbmFtZT1cIkZpZWxkVHlwZS5TZWxlY3RlZElkXCIgZGF0YS1iaW5kPVwidmFsdWU6IEZpZWxkVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJCb29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJEYXRlVGltZVwiPkRhdGUgVGltZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJWYXJjaGFyXCI+VmFyY2hhcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJNb25leVwiPk1vbmV5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkludFwiPkludDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJEb3VibGVcIj5Eb3VibGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSnNvblwiPkpzb248L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGF0ZVwiPkRhdGUgT25seTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJUaW1lXCI+VGltZSBPbmx5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBlcmNlbnRhZ2VcIj5QZXJjZW50YWdlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZpZWxkVHlwZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIlByaW1hcnlfS2V5XCIgZGF0YS1iaW5kPVwiXCI+UHJpbWFyeSBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgUHJpbWFyeUtleSBmaWVsZCBpcyByZXF1aXJlZC5cIiBpZD1cIlByaW1hcnlLZXlcIiBuYW1lPVwiUHJpbWFyeUtleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6UHJpbWFyeUtleVwiPjxpbnB1dCBuYW1lPVwiUHJpbWFyeUtleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLXZhbGlkYXRpb24tdmFsaWQgaGVscC1pbmxpbmUgaW5kZW50XCIgZGF0YS12YWxtc2ctZm9yPVwiUHJpbWFyeUtleVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cIlwiPkRvIE5vdCBEaXNwbGF5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6RG9Ob3REaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiSWYgdGhpcyBpcyBjaGVja2VkLCB0aGUgY29sdW1uIHdpbGwgbm90IGJlIGRpc3BsYXllZCBvbiBSZXBvcnQgRGVzaWduZXIsIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCBvbiBHbG9iYWwgRGF0YSBGaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6IEZpZWxkVHlwZSgpID09ICdKc29uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+SlNPTiBEYXRhIFN0cnVjdHVyZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94IHNpbmdsZS1saW5lXCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgRGlzcGxheU5hbWUgZmllbGQgaXMgcmVxdWlyZWQuXCIgZGF0YS1iaW5kPVwidmFsdWU6IEpzb25TdHJ1Y3R1cmUsIGF0dHI6e3BsYWNlaG9sZGVyOidQbGVhc2UgcGFzdGUgaW4gU2FtcGxlIEpzb24gd2l0aCBhbGwgY29sdW1ucyBmb3IgdGhpcyBKU09OIGRhdGEgZmllbGQnfVwiIHJvd3M9XCI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIllvdSBjYW4gcGFzdGUgaW4gYSBzYW1wbGUgSnNvbiBibG9iIHdpdGggYWxsIHRoZSBjb2x1bW5zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGlzIGZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIiBjbGFzcz1cInRhYi1wYW5lXCIgaWQ9XCJjb2x1bW4tZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb2wtc20tNCBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZSBGaWx0ZXIgaWYgQ29sdW1uIGlzIHNlbGVjdGVkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yY2VGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLXNtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJJZiB0aGlzIGlzIGNoZWNrZWQsIHRoZSBjb2x1bW4gd2lsbCBhbHdheXMgcmVxdWlyZSB0aGUgdXNlciB0byBwaWNrIGEgZmlsdGVyZWQgdmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb2wtc20tNCBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZSBGaWx0ZXIgaWYgVGFibGUgaXMgc2VsZWN0ZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDpGb3JjZUZpbHRlckZvclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiSWYgdGhpcyBpcyBjaGVja2VkLCB0aGUgcmVwb3J0IHdpbGwgYWx3YXlzIHJlcXVpcmUgdGhlIHVzZXIgdG8gcGljayBhIGZpbHRlciB2YWx1ZSBpZiB1c2VyIHBpY2tzIHRoZSBjb2x1bW4gaW4gcmVwb3J0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogRmllbGRUeXBlKCkgPT0gJ0RhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb2wtc20tNCBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVzdHJpY3QgRmlsdGVyIERhdGUgUmFuZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEgY29sLXNtLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHJlc3RyaWN0RGF0ZVJhbmdlRmlsdGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiIGRhdGEtYmluZD1cImlmOiByZXN0cmljdERhdGVSYW5nZUZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIGRhdGEtYmluZD1cInZhbHVlOiByZXN0cmljdERhdGVSYW5nZU51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIiBkYXRhLWJpbmQ9XCJpZjogcmVzdHJpY3REYXRlUmFuZ2VGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInZhbHVlOiByZXN0cmljdERhdGVSYW5nZVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRheXNcIj5EYXkocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTW9udGhzXCI+TW9udGgocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiWWVhcnNcIj5ZZWFyKHMpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgc2VsZWN0ZWQsIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBwaWNrIGRhdGUgcmFuZ2UgbGFyZ2VyIHRoYW4gdGhpcyBzZWxlY3Rpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cImNvbHVtbi1mb3JlaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+Rm9yZWlnbiBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgRm9yZWlnbktleSBmaWVsZCBpcyByZXF1aXJlZC5cIiBpZD1cIkZvcmVpZ25LZXlcIiBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbktleVwiPjxpbnB1dCBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiRm9yZWlnbiBrZXlzIGFsbG93cyBmcmllbmRseSBzZWxlY3Rpb24gaW4gRmlsdGVycyB1c2luZyBhIERyb3Bkb3duIExpc3RcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IHRibEVtcGxveWVlcyd9XCIgcGxhY2Vob2xkZXI9XCJFeCB0YmxFbXBsb3llZXNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwidmFsdWU6IEpvaW5UYWJsZSwgdmlzaWJsZTpGb3JlaWduS2V5KCksIG9wdGlvbnM6ICRyb290LlRhYmxlcy5hdmFpbGFibGVUYWJsZXMsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBKb2luPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cIkZvcmVpZ25Kb2luX1NlbGVjdGVkSWRcIiBuYW1lPVwiRm9yZWlnbkpvaW4uU2VsZWN0ZWRJZFwiIGRhdGEtYmluZD1cInZhbHVlOiBGb3JlaWduSm9pbiwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIiB2YWx1ZT1cIklubmVyXCI+SW5uZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTGVmdFwiPkxlZnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUmlnaHRcIj5SaWdodDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtdmFsaWRhdGlvbi12YWxpZCBoZWxwLWlubGluZSBpbmRlbnRcIiBkYXRhLXZhbG1zZy1mb3I9XCJGb3JlaWduSm9pblwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCBFbXBsb3llZUlkJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBLZXkgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGlkPVwiRm9yZWlnbktleUZpZWxkXCIgbmFtZT1cIkZvcmVpZ25LZXlGaWVsZFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnbktleUZpZWxkLCB2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGx9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZUlkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKVwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHRpdGxlPVwiRm9yZWlnbiBLZXkgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGljaCBpcyB1c2VkIGFzIHRoZSBLZXkgZmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZU5hbWVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBWYWx1ZSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJGb3JlaWduVmFsdWVGaWVsZFwiIG5hbWU9XCJGb3JlaWduVmFsdWVGaWVsZFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblZhbHVlRmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KClcIiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0aXRsZT1cIkZvcmVpZ24gVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogRm9yZWlnbktleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPk9ubHkgZm9yIEZpbHRlcj88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbkZpbHRlck9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkNoZWNrIHRoaXMgb3B0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGZvciBGaWx0ZXJpbmcgb25seSwgYW5kIG5vdCBmb3IgU1FMIEpvaW5zXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldHVwIGEgY2FzY2FkaW5nIGZpbHRlciBieSBzZXR0aW5nIHVwIGEgcGFyZW50IGZvciB0aGUgZm9yZWlnbiBrZXkgYmVsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5TZXR1cCBGb3JlaWduIEtleSBQYXJlbnQ/PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkZvcmVpZ25QYXJlbnRLZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkZvcmVpZ24ga2V5cyBwYXJlbnQgYWxsb3dzIGNhc2NhZGluZyBkcm9wZG93biBzZWxlY3Rpb24gaW4gRmlsdGVyc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggdGJsRW1wbG95ZWVzJ31cIiBwbGFjZWhvbGRlcj1cIkV4IHRibEVtcGxveWVlc1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5QYXJlbnQgVGFibGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwidmFsdWU6IEZvcmVpZ25Kb2luVGFibGUsIHZpc2libGU6Rm9yZWlnblBhcmVudEtleSgpLCBvcHRpb25zOiAkcm9vdC5UYWJsZXMubW9kZWwsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25Kb2luVGFibGVcIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVJZCd9XCI+UGFyZW50IEtleSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBGb3JlaWduSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduUGFyZW50S2V5RmllbGQsIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVJZFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiUGFyZW50IEtleSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBQYXJlbnQgdGFibGUgd2hpY2ggaXMgdXNlZCBhcyB0aGUga2V5IGluIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cImF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlTmFtZSd9XCI+UGFyZW50IFZhbHVlIEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEZvcmVpZ25Kb2luVGFibGUoKS5Db2x1bW5zLCBvcHRpb25zVGV4dDogJ0NvbHVtbk5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6IEZvcmVpZ25QYXJlbnRWYWx1ZUZpZWxkLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiUGFyZW50IFZhbHVlIGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIFBhcmVudCB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXIgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cImF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlTmFtZSd9XCI+Rm9yZWlnbiBLZXkgRmlsdGVyIEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblBhcmVudEFwcGx5VG8sIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJGb3JlaWduIEtleSBGaWx0ZXIgVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGVyZSB0aGUgc2VsZWN0ZWQgcGFyZW50IGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5SZXF1aXJlIEZvcmVpZ24gS2V5IFBhcmVudD88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnblBhcmVudFJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJGb3JlaWduIGtleXMgcGFyZW50IGNhbiBiZSBvcHRpb25hbCBvciBzZXQgdG8gcmVxdWlyZWQgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+TWFuYWdlIFJvbGUgQWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJqb2luTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+Sm9pbnMgRGlhZ3JhbTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwibWF4LWhlaWdodDo4MDBweDtvdmVyZmxvdzphdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImpvaW5EaWFncmFtXCIgc3R5bGU9XCJ3aWR0aDoyMDAwcHg7aGVpZ2h0OjEyMDBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNjY2M7XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicHJvY2VkdXJlLW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudCBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BZGQgU3RvcmVkIFByb2M8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaCBmb3JcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBzZWFyY2hQcm9jZWR1cmVUZXJtXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmVkIHByb2NlZHVyZXMgYnkgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2VhcmNoU3RvcmVkUHJvY2VkdXJlXCI+U2VhcmNoPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgZy0zXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmb3VuZFByb2NlZHVyZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jYXRlZ29yeSBjYXJkXCIgc3R5bGU9XCJmbG9hdDpsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjbGVhcmZpeFwiIHN0eWxlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBUYWJsZU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwteHNcIj5Qcm9jZWR1cmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSB0aGlzIFByb2NlZHVyZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyRyb290LnNhdmVQcm9jZWR1cmUoJGRhdGEuVGFibGVOYW1lLCB0cnVlKTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtc2F2ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHsnZGF0YS1icy10YXJnZXQnOiAnI3NwXycrJGluZGV4KCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImF0dHI6IHtpZDogJ3NwXycrJGluZGV4KCl9XCIgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZSBpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgTmFtZTxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPkNvbHVtbnM8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IEZpZWxkVHlwZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5QYXJhbWV0ZXJzPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBQYXJhbWV0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBQYXJhbWV0ZXJEYXRhVHlwZVN0cmluZ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgVmFsdWU6IDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBQYXJhbWV0ZXJWYWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwYXJhbWV0ZXItbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdFBhcmFtZXRlcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJteU1vZGFsTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogUGFyYW1ldGVyTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwPkNob29zZSBvcHRpb25zIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHVzZXJzIGludGVyYWN0IHdpdGggdGhpcyBwYXJhbWV0ZXIgb24gUmVwb3J0czwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJhdHRyOntwbGFjZWhvbGRlcjonRXggRmlyc3QgTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBGaXJzdCBOYW1lXCI+RGlzcGxheSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWJveCBzaW5nbGUtbGluZVwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIERpc3BsYXlOYW1lIGZpZWxkIGlzIHJlcXVpcmVkLlwiIG5hbWU9XCJEaXNwbGF5TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJGaXJzdCBOYW1lXCIgZGF0YS1iaW5kPVwidmFsdWU6IERpc3BsYXlOYW1lLCBhdHRyOntwbGFjZWhvbGRlcjonRXggRmlyc3QgTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBGaXJzdCBOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJUaGlzIGlzIGEgZnJpZW5kbHkgbmFtZSB0byBkaXNwbGF5IHRvIHlvdXIgdXNlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+RGVmYXVsdCBWYWx1ZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogUGFyYW1ldGVyVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+SGlkZGVuIFBhcmFtZXRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogSGlkZGVuLCBlbmFibGU6IFBhcmFtZXRlclZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6UmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5Vc2UgTG9va3VwIFRhYmxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbktleVwiPjxpbnB1dCBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJVc2luZyBsb29rdXAgdGFibGUgYWxsb3dzIGZyaWVuZGx5IHNlbGVjdGlvbiBpbiByZXBvcnQgdXNpbmcgYSBEcm9wZG93biBMaXN0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCB0YmxFbXBsb3llZXMnfVwiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPkxvb2t1cCBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogSm9pblRhYmxlLCB2aXNpYmxlOkZvcmVpZ25LZXkoKSwgb3B0aW9uczogJHJvb3QuUHJvY2VkdXJlcy50YWJsZXMsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCBFbXBsb3llZUlkJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+TG9va3VwIEtleSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBuYW1lPVwiRm9yZWlnbktleUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduS2V5RmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpXCIgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdGl0bGU9XCJGb3JlaWduIEtleSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBGb3JlaWduIHRhYmxlIHdoaWNoIGlzIHVzZWQgYXMgdGhlIEtleSBmaWVsZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgVmFsdWUgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgbmFtZT1cIkZvcmVpZ25WYWx1ZUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduVmFsdWVGaWVsZCwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKVwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHRpdGxlPVwiTG9va3VwIFZhbHVlIGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIExvb2t1cCB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicm9sZS1hY2Nlc3MtbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBlZGl0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5NYW5hZ2UgQWNjZXNzIGJ5IFJvbGVzPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+Q2hvb3NlIFVzZXIgUm9sZXMgdGhhdCB3aWxsIGhhdmUgQWNjZXNzPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj5Ob3RlOiBBbGwgVXNlcnMgd2lsbCBoYXZlIGFjY2VzcyBpZiBubyByZXN0cmljdGVkIHJvbGVzIGFyZSBzZXR1cDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiAkcm9vdC5hbGxSb2xlcygpLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5ObyByb2xlcyBhdmFpbGFibGUuPC9zdHJvbmc+IFBsZWFzZSBhZGQgcm9sZXMgZmlyc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRyb290LmFsbFJvbGVzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6ICRyb290LmFsbFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgc3R5bGU9XCJwYWRkaW5nOiAycHggMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6ICRkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICRyb290LmVkaXRBbGxvd2VkUm9sZXMoKS5BbGxvd2VkUm9sZXNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAkZGF0YVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImNhdGVnb3J5LW1hbmFnZS1tb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IG1hbmFnZUNhdGVnb3JpZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+TWFuYWdlIENhdGVnb3JpZXMgZm9yIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj48L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzYmxlOiAkcm9vdC5DYXRlZ29yaWVzKCkubGVudGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBObyBjYXRlZ29yaWVzIGhhdmUgYmVlbiBzZXQgdXAgeWV0LlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogJHJvb3QuQ2F0ZWdvcmllc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggbGlzdC1ncm91cC1pdGVtXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMnB4OyBwYWRkaW5nLWJvdHRvbTogMnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiAkcGFyZW50LkNhdGVnb3JpZXMsIGNoZWNrZWRWYWx1ZTogJGRhdGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IE5hbWVcIj48L3NwYW4+IDwhLS0gRGlzcGxheSBjYXRlZ29yeSBuYW1lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImNhdGVnb3J5LW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+TWFuYWdlIENhdGVnb3JpZXM8L2I+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvcmdhbml6ZSB0aGUgZGlzcGxheSBvZiB0YWJsZXMgaW4gdGhlIFJlcG9ydCBEZXNpZ25lciBieSBhc3NpZ25pbmcgY2F0ZWdvcmllcyBoZXJlLlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBUYWJsZSBmb3IgQ2F0ZWdvcmllcyAtLT5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Q2F0ZWdvcnkgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6ICRyb290LkNhdGVnb3JpZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBOYW1lLCB2aXNpYmxlOiAkcm9vdC5lZGl0aW5nQ2F0ZWdvcnlJbmRleCgpID09PSAkaW5kZXgoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cImNhdC1uYW1lXCIgZGF0YS1iaW5kPVwidGV4dDogTmFtZSwgdmlzaWJsZTogJHJvb3QuZWRpdGluZ0NhdGVnb3J5SW5kZXgoKSAhPT0gJGluZGV4KCksIGF0dHI6IHsgaWQ6IElkID8gJ2NhdC1uYW1lLScgKyBJZCA6dW5kZWZpbmVkIH1cIiBzdHlsZT1cImNvbG9yOiAjNmM3NTdkO1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS1iaW5kPVwidmFsdWU6IERlc2NyaXB0aW9uLCB2aXNpYmxlOiAkcm9vdC5lZGl0aW5nQ2F0ZWdvcnlJbmRleCgpID09PSAkaW5kZXgoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cImNhdC1kZXNjXCIgZGF0YS1iaW5kPVwidGV4dDogRGVzY3JpcHRpb24sIHZpc2libGU6ICRyb290LmVkaXRpbmdDYXRlZ29yeUluZGV4KCkgIT09ICRpbmRleCgpLCBhdHRyOiB7IGlkOiBJZCA/ICdjYXQtZGVzYy0nICsgSWQgOnVuZGVmaW5lZCB9XCIgc3R5bGU9XCJjb2xvcjogIzZjNzU3ZDtcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcm9vdC5lZGl0aW5nQ2F0ZWdvcnlJbmRleCgpICE9PSAkaW5kZXgoKSAmJiBJZCAhPT0gMCwgY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC50b2dnbGVFZGl0KCRpbmRleCgpKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbVwiIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmVkaXRpbmdDYXRlZ29yeUluZGV4KCkgPT09ICRpbmRleCgpICYmIElkICE9PSAwLCBjbGljazogZnVuY3Rpb24oKSB7ICRyb290LnNhdmVDYXRlZ29yeSgkaW5kZXgoKSkgfVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zYXZlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QucmVtb3ZlQ2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dGZvb3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcm9vdC5uZXdDYXRlZ29yeU5hbWVcIiBwbGFjZWhvbGRlcj1cIkNhdGVnb3J5IE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHJvb3QubmV3Q2F0ZWdvcnlEZXNjcmlwdGlvblwiIHBsYWNlaG9sZGVyPVwiRGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QuYWRkQ2F0ZWdvcnlcIj5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Zm9vdD5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zYXZlQ2F0ZWdvcmllc1wiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkRvbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiYWRkLWNvbm5lY3Rpb24tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBuZXdEYXRhQ29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRyb290LmVkaXRpbmdEYXRhQ29ubmVjdGlvbigpID8gJ0VkaXQnIDogJ0FkZCBhIG5ldydcIj48L3NwYW4+IERhdGEgQ29ubmVjdGlvbjwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHA+Q2hvb3NlIFVzZXIgUm9sZXMgdGhhdCB3aWxsIGhhdmUgQWNjZXNzPC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiPk5vdGU6IEFsbCBVc2VycyB3aWxsIGhhdmUgYWNjZXNzIGlmIG5vIHJlc3RyaWN0ZWQgcm9sZXMgYXJlIHNldHVwPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5Db25uZWN0aW9uIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIkNvbm5lY3Rpb24gTmFtZSBpcyByZXF1aXJlZC5cIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBOYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiBpZD1cImFkZC1jb25uLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPkNvbm5lY3Rpb24gS2V5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJDb25uZWN0aW9uIEtleSBpcyByZXF1aXJlZC5cIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBDb25uZWN0aW9uS2V5XCIgcGxhY2Vob2xkZXI9XCJcIiBpZD1cImFkZC1jb25uLWtleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyB0aGUgQ29ubmVjdGlvbiBLZXkgaW4geW91ciBhcHBsaWNhdGlvbiBzZXR0aW5ncyBmb3IgeW91ciBTUUwgQ29ubmVjdGlvbiBTdHJpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmVkaXRpbmdEYXRhQ29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1ib3ggY29sLW1kLTkgY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFVzZVNjaGVtYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIFNjaGVtYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVXNlIFNjaGVtYSBpbiBTUUwgd2hlbiBidWlsZGluZyBxdWVyeVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwiaGlkZGVuOiAkcm9vdC5lZGl0aW5nRGF0YUNvbm5lY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stYm94IGNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogY29weVNjaGVtYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weSBTY2hlbWEgZnJvbSBleGlzdGluZyBDb25uZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGNvcHlTY2hlbWFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIENvbm5lY3Rpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBzdHlsZT1cIm1heC13aWR0aDogMzAwcHg7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuRGF0YUNvbm5lY3Rpb25zLCBvcHRpb25zVGV4dDogJ0RhdGFDb25uZWN0TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0RhdGFDb25uZWN0R3VpZCcsIHZhbHVlOiBjb3B5RnJvbVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnVwZGF0ZURhdGFDb25uZWN0aW9uLCB2aXNpYmxlOiAkcm9vdC5lZGl0aW5nRGF0YUNvbm5lY3Rpb24oKVwiPlVwZGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5hZGREYXRhQ29ubmVjdGlvbiwgdmlzaWJsZTogISRyb290LmVkaXRpbmdEYXRhQ29ubmVjdGlvbigpXCI+Q3JlYXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGF0YS1wcmV2aWV3LW1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IHByZXZpZXdEYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+UHJldmlldyBUYWJsZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBwdWxsLXJpZ2h0XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgbWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIHN0eWxlPVwicG9zaXRpb246IHN0aWNreTsgdG9wOiAtMXB4OyB6LWluZGV4OiAyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IENvbHVtbk5hbWUsIGF0dHI6IHsgdGl0bGU6IERhdGFUeXBlLnJlcGxhY2UoJ1N5c3RlbS4nLCAnJykgfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IFJvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBJdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiY3VzdG9tLXNxbC1tb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwibXlNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgZGF0YS1iaW5kPVwid2l0aDogY3VzdG9tU3FsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FbnRlciBTZWxlY3QgU1FMIGZvciB5b3VyIERhdGE8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgZGF0YS1iaW5kPVwidmFsaWRhdGlvbkVsZW1lbnQ6IGN1c3RvbVRhYmxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20tdGFibGUtbmFtZVwiPkN1c3RvbSBUYWJsZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJjdXN0b21UYWJsZU5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHRhYmxlIG5hbWVcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVRhYmxlTmFtZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+Q3VzdG9tIFRhYmxlIE5hbWUgaXMgcmVxdWlyZWQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogdXNlQWlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBpZD1cInF1ZXJ5LWlucHV0XCIgY2xhc3M9XCJxdWVyeS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTaG93IG1lJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1iaW5kPVwiY2xpY2s6IGJ1aWxkU3FsVXNpbmdBaVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlByb2Nlc3Mgd2l0aCBDaGF0R1BUPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWJpbmQ9XCJjbGljazogdGV4dFF1ZXJ5LnJlc2V0UXVlcnlcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiPlN0YXJ0IG92ZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgZGF0YS1iaW5kPVwidmFsaWRhdGlvbkVsZW1lbnQ6IGN1c3RvbVNxbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20tc3FsXCI+Q3VzdG9tIFNRTDwvbGFiZWw+IHxcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBkeW5hbWljQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT1cIlNldHVwIGEgdGFibGUgdGhhdCByZXR1cm5zIGR5bmFtaWMgY29sdW1ucyB0byBwaWNrIGZyb21cIj5UYWJsZSB3aXRoIER5bmFtaWMgQ29sdW1uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPiB8XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogYmVhdXRpZnlTcWxcIj5CZWF1dGlmeSBTcWw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJoZWlnaHQ6IDI0MHB4O1wiIG5hbWU9XCJjdXN0b21TcWxcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVNxbFwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5DdXN0b20gU1FMIGlzIHJlcXVpcmVkLjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBkeW5hbWljQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QWRkIFNRTCBjb2RlIHRvIHVzZSB0aGUgZHluYW1pYyBjb2x1bW48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cImhlaWdodDogMjQwcHg7XCIgbmFtZT1cImNvbHVtblRyYW5zbGF0aW9uXCIgZGF0YS1iaW5kPVwidGV4dElucHV0OiBjb2x1bW5UcmFuc2xhdGlvblwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QaWNrIFZhbHVlcyBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBpbnB1dC1tZWRpdW1cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcm9vdC5UYWJsZXMuYXZhaWxhYmxlVGFibGVzLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSBWYWx1ZXMgVGFibGUuLi4nLCB2YWx1ZTogZHluYW1pY1ZhbHVlc1RhYmxlSWRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBleGVjdXRlU3FsXCI+U2F2ZSBjaGFuZ2VzPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBJbXBvcnQgVGFibGVzL1ZpZXdzIEpzb24gRmlsZSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJ1cGxvYWRUYWJsZXNGaWxlTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwidXBsb2FkVGFibGVzRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZVRhYmxlc0pzb25GaWxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJ1cGxvYWRUYWJsZXNGaWxlTW9kYWxMYWJlbFwiPkltcG9ydCBUYWJsZXMvVmlld3MgKFByZXZpb3VzbHkgRXhwb3J0ZWQpPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZHJvcHpvbmVcIiBjbGFzcz1cImRyb3B6b25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiZXZlbnQ6IHtjbGljazogdHJpZ2dlclRhYmxlc0ZpbGVJbnB1dCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAzMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMDA3YmZmOyBjdXJzb3I6IHBvaW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgY2xpY2sgdG8gc2VsZWN0IEpzb24gZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cInRhYmxlc0ZpbGVJbnB1dEpzb25cIiBhY2NlcHQ9XCIuanNvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJldmVudDogeyBjaGFuZ2U6IGhhbmRsZVRhYmxlc0ZpbGVTZWxlY3QgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmaWxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdGVkIFRhYmxlcy9WaWV3cyBGaWxlOiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWxlTmFtZVwiPjwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiB1cGxvYWRUYWJsZXNGaWxlXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBJbXBvcnQgSm9pbnMgSnNvbiBGaWxlIE1vZGFsIC0tPlxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInVwbG9hZEpvaW5zRmlsZU1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cInVwbG9hZEpvaW5zRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZUpvaW5zSnNvbkZpbGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInVwbG9hZEpvaW5zRmlsZU1vZGFsTGFiZWxcIj5JbXBvcnQgSm9pbnMgKFByZXZpb3VzbHkgRXhwb3J0ZWQpPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZHJvcHpvbmVcIiBjbGFzcz1cImRyb3B6b25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiZXZlbnQ6IHtjbGljazogdHJpZ2dlckpvaW5zRmlsZUlucHV0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IGRhc2hlZCAjMDA3YmZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDMwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMwMDdiZmY7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICBjbGljayB0byBzZWxlY3QgSnNvbiBmaWxlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiam9pbnNGaWxlSW5wdXRKc29uXCIgYWNjZXB0PVwiLmpzb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwiZXZlbnQ6IHsgY2hhbmdlOiBoYW5kbGVKb2luc0ZpbGVTZWxlY3QgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmaWxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdGVkIEpvaW5zIEZpbGU6IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpbGVOYW1lXCI+PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHVwbG9hZEpvaW5zRmlsZVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLSBJbXBvcnQgU3RvcmVkUHJvY2VkdXJlcyBKc29uIEZpbGUgTW9kYWwgLS0+XHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwidXBsb2FkU3RvcmVkUHJvY2VkdXJlc0ZpbGVNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCJ1cGxvYWRTdG9yZWRQcm9jZWR1cmVzRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZVN0b3JlZFByb2NlZHVyZXNKc29uRmlsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwidXBsb2FkU3RvcmVkUHJvY2VkdXJlc0ZpbGVNb2RhbExhYmVsXCI+SW1wb3J0IFN0b3JlZCBQcm9jZWR1cmVzIChQcmV2aW91c2x5IEV4cG9ydGVkKTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImRyb3B6b25lXCIgY2xhc3M9XCJkcm9wem9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImV2ZW50OiB7Y2xpY2s6IHRyaWdnZXJTdG9yZWRQcm9jZWR1cmVzRmlsZUlucHV0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IGRhc2hlZCAjMDA3YmZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDMwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMwMDdiZmY7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICBjbGljayB0byBzZWxlY3QgSnNvbiBmaWxlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwic3RvcmVkUHJvY2VkdXJlc0ZpbGVJbnB1dEpzb25cIiBhY2NlcHQ9XCIuanNvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJldmVudDogeyBjaGFuZ2U6IGhhbmRsZVN0b3JlZFByb2NlZHVyZXNGaWxlU2VsZWN0IH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogZmlsZU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5TZWxlY3RlZCBTdG9yZWQgUHJvY2VkdXJlcyBGaWxlOiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWxlTmFtZVwiPjwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiB1cGxvYWRTdG9yZWRQcm9jZWR1cmVzRmlsZVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJzZWFyY2hNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWJpbmQ9XCJ3aXRoOiAkcm9vdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC14bCBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QnVsayBNYW5hZ2UgUmVwb3J0cyBBY2Nlc3MgYW5kIEV4cG9ydDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBtYi00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUmVwb3J0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZhbHVlOiBzZWFyY2hRdWVyeSwgdmFsdWVVcGRhdGU6ICdpbnB1dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsZXgtc2hyaW5rLTBcIiB0aXRsZT1cIlNlbGVjdCBhbGwgRmlsdGVyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IHNlbGVjdEFsbEZpbHRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgZmxleC1zaHJpbmstMFwiIHRpdGxlPVwiRGVzZWxlY3QgYWxsIEZpbHRlcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBkZXNlbGVjdEFsbEZpbHRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2VsZWN0IEFsbFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IGZpbHRlcmVkUmVwb3J0c0FuZEZvbGRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctNTAgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGFsbFJlcG9ydHNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmb2xkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIj5WaWV3PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIj5NYW5hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yNVwiPkRlbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTI1XCI+Q2xpZW50IElEPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVwb3J0cyBMaXN0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiByZXBvcnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy01MCBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGlzU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHJlcG9ydE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IHZpZXdPbmx5VXNlclJvbGUgPyB2aWV3T25seVVzZXJSb2xlOiAnQW55IFVzZXInXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VyUm9sZSA/IHVzZXJSb2xlIDogJ0FueSBVc2VyJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogZGVsZXRlT25seVVzZXJSb2xlID8gZGVsZXRlT25seVVzZXJSb2xlIDogJ0FueSBVc2VyJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogY2xpZW50SWQgPyBjbGllbnRJZCA6ICdBbnkgVXNlcidcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiB0ZXh0LW11dGVkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogcmVwb3J0cy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIG1hdGNoaW5nIHJlcG9ydHMgZm91bmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWJpbmQ9XCJjbGljazogZXhwb3J0Rm9sZGVyc1JlcG9ydEpzb25cIj5FeHBvcnQgU2VsZWN0ZWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Qub3BlbkFwcGx5U2VjdXJpdHlNb2RhbCwgZW5hYmxlOiAkcm9vdC5hbnlSZXBvcnRTZWxlY3RlZFwiPkFwcGx5IFNlY3VyaXR5IHRvIEFsbCBTZWxlY3RlZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5kZWxldGVTZWxlY3RlZEl0ZW1zLCBlbmFibGU6ICRyb290LmFueVJlcG9ydFNlbGVjdGVkXCI+RGVsZXRlIEFsbCBTZWxlY3RlZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJhcHBseVNlY3VyaXR5TW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmFueVJlcG9ydFNlbGVjdGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BcHBseSBTZWN1cml0eSB0byBBbGwgU2VsZWN0ZWQ8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHsgbmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdC5tYW5hZ2VBY2Nlc3MgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5hcHBseVNlY3VyaXR5VG9BbGxcIj5BcHBseSB0byBBbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gSW1wb3J0IEpzb24gRmlsZSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJ1cGxvYWRGaWxlTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwidXBsb2FkRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZUpzb25GaWxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJ1cGxvYWRGaWxlTW9kYWxMYWJlbFwiPkltcG9ydCBwcmV2aW91c2x5IEV4cG9ydGVkIFJlcG9ydHM8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+SW5zdHJ1Y3Rpb25zOjwvc3Ryb25nPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIOKAoiBTZWxlY3QgYSA8Y29kZT4uanNvbjwvY29kZT4gZmlsZSBwcmV2aW91c2x5IGV4cG9ydGVkIGZyb20gRG90bmV0IFJlcG9ydC48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICDigKIgVGhlIGZpbGUgbWF5IGluY2x1ZGUgbXVsdGlwbGUgcmVwb3J0cyBhbmQgdGhlaXIgZm9sZGVycy48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICDigKIgQW55IG1pc3NpbmcgZm9sZGVycyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICDigKIgSWYgYSByZXBvcnQgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB0bzpcclxuICAgICAgICAgICAgICAgICAgICA8ZW0+U2tpcDwvZW0+LCA8ZW0+T3ZlcndyaXRlPC9lbT4sIG9yIDxlbT5NYWtlIGEgQ29weTwvZW0+LjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIOKAoiBPbmNlIHVwbG9hZGVkLCBhbGwgaW1wb3J0ZWQgcmVwb3J0cyB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJkcm9wem9uZVwiIGNsYXNzPVwiZHJvcHpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJldmVudDoge2NsaWNrOiB0cmlnZ2VyRmlsZUlucHV0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IGRhc2hlZCAjMDA3YmZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDMwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMwMDdiZmY7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICBDbGljayBoZXJlIHRvIHNlbGVjdCBhIEpTT04gZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJmaWxlSW5wdXRKc29uXCIgYWNjZXB0PVwiLmpzb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJldmVudDogeyBjaGFuZ2U6IGhhbmRsZUZpbGVTZWxlY3QgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmlsZU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlNlbGVjdGVkIEZpbGU6PC9zdHJvbmc+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpbGVOYW1lXCI+PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiB1cGxvYWRGaWxlXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxkaXYgW2lubmVySHRtbF09XCJyZXBvcnRUZW1wbGF0ZXNcIj48L2Rpdj5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+Il19
3192
+ }] }, { type: i2.HttpClient }, { type: i3.ActivatedRoute }] });
3193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG90bmV0c2V0dXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG90bmV0cmVwb3J0LW5nL3NyYy9saWIvZG90bmV0c2V0dXAvZG90bmV0c2V0dXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG90bmV0cmVwb3J0LW5nL3NyYy9saWIvZG90bmV0c2V0dXAvZG90bmV0c2V0dXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUErQixNQUFNLGVBQWUsQ0FBQztBQUVsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7OztBQWEvQyxNQUFNLE9BQU8sb0JBQW9CO0lBTXJCO0lBQ0E7SUFDd0I7SUFDeEI7SUFDQTtJQVRGLGNBQWMsQ0FBUztJQUN4QixlQUFlLENBQVc7SUFDekIsV0FBVyxHQUE0QixFQUFFLENBQUM7SUFFbEQsWUFBWSxRQUFrQixFQUNwQixTQUF1QixFQUN2QixLQUF3QixFQUNBLE9BQWUsRUFDdkMsSUFBZ0IsRUFDaEIsS0FBcUI7UUFKckIsY0FBUyxHQUFULFNBQVMsQ0FBYztRQUN2QixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUNBLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDdkMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUUzQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsOEJBQThCO1FBQzNFLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFHSCxRQUFRO1FBQ04sSUFBSSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLGtDQUFrQyxDQUFDO1FBQ2xGLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ25ELElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLENBQUM7UUFFdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLEdBQUcsa0JBQWtCLEdBQUcsY0FBYyxHQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNwSCxJQUFJLE9BQU8sR0FBRztnQkFDVixLQUFLLEVBQUUsS0FBSztnQkFDWixZQUFZLEVBQUUsMEJBQTBCO2dCQUN4QyxjQUFjLEVBQUUsd0JBQXdCO2dCQUN4QyxlQUFlLEVBQUUseUJBQXlCO2dCQUMxQyxxQkFBcUIsRUFBRSwrQkFBK0I7Z0JBQ3RELHVCQUF1QixFQUFFLGlDQUFpQztnQkFDMUQsZ0JBQWdCLEVBQUUsOEJBQThCO2dCQUNoRCxvQkFBb0IsRUFBRSw4QkFBOEI7Z0JBQ3BELFdBQVcsRUFBRSw4QkFBOEI7Z0JBQzNDLGFBQWEsRUFBRSw0QkFBNEI7Z0JBQzNDLGlCQUFpQixFQUFFLG1DQUFtQztnQkFDdEQsbUJBQW1CLEVBQUUsaUNBQWlDO2dCQUN0RCxlQUFlLEVBQUUsNkNBQTZDO2dCQUM5RCxpQkFBaUIsRUFBRSwyQkFBMkI7Z0JBQzlDLGlCQUFpQixFQUFFLCtCQUErQjtnQkFDbEQsZ0JBQWdCLEVBQUUsMEJBQTBCO2dCQUM1QyxnQkFBZ0IsRUFBRSwrQkFBK0I7Z0JBQ2pELGlCQUFpQixFQUFFLGtDQUFrQztnQkFDckQsYUFBYSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsZ0NBQWdDO2dCQUN0RSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLG1DQUFtQztnQkFDM0UsYUFBYSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsa0NBQWtDO2dCQUN4RSxnQkFBZ0IsRUFBRyxJQUFJLENBQUMsY0FBYyxHQUFHLG1DQUFtQztnQkFDNUUsTUFBTSxFQUFHLElBQUksQ0FBQyxjQUFjLEdBQUcsb0NBQW9DO2dCQUNuRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsY0FBYyxHQUFHLG9DQUFvQztnQkFDaEYsT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGFBQWEsRUFBRSxrQkFBa0I7YUFDcEMsQ0FBQztZQUVGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3pCLElBQUksRUFBRSxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNmLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLEVBQUUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNuQixFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFFaEUsRUFBRSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDekIsRUFBRSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFeEMsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsV0FBVztRQUNULEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLElBQUk7UUFDUixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVNLGlCQUFpQjtRQUV0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQThoR2pFLENBQUMsQ0FBQztRQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQzt3R0E5bUdZLG9CQUFvQix1R0FRckIsY0FBYzs0RkFSYixvQkFBb0IsMkVDbEJqQyw2d29KQTI2RGtCLG1URDc1REwsWUFBWTs7NEZBSVosb0JBQW9CO2tCQVJoQyxTQUFTOytCQUNFLGlCQUFpQixjQUVmLElBQUksV0FDUCxDQUFFLFlBQVksQ0FBQzs7MEJBWXJCLE1BQU07MkJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEluamVjdCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQkFTRV9VUkxfVE9LRU4gfSBmcm9tICcuLy4uL2RvdG5ldHJlcG9ydC1saWIuZGknO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5kZWNsYXJlIHZhciBrbzogYW55O1xyXG5kZWNsYXJlIHZhciBtYW5hZ2VWaWV3TW9kZWw6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWRvdG5ldHNldHVwJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG90bmV0c2V0dXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogWyBDb21tb25Nb2R1bGVdLFxyXG4gIHN0eWxlVXJsczogWycuL2RvdG5ldHNldHVwLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIERvdG5ldHNldHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgYmFzZVNlcnZpY2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgcmVwb3J0VGVtcGxhdGVzOiBTYWZlSHRtbDtcclxuICBwcml2YXRlIHF1ZXJ5UGFyYW1zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9PXt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBjZHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBASW5qZWN0KEJBU0VfVVJMX1RPS0VOKSBwcml2YXRlIGJhc2VVcmw6IHN0cmluZyxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7IFxyXG5cclxuICAgICAgdGhpcy5iYXNlU2VydmljZVVybCA9IHRoaXMuYmFzZVVybCArICcvYXBpJzsgLy8gXCJodHRwOi8vbG9jYWxob3N0OjM5Mzc4XCI7IFxcXHJcbiAgICAgIHRoaXMucmVwb3J0VGVtcGxhdGVzID0gXCJcIjtcclxuICAgIH1cclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgbGV0IGxvYWRTZXR1cFNjaGVtYVVybCA9IHRoaXMuYmFzZVNlcnZpY2VVcmwgKyBcIi9Eb3ROZXRSZXBvcnRBcGkvTG9hZFNldHVwU2NoZW1hXCI7XHJcbiAgICB0aGlzLnF1ZXJ5UGFyYW1zID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuICAgIHZhciBkYXRhYmFzZUFwaUtleSA9IHRoaXMucXVlcnlQYXJhbXNbJ2RhdGFiYXNlQXBpS2V5J10gfHwgJyc7XHJcbiAgICB2YXIgb25seUFwaSA9IHRoaXMucXVlcnlQYXJhbXNbJ29ubHlBcGknXSA9PT0gJ2ZhbHNlJztcclxuIFxyXG4gICAgdGhpcy5odHRwLmdldChsb2FkU2V0dXBTY2hlbWFVcmwgKyBcIj9kYXRhYmFzZUFwaUtleT1cIiArIGRhdGFiYXNlQXBpS2V5ICsnJm9ubHlBcGk9JyArIG9ubHlBcGkpLnN1YnNjcmliZSgobW9kZWw6IGFueSkgPT4ge1xyXG4gICAgICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICBtb2RlbDogbW9kZWwsXHJcbiAgICAgICAgICAgIHNhdmVUYWJsZVVybDogJy9SZXBvcnRBcGkvU2F2ZVRhYmxlRGF0YScsXHJcbiAgICAgICAgICAgIGRlbGV0ZVRhYmxlVXJsOiAnL1JlcG9ydEFwaS9EZWxldGVUYWJsZScsXHJcbiAgICAgICAgICAgIGdldFJlbGF0aW9uc1VybDogJy9SZXBvcnRBcGkvR2V0UmVsYXRpb25zJyxcclxuICAgICAgICAgICAgZ2V0RGF0YUNvbm5lY3Rpb25zVXJsOiAnL1JlcG9ydEFwaS9HZXREYXRhQ29ubmVjdGlvbnMnLFxyXG4gICAgICAgICAgICB1cGRhdGVEYXRhQ29ubmVjdGlvblVybDogJy9SZXBvcnRBcGkvVXBkYXRlRGF0YUNvbm5lY3Rpb24nLFxyXG4gICAgICAgICAgICBzYXZlUmVsYXRpb25zVXJsOiAnL1JlcG9ydEFwaS9TYXZlUmVsYXRpb25zRGF0YScsXHJcbiAgICAgICAgICAgIGFkZERhdGFDb25uZWN0aW9uVXJsOiAnL1JlcG9ydEFwaS9BZGREYXRhQ29ubmVjdGlvbicsXHJcbiAgICAgICAgICAgIHNhdmVQcm9jVXJsOiAnL1JlcG9ydEFwaS9TYXZlUHJvY2VkdXJlRGF0YScsXHJcbiAgICAgICAgICAgIGRlbGV0ZVByb2NVcmw6ICcvUmVwb3J0QXBpL0RlbGV0ZVByb2NlZHVyZScsXHJcbiAgICAgICAgICAgIHNhdmVDdXN0b21GdW5jVXJsOiAnL1JlcG9ydEFwaS9TYXZlQ3VzdG9tRnVuY3Rpb25EYXRhJyxcclxuICAgICAgICAgICAgZGVsZXRlQ3VzdG9tRnVuY1VybDogJy9SZXBvcnRBcGkvRGVsZXRlQ3VzdG9tRnVuY3Rpb24nLFxyXG4gICAgICAgICAgICBnZXRTY2hlZHVsZXNVcmw6ICcvUmVwb3J0QXBpL0dldFNjaGVkdWxlZFJlcG9ydHNBbmREYXNoYm9hcmRzJyxcclxuICAgICAgICAgICAgZGVsZXRlU2NoZWR1bGVVcmw6ICcvUmVwb3J0QXBpL0RlbGV0ZVNjaGVkdWxlJyxcclxuICAgICAgICAgICAgc2F2ZUNhdGVnb3JpZXNVcmw6ICcvUmVwb3J0QXBpL1NhdmVDYXRlZ29yaWVzRGF0YScsXHJcbiAgICAgICAgICAgIGdldENhdGVnb3JpZXNVcmw6ICcvUmVwb3J0QXBpL0dldENhdGVnb3JpZXMnLFxyXG4gICAgICAgICAgICBnZXRBcHBTZXR0aW5nVXJsOiAnL1JlcG9ydEFwaS9HZXRBY2NvdW50U2V0dGluZ3MnLFxyXG4gICAgICAgICAgICBzYXZlQXBwU2V0dGluZ1VybDogJy9SZXBvcnRBcGkvQ2hhbmdlQWNjb3VudFNldHRpbmdzJyxcclxuICAgICAgICAgICAgcmVwb3J0c0FwaVVybDogIHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9DYWxsUmVwb3J0QXBpJyxcclxuICAgICAgICAgICAgZ2V0VXNlcnNBbmRSb2xlczogdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL0dldFVzZXJzQW5kUm9sZXMnLFxyXG4gICAgICAgICAgICBzZWFyY2hQcm9jVXJsOiAgdGhpcy5iYXNlU2VydmljZVVybCArICcvRG90TmV0UmVwb3J0QXBpL1NlYXJjaFByb2NlZHVyZScsXHJcbiAgICAgICAgICAgIGdldFNjaGVtYUZyb21TcWw6ICB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgJy9Eb3ROZXRSZXBvcnRBcGkvR2V0U2NoZW1hRnJvbVNxbCcsXHJcbiAgICAgICAgICAgIGFwaVVybDogIHRoaXMuYmFzZVNlcnZpY2VVcmwgKyAnL0RvdE5ldFJlcG9ydEFwaS9DYWxsUG9zdFJlcG9ydEFwaScsXHJcbiAgICAgICAgICAgIGdldFByZXZpZXdGcm9tU3FsVXJsOiB0aGlzLmJhc2VTZXJ2aWNlVXJsICsgJy9Eb3ROZXRSZXBvcnRBcGkvR2V0UHJldmlld0Zyb21TcWwnLFxyXG4gICAgICAgICAgICBvbmx5QXBpOiBvbmx5QXBpLFxyXG4gICAgICAgICAgICBsb2FkU2NoZW1hVXJsOiBsb2FkU2V0dXBTY2hlbWFVcmxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLnJlbmRlcktPVGVtcGxhdGVzKCk7XHJcbiAgICAgICAgdmFyIHZtID0gbmV3IG1hbmFnZVZpZXdNb2RlbChvcHRpb25zKTtcclxuICAgICAgICB2bS5Mb2FkSm9pbnMoKTtcclxuICAgICAgICB2bS5zZXR1cE1hbmFnZUFjY2VzcygpO1xyXG4gICAgICAgIHZtLkxvYWRTY2hlZHVsZXMoKTtcclxuICAgICAgICB2bS5Mb2FkQ2F0ZWdvcmllcygpO1xyXG4gICAgICAgIGtvLmFwcGx5QmluZGluZ3Modm0sIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuXHJcbiAgICAgICAgdm0uTG9hZERhdGFDb25uZWN0aW9ucygpO1xyXG4gICAgICAgIHZtLmN1c3RvbVNxbC50ZXh0UXVlcnkuc2V0dXBRdWVyeSgpO1xyXG4gICAgICAgICAgICBcclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAga28uY2xlYW5Ob2RlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3QtbmV0LXJlcG9ydCcpKTtcclxuIH1cclxuIFxyXG4gcHVibGljIGluaXQoKSB7XHJcbiAgICB0aGlzLm5nT25Jbml0KCk7XHJcbiAgfVxyXG5cclxuIHByaXZhdGUgcmVuZGVyS09UZW1wbGF0ZXMoKSB7XHJcbiAgXHJcbiAgICB0aGlzLnJlcG9ydFRlbXBsYXRlcyA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGA8IS0tIERvdG5ldCBSZXBvcnQgSFRNTCBUZW1wbGF0ZXMgLS0+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWZpbHRlclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdmaWx0ZXItJyt1aUlkIH1cIj5cclxuICAgICAgICA8IS0tIGtvIGlmOiAhaGFzRm9yZWlnbktleS0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnRGF0ZVRpbWUnLCdEYXRlJywnVGltZSddLmluZGV4T2YoZmllbGRUeXBlKSAhPSAtMSAtLT5cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnPScsJz4nLCc8JywnPj0nLCc8PScsICdub3QgZXF1YWwnXS5pbmRleE9mKCRwYXJlbnQuT3BlcmF0b3IoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6ICRwYXJlbnQuZm10VmFsdWUsIGRhdGVwaWNrZXJPcHRpb25zOiB7dmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRhdGVGb3JtYXQ6IGRhdGVGb3JtYXQoKSA9PT0gJ0N1c3RvbScgPyBjdXN0b21EYXRlRm9ybWF0KCkucmVwbGFjZSgveXl5eS9nLCAneXknKSA6ICRyb290LmRhdGVGb3JtYXRNYXBwaW5nc1tkYXRlRm9ybWF0KCldfVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IGZpZWxkVHlwZT09J1RpbWUnIHx8IGZpZWxkRm9ybWF0KCk9PSdUaW1lJyB8fCBmaWVsZEZvcm1hdCgpPT0nRGF0ZSBhbmQgVGltZSctLT5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRpbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTokcGFyZW50LlZhbHVldGltZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogWydiZXR3ZWVuJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgIEZyb21cclxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA4cHg7XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCByZXF1aXJlZCBjbGFzcz1cImZvcm0tY29udHJvbCBmcm9tLWRhdGVcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiAkcGFyZW50LmZtdFZhbHVlLCBkYXRlcGlja2VyT3B0aW9uczoge3ZhbHVlOiAkcGFyZW50LlZhbHVlLCBkYXRlRm9ybWF0OiBkYXRlRm9ybWF0KCkgPT09ICdDdXN0b20nID8gY3VzdG9tRGF0ZUZvcm1hdCgpLnJlcGxhY2UoL3l5eXkvZywgJ3l5JykgOiAkcm9vdC5kYXRlRm9ybWF0TWFwcGluZ3NbZGF0ZUZvcm1hdCgpXX1cIiAvPlxyXG4gICAgICAgICAgICA8IS0tIGtvIGlmOmZpZWxkVHlwZT09J1RpbWUnIHx8IGZpZWxkRm9ybWF0KCk9PSdUaW1lJyB8fCBmaWVsZEZvcm1hdCgpPT0nRGF0ZSBhbmQgVGltZSctLT5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRpbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTokcGFyZW50LlZhbHVldGltZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB0b1xyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDtcIj5cclxuICAgICAgICAgICAgPGlucHV0IGRhdGEtYmluZD1cImRhdGVwaWNrZXI6ICRwYXJlbnQuZm10VmFsdWUyLCBkYXRlcGlja2VyT3B0aW9uczoge3ZhbHVlOiAkcGFyZW50LlZhbHVlMiwgZGF0ZUZvcm1hdDogZGF0ZUZvcm1hdCgpID09PSAnQ3VzdG9tJyA/IGN1c3RvbURhdGVGb3JtYXQoKS5yZXBsYWNlKC95eXl5L2csICd5eScpIDogJHJvb3QuZGF0ZUZvcm1hdE1hcHBpbmdzW2RhdGVGb3JtYXQoKV19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdG8tZGF0ZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6ZmllbGRUeXBlPT0nVGltZScgfHwgZmllbGRGb3JtYXQoKT09J1RpbWUnIHx8IGZpZWxkRm9ybWF0KCk9PSdEYXRlIGFuZCBUaW1lJy0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGltZVwiIGRhdGEtYmluZD1cInZhbHVlOiRwYXJlbnQuVmFsdWV0aW1lMlwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBbJ3JhbmdlJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5Ub2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRvZGF5ICs8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5Ub2RheSAtPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+WWVzdGVyZGF5PC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VGhpcyBXZWVrPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCBXZWVrPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+VGhpcyBNb250aDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPkxhc3QgTW9udGg8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MYXN0IFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFdlZWsgVG8gRGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRoaXMgTW9udGggVG8gRGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPlRoaXMgWWVhciBUbyBEYXRlPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCAzMCBEYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwhLS08b3B0aW9uPlRoaXMgTW9udGggTGFzdCBZZWFyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCBNb250aCBMYXN0IFllYXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlzIFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5MYXN0IFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5GaXJzdCBRdWFydGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+U2Vjb25kIFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5UaGlyZCBRdWFydGVyPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+Rm91cnRoIFF1YXJ0ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj5OZXh0IDYgTW9udGhzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+TGFzdCA2IE1vbnRoczwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPjIgWWVhcnMgYWdvPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24+MyBZZWFycyBhZ288L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbj40IFllYXJzIGFnbzwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8b3B0aW9uPjUgWWVhcnMgYWdvPC9vcHRpb24+LS0+XHJcbiAgICAgICAgICAgIDxvcHRncm91cCBsYWJlbD1cIkNvbXBhcmlzb24gT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBUb2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj48PSBUb2RheTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj4+PSBUb2RheSArPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8b3B0aW9uPjw9IFRvZGF5ICs8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgIDxvcHRpb24+Pj0gVG9kYXkgLTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPG9wdGlvbj48PSBUb2RheSAtPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvb3B0Z3JvdXA+XHJcbiAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5WYWx1ZSgpLmluZGV4T2YoJ1RvZGF5ICsnKSA+PSAwIHx8ICRwYXJlbnQuVmFsdWUoKS5pbmRleE9mKCdUb2RheSAtJykgPj0gMFwiIGNsYXNzPVwiZm9ybS1ncm91cCBwdWxsLWxlZnRcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaW5wdXQtc20gcHVsbC1sZWZ0XCIgc3R5bGU9XCJ3aWR0aDogODBweDtcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHBhcmVudC5WYWx1ZTJcIiByZXF1aXJlZCAvPjxzcGFuIHN0eWxlPVwicGFkZGluZzogNXB4IDVweDtcIiBjbGFzcz1cInB1bGwtbGVmdFwiPiBkYXlzPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IFsnSW50JywnTW9uZXknLCdGbG9hdCcsJ0RvdWJsZSddLmluZGV4T2YoZmllbGRUeXBlKSAhPSAtMSAtLT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogWyc9JywnPicsJzwnLCc+PScsJzw9JywgJ25vdCBlcXVhbCddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAmJiBbJ2lzIGJsYW5rJywgJ2lzIG5vdCBibGFuaycsICdpcyBudWxsJywgJ2lzIG5vdCBudWxsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpID09IC0xIC0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCdcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnaW4nLCAnbm90IGluJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpICE9IC0xIC0tPlxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnYmV0d2VlbiddLmluZGV4T2YoJHBhcmVudC5PcGVyYXRvcigpKSAhPSAtMSAtLT5cclxuICAgICAgICAgICAgRnJvbVxyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWVcIiByZXF1aXJlZCAvPlxyXG4gICAgICAgICAgICBUb1xyXG4gICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwibnVtYmVyXCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUyXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBmaWVsZFR5cGU9PSdCb29sZWFuJyAmJiBbJ2lzIGJsYW5rJywgJ2lzIG5vdCBibGFuaycsICdpcyBudWxsJywgJ2lzIG5vdCBudWxsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpID09IC0xIC0tPlxyXG4gICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcGFyZW50LlZhbHVlLCBkaXNhYmxlOiAkcGFyZW50Lk9wZXJhdG9yKCkgPT0gJ2lzIGRlZmF1bHQnXCI+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIxXCI+WWVzPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIwXCI+Tm88L29wdGlvbj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiBbJ0ludCcsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnLCdEYXRlJywnRGF0ZVRpbWUnLCdUaW1lJywnQm9vbGVhbiddLmluZGV4T2YoZmllbGRUeXBlKSA9PSAtMSAmJiBbJ2lzIGJsYW5rJywgJ2lzIG5vdCBibGFuaycsICdpcyBudWxsJywgJ2lzIG5vdCBudWxsJ10uaW5kZXhPZigkcGFyZW50Lk9wZXJhdG9yKCkpID09IC0xIC0tPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbFwiIHR5cGU9XCJ0ZXh0XCIgZGF0YS1iaW5kPVwidmFsdWU6ICRwYXJlbnQuVmFsdWUsIGRpc2FibGU6ICRwYXJlbnQuT3BlcmF0b3IoKSA9PSAnaXMgZGVmYXVsdCcsYXR0cjoge2lkOiAnY3RsLScgKyAkZWxlbWVudC5jbG9zZXN0KCdbZGF0YS1wYXJlbnRwcmVmaXhdJykuZ2V0QXR0cmlidXRlKCdkYXRhLXBhcmVudHByZWZpeCcpICsgJy0nICsgdWlJZH1cIiByZXF1aXJlZCAvPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IGhhc0ZvcmVpZ25LZXkgJiYgJHBhcmVudC5PcGVyYXRvcigpICE9ICdhbGwnIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6IGhhc0ZvcmVpZ25QYXJlbnRLZXkgJiYgJHBhcmVudC5zaG93UGFyZW50RmlsdGVyKCkgLS0+XHJcbiAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgZHJvcGRvd25QYXJlbnQ6ICcjZmlsdGVyLScrdWlJZCwgcGxhY2Vob2xkZXI6ICdQbGVhc2UgQ2hvb3NlJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiAkcGFyZW50LlBhcmVudExpc3QsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJHBhcmVudC5Jc0NvbmRpdGlvbmFsRmlsdGVyID8gJ3RleHQnOiAnaWQnLCBzZWxlY3RlZE9wdGlvbnM6ICRwYXJlbnQuUGFyZW50SW5cIj48L3NlbGVjdD5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50Lk9wZXJhdG9yKCk9PSc9Jy0tPlxyXG4gICAgICAgIDxzZWxlY3QgcmVxdWlyZWQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7IGRyb3Bkb3duUGFyZW50OiAnI2ZpbHRlci0nK3VpSWQsIHBsYWNlaG9sZGVyOiAnUGxlYXNlIENob29zZScsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogJHBhcmVudC5Mb29rdXBMaXN0LCBvcHRpb25zVGV4dDogJ3RleHQnLCBvcHRpb25zVmFsdWU6ICAgJHBhcmVudC5Jc0NvbmRpdGlvbmFsRmlsdGVyID8gJ3RleHQnOiAnaWQnLCB2YWx1ZTogJHBhcmVudC5WYWx1ZSwgb3B0aW9uc0NhcHRpb246ICdQbGVhc2UgQ2hvb3NlJ1wiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnQuT3BlcmF0b3IoKT09J2luJyB8fCAkcGFyZW50Lk9wZXJhdG9yKCk9PSdub3QgaW4nLS0+XHJcbiAgICAgICAgPHNlbGVjdCByZXF1aXJlZCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgZHJvcGRvd25QYXJlbnQ6ICcjZmlsdGVyLScrdWlJZCwgcGxhY2Vob2xkZXI6ICdQbGVhc2UgQ2hvb3NlJywgYWxsb3dDbGVhcjogdHJ1ZSB9LCBvcHRpb25zOiAkcGFyZW50Lkxvb2t1cExpc3QsIG9wdGlvbnNUZXh0OiAndGV4dCcsIG9wdGlvbnNWYWx1ZTogJHBhcmVudC5Jc0NvbmRpdGlvbmFsRmlsdGVyID8gJ3RleHQnOiAnaWQnLCBzZWxlY3RlZE9wdGlvbnM6ICRwYXJlbnQuVmFsdWVJblwiPjwvc2VsZWN0PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJwYWdlci10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VyLWNvbnRhaW5lciBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcCBnYXAtMlwiPlxyXG5cclxuICAgICAgICA8IS0tIFJvd3MgcGVyIHBhZ2UgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTEgbXMtMVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIj5QYWdlIHNpemU6PC9zcGFuPlxyXG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc20gdy1hdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBwYWdlU2l6ZU9wdGlvbnMsIHZhbHVlOiBwYWdlU2l6ZVwiPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBJbm5lciBib3JkZXIgYmxvY2sgZm9yIHBhZ2UgbmF2aWdhdGlvbiBjb250cm9scyAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMSBtcy0zXCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgdGl0bGU9XCJGaXJzdFwiIGRhdGEtYmluZD1cImNsaWNrOiBmaXJzdCwgZW5hYmxlOiAhaXNGaXJzdFBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gcGFnZXItYnRuIG1zLTFcIiBhcmlhLWxhYmVsPVwiRmlyc3QgUGFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiB0aXRsZT1cIlByZXZpb3VzXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHByZXZpb3VzLCBlbmFibGU6ICFpc0ZpcnN0UGFnZSgpXCJcclxuICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBwYWdlci1idG5cIiBhcmlhLWxhYmVsPVwiUHJldmlvdXMgUGFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1sZWZ0XCI+PC9pPlxyXG4gICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+UGFnZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMVwiIHBhdHRlcm49XCJbMC05XSpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSB0ZXh0LWNlbnRlciBwYWdlci1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNjBweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZhbHVlOiBjdXJyZW50UGFnZSwgYXR0cjogeyBtYXg6IHBhZ2VzKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsXCI+b2Y8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBwYWdlc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiIHRpdGxlPVwiTmV4dFwiIGRhdGEtYmluZD1cImNsaWNrOiBuZXh0LCBlbmFibGU6ICFpc0xhc3RQYWdlKClcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXNtIHBhZ2VyLWJ0blwiIGFyaWEtbGFiZWw9XCJOZXh0IFBhZ2VcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYT5cclxuXHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgdGl0bGU9XCJMYXN0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGxhc3QsIGVuYWJsZTogIWlzTGFzdFBhZ2UoKVwiXHJcbiAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gcGFnZXItYnRuXCIgYXJpYS1sYWJlbD1cIkxhc3QgUGFnZVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3VibGUtcmlnaHRcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcblxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtY29sdW1uLWhlYWRlclwiPlxyXG4gICAgPCEtLSBrbyBmb3JlYWNoOiBDb2x1bW5zIC0tPlxyXG4gICAgPHRoIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICFJc1Bpdm90RmllbGQgPyBmaWVsZElkIDogJ3Bpdm90LS0nICsgZmllbGROYW1lIH0sIHN0eWxlOiB7J3RleHQtYWxpZ24nOiBmaWVsZEFsaWduKCkgPyBmaWVsZEFsaWduKCkgOiAoSXNOdW1lcmljID8gJ3JpZ2h0JyA6ICdsZWZ0JyksICdiYWNrZ3JvdW5kLWNvbG9yJzogaGVhZGVyQmFja0NvbG9yIH0sIGhpZGRlbjogb3V0ZXJHcm91cFwiIHN0eWxlPVwiYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7XCI+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIiBkYXRhLWJpbmQ9XCJpZjogISRwYXJlbnQuSXNEcmlsbERvd24oKVwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogNXB4O1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcHVwXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwiZmFsc2VcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLXYgc29ydGFibGVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDx1bCBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhSXNQaXZvdEZpZWxkXCIgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAxO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gc21hbGxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhSXNOdW1lcmljXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZU91dGVyR3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2xvbmVcIj48L3NwYW4+IE91dGVyIEdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gc21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogc2V0dXBGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvc3Bhbj4gRmllbGQgU2V0dGluZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aH1cIj5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpIC0tPlxyXG4gICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZExhYmVsKCkgPyBmaWVsZExhYmVsKCkgOiBmaWVsZE5hbWUsIHN0eWxlOiB7J2NvbG9yJzogaGVhZGVyRm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBoZWFkZXJGb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCd9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZm5vdDogJHBhcmVudHNbM10udXNlU3RvcmVkUHJvYyA/ICRwYXJlbnRzWzNdLnVzZVN0b3JlZFByb2MoKSA6ICgkcGFyZW50c1s1XS51c2VTdG9yZWRQcm9jID8gJHBhcmVudHNbNV0udXNlU3RvcmVkUHJvYygpIDogZmFsc2UpICAtLT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIlwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBpZiAoIUlzUGl2b3RGaWVsZCkgeyAkcGFyZW50c1twYWdlckluZGV4KCRwYXJlbnRzKV0uY2hhbmdlU29ydChTcWxGaWVsZCk7IH0gfSwgc3R5bGU6IHsnY29sb3InOiBoZWFkZXJGb250Q29sb3IsICdmb250LXdlaWdodCc6IGhlYWRlckZvbnRCb2xkKCkgPyAnYm9sZCcgOiAnbm9ybWFsJ31cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRwYXJlbnQuSXNEcmlsbERvd24oKSAmJiBmaWVsZExhYmVsMigpID8gZmllbGRMYWJlbDIoKSA6IChmaWVsZExhYmVsKCkgPyBmaWVsZExhYmVsKCkgOiBmaWVsZE5hbWUpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJHBhcmVudHNbcGFnZXJJbmRleCgkcGFyZW50cyldLnBhZ2VyLnNvcnRDb2x1bW4oKSA9PT0gU3FsRmllbGQgPyAoJHBhcmVudHNbcGFnZXJJbmRleCgkcGFyZW50cyldLnBhZ2VyLnNvcnREZXNjZW5kaW5nKCkgPyAnJiM5NjYwOycgOiAnJiM5NjUwOycpIDogJydcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L3RoPlxyXG4gICAgPCEtLSAva28gLS0+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtd2lkZ2V0XCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyB3aWR0aDogMTAwJTtmb250LXNpemU6IDQ4cHhcIj5cclxuICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSb3dzLmxlbmd0aCA8IDFcIiB0aXRsZT1cIk5vIGRhdGEgZm91bmRcIj4vPC9zcGFuPlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBSb3dzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiAkcGFyZW50LnJvd3NbMF0uSXRlbXNbMF1cIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50LlJvd3MubGVuZ3RoID4gMSA/ICgkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMl0uc2hvd1ByaW9ySW5LcGkgIT0gdW5kZWZpbmVkID8gJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLnNob3dQcmlvckluS3BpKCkgOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMV0uc2hvd1ByaW9ySW5LcGkoKSkgOiBmYWxzZSAtLT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInN0eWxlOiB7J2NvbG9yJzogJHBhcmVudC5jYWxjdWxhdGVSYXRlKCkgPiAwID8gJ2dyZWVuJyA6ICdyZWQnLCAnZm9udC1zaXplJzogJzI0cHgnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6ICRwYXJlbnQuY2FsY3VsYXRlUmF0ZSgpICsgJyUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHsnZm9udC1zaXplJzogJzI0cHgnLCAnY29sb3InOiAnZ3JheSd9LCBjc3M6IHsndGV4dC1tdXRlZCc6IHRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgUHJpb3IgUGVyaW9kOiA8c3BhbiBkYXRhLWJpbmQ9XCJodG1sOiAkcGFyZW50LlJvd3NbMV0uSXRlbXNbMF0uZm9ybWF0dGVkVmFsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWNvbHVtblwiPlxyXG4gICAgPCEtLSBrbyBmb3JlYWNoOiBJdGVtcyAtLT5cclxuICAgIDx0ZCBkYXRhLWJpbmQ9XCJoaWRkZW46IG91dGVyR3JvdXAsIHN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiBfYmFja0NvbG9yID8/IGJhY2tDb2xvcigpLCAnY29sb3InOiBfZm9udENvbG9yID8/IGZvbnRDb2xvcigpLCAnZm9udC13ZWlnaHQnOiBmb250Qm9sZCgpIHx8IF9mb250Qm9sZCA/ICdib2xkJyA6ICdub3JtYWwnLCAndGV4dC1hbGlnbic6IGZpZWxkQWxpZ24oKSA/IGZpZWxkQWxpZ24oKSA6IChDb2x1bW4uSXNOdW1lcmljID8gJ3JpZ2h0JyA6ICdsZWZ0Jyl9XCI+XHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGggfSwgY3NzOiB7ICd0ZXh0LXdyYXAnOiBmaWVsZFdpZHRoIH1cIj5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogTGlua1RvLS0+XHJcbiAgICAgICAgICAgIDxhIGRhdGEtYmluZD1cImF0dHI6IHtocmVmOiBMaW5rVG99XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogZm9ybWF0dGVkVmFsXCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZm5vdDogTGlua1RvLS0+XHJcbiAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdGQ+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtcGl2b3RcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCIgZGF0YS1iaW5kPVwid2l0aDogUmVwb3J0RGF0YVwiPlxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtaG92ZXIgdGFibGUtY29uZGVuc2VkXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZCBzdHlsZT1cInBvc2l0aW9uOiBzdGlja3k7IHRvcDogLTFweDsgei1pbmRleDogMjtcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBJdGVtc1swXS5Gb3JtYXR0ZWRWYWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAkaW5kZXgoKSA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZExhYmVsIHx8IENvbHVtbk5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6ICRwYXJlbnQuUm93cyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwic3R5bGU6IHsnYmFja2dyb3VuZC1jb2xvcic6ICRwYXJlbnQuYmFja0NvbG9yLCAnY29sb3InOiAkcGFyZW50LmZvbnRDb2xvciwgJ2ZvbnQtd2VpZ2h0JzogJHBhcmVudC5mb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCcsICd0ZXh0LWFsaWduJzogJHBhcmVudC5maWVsZEFsaWduID8gJHBhcmVudC5maWVsZEFsaWduIDogKCRwYXJlbnQuSXNOdW1lcmljID8gJ3JpZ2h0JyA6ICdsZWZ0JykgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBJdGVtc1skcGFyZW50Q29udGV4dC4kaW5kZXgoKV0uRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtdGFibGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtaG92ZXIgdGFibGUtY29uZGVuc2VkXCIgZGF0YS1iaW5kPVwiYXR0cjoge2NsYXNzOiAndGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWQgJyArICRwYXJlbnRzWzJdLnNlbGVjdGVkU3R5bGUoKX1cIj5cclxuICAgICAgICAgICAgPHRoZWFkIHN0eWxlPVwicG9zaXRpb246IHN0aWNreTsgdG9wOiAtMXB4OyB6LWluZGV4OiAyO1wiIGRhdGEtYmluZD1cImlmOiAhJHBhcmVudHNbMl0ubm9IZWFkZXJSb3coKVwiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibm8taGlnaGxpZ2h0XCIgZGF0YS1iaW5kPVwic29ydGFibGVDb2x1bW5zOiB7IGhhbmRsZTogJy5zb3J0YWJsZScsIGN1cnNvcjogJ21vdmUnLCBwbGFjZWhvbGRlcjogJ2Ryb3AtaGlnaGxpZ2h0JyxzZWxlY3RlZEZpZWxkczogJHBhcmVudHNbMl0uU2VsZWN0ZWRGaWVsZHMgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgIUlzRHJpbGxEb3duKCkgJiYgIUNhbkV4cGFuZE9wdGlvbigpICYmICghJHBhcmVudHNbMl0uaGFzUGl2b3RDb2x1bW4oKSB8fCAoJHBhcmVudHNbMl0uaGFzUGl2b3RDb2x1bW4oKSAmJiAkcGFyZW50c1syXS5hcHBTZXR0aW5ncy51c2VBbHRQaXZvdCkpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMHB4OyBib3JkZXItbGVmdDogMXB4IHNvbGlkO1wiIGRhdGEtYmluZD1cInN0eWxlOiB7J2JhY2tncm91bmQtY29sb3InOiBDb2x1bW5zWzBdLmhlYWRlckJhY2tDb2xvcn1cIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uLWhlYWRlcicsIGRhdGE6ICRkYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAncmVwb3J0LXRhYmxlLWJvZHknICsgJHBhcmVudHNbMl0uUmVwb3J0SUQoKX1cIj5cclxuICAgICAgICAgICAgICAgIDx0ciBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUm93cy5sZW5ndGggPCAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46IENvbHVtbnMubGVuZ3RoICsgMX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3JkcyBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICEkcGFyZW50c1syXS51c2VSZW5kZXJUYWJsZSgpIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiAkcGFyZW50LnJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgISRwYXJlbnQuSXNEcmlsbERvd24oKSAmJiAhJHBhcmVudC5DYW5FeHBhbmRPcHRpb24oKSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgc3R5bGU9XCJ3aWR0aDogMzBweDsgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcIiBkYXRhLWJpbmQ9XCJzdHlsZTogeydiYWNrZ3JvdW5kLWNvbG9yJzogSXRlbXNbMF0uX2JhY2tDb2xvciA/PyBJdGVtc1swXS5iYWNrQ29sb3IoKSwgJ2NvbG9yJzogSXRlbXNbMF0uX2ZvbnRDb2xvciA/PyBJdGVtc1swXS5mb250Q29sb3IoKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgdG9nZ2xlKCk7IH1cIj48c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiB7J2ZhLXBsdXMnOiAhaXNFeHBhbmRlZCgpLCAnZmEtbWludXMnOiBpc0V4cGFuZGVkKCl9XCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBpc0V4cGFuZGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIndpZHRoOiAzMHB4O1wiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46ICRwYXJlbnQuQ29sdW1ucy5sZW5ndGggfVwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogIURyaWxsRG93bkRhdGEoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydC1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBEcmlsbERvd25EYXRhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZFwiIGRhdGEtYmluZD1cIndpdGg6IERyaWxsRG93bkRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJuby1oaWdobGlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyB0ZW1wbGF0ZTogJ3JlcG9ydC1jb2x1bW4taGVhZGVyJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSb3dzICYmIFJvd3MubGVuZ3RoIDwgMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwiYXR0cjoge2NvbHNwYW46IENvbHVtbnMubGVuZ3RofVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gcmVjb3JkcyBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBSb3dzICAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gdGVtcGxhdGU6ICdyZXBvcnQtY29sdW1uJywgZGF0YTogJGRhdGEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLWNlbnRlcmVkXCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlubGluZSBzbWFsbCB0ZXh0LW11dGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdCB0b3RhbC1yZWNvcmRzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogcGFnZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAnVG90YWwgUmVjb3JkczogJyArIHRvdGFsUmVjb3JkcygpXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnQgdG90YWwtcmVjb3Jkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiB0aXRsZT1cIkRvd25sb2FkIEV4Y2VsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuZXhwb3J0RXhjZWxcIj48c3BhbiBjbGFzcz1cImZhIGZhLWZpbGUtZXhjZWwtb1wiPjwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIHRpdGxlPVwiVmlldyBDb2RlXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI3NxbERyaWxsRG93bk1vZGFsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuYWRtaW5Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNvZGVcIj48L3NwYW4+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+ICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBwYWdlcygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdwYWdlci10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBzdWJSZXBvcnRzUmFuKCkubGVuZ3RoID4gMCAtLT5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwiYXR0cjp7Y29sc3BhbjogJHBhcmVudC5Db2x1bW5zLmxlbmd0aCB9XCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBzdWJSZXBvcnRzUmFuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJwdWxsLWxlZnRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBSZXBvcnROYW1lXCI+PC9oMj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1vdmVyZmxvdy1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMDsgbWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGRhdGEtYmluZD1cImh0bWw6IFJlcG9ydERlc2NyaXB0aW9uLCB2aXNpYmxlOiBSZXBvcnREZXNjcmlwdGlvblwiPjwvcD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IFJlcG9ydFJlc3VsdFwiIGNsYXNzPVwic21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6ICFSZXBvcnREYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydC1zcGlubmVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgZGF0YS1iaW5kPVwid2l0aDogcGFnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBwdWxsLWxlZnQgdG90YWwtcmVjb3Jkc1wiIGRhdGEtYmluZD1cImlmOiB0b3RhbFJlY29yZHMoKT4xICYmICRwYXJlbnQuUmVwb3J0VHlwZSgpICE9ICdTaW5nbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1yaWdodFwiIGRhdGEtYmluZD1cImlmOiBwYWdlcygpPjEgJiYgJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0gJ1NpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudENvbnRleHQuJHBhcmVudC5TdWJUb3RhbHMoKS5sZW5ndGggPT0gMSAmJiAkcGFyZW50Q29udGV4dC4kcGFyZW50Q29udGV4dC4kcGFyZW50Lk91dGVyR3JvdXBDb2x1bW5zKCkubGVuZ3RoID09IDAgLS0+XHJcbiAgICAgICAgICAgIDx0Zm9vdCBkYXRhLWJpbmQ9XCJmb3JlYWNoOiAkcGFyZW50Q29udGV4dC4kcGFyZW50LlN1YlRvdGFsc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwic3ViLXRvdGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudENvbnRleHQuJHBhcmVudENvbnRleHQuJHBhcmVudENvbnRleHQuJHBhcmVudC5jYW5EcmlsbGRvd24oKSAmJiAhJHBhcmVudC5Jc0RyaWxsRG93bigpICYmICEkcGFyZW50LkNhbkV4cGFuZE9wdGlvbigpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogVmFsdWUgIT0gJ05BJyAmJiBWYWx1ZSAhPSAnTmFOJyAmJiAhb3V0ZXJHcm91cCgpIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZCBkYXRhLWJpbmQ9XCJzdHlsZTogeydiYWNrZ3JvdW5kLWNvbG9yJzogX2JhY2tDb2xvciA/PyBiYWNrQ29sb3IoKSwgJ2NvbG9yJzogX2ZvbnRDb2xvciA/PyBmb250Q29sb3IoKSwgJ2ZvbnQtd2VpZ2h0JzogZm9udEJvbGQoKSB8fCBfZm9udEJvbGQgPyAnYm9sZCcgOiAnbm9ybWFsJywgJ3RleHQtYWxpZ24nOiBmaWVsZEFsaWduKCkgPyBmaWVsZEFsaWduKCkgOiAncmlnaHQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGZvb3Q+XHJcbiAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInJlcG9ydC1yZW5kZXJcIj5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogUmVwb3J0RGF0YVwiPlxyXG4gICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IFJvd3NcIj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImh0bWw6IHJlbmRlcmVkSHRtbCwgY3NzOiB7ICdjYXJkLXZpZXcnOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMV0uY2FyZFZpZXcgfVwiPjwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHN1YlJlcG9ydHNSYW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHN0eWxlPVwicGFkZGluZy1ib3R0b206IDIwcHg7XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMiBjbGFzcz1cInB1bGwtbGVmdFwiIGRhdGEtYmluZD1cInRleHQ6IFJlcG9ydE5hbWVcIj48L2gyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1vdmVyZmxvdy1hdXRvXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMDsgbWFyZ2luLXRvcDogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgZGF0YS1iaW5kPVwiaHRtbDogUmVwb3J0RGVzY3JpcHRpb24sIHZpc2libGU6IFJlcG9ydERlc2NyaXB0aW9uXCI+PC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBSZXBvcnRSZXN1bHRcIiBjbGFzcz1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6ICFSZXBvcnREYXRhKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVwb3J0LXNwaW5uZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWlubGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic21hbGxcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBwYWdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1sZWZ0IHRvdGFsLXJlY29yZHNcIiBkYXRhLWJpbmQ9XCJpZjogdG90YWxSZWNvcmRzKCk+MSAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJpZjogcGFnZXMoKT4xICYmICRwYXJlbnQuUmVwb3J0VHlwZSgpICE9ICdTaW5nbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtdGVtcGxhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyZXBvcnQtY2hhcnRcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aWQ6ICdjaGFydF9kaXZfJyArICRwYXJlbnQuUmVwb3J0SUQoKX0sIHZpc2libGU6ICRwYXJlbnQuaXNDaGFydFwiPjwvZGl2PlxyXG4gICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgPT0gJ1Bpdm90JyAtLT5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAncmVwb3J0LXBpdm90JywgZGF0YTogJGRhdGEgfVwiPjwvZGl2PlxyXG4gICAgPCEtLSAva28gLS0+XHJcblxyXG4gICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgPT0gJ0h0bWwnIC0tPlxyXG4gICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdyZXBvcnQtcmVuZGVyJywgZGF0YTogJGRhdGEgfVwiPjwvZGl2PlxyXG4gICAgPCEtLSAva28gLS0+XHJcblxyXG4gICAgPCEtLSBrbyBpZjogJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0gJ1Bpdm90JyAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSAhPSAnSHRtbCcgJiYgKCEkcGFyZW50LmlzQ2hhcnQoKSB8fCAkcGFyZW50LlNob3dEYXRhV2l0aEdyYXBoKCkpIC0tPlxyXG4gICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1ucygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIiBhcmlhLWhhc3BvcHVwPVwiZmFsc2VcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgTWFuYWdlIEdyb3VwcyA8c3BhbiBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLXZcIj48L3NwYW4+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBzdHlsZT1cInotaW5kZXg6IDEwMDE7XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogJHBhcmVudC5PdXRlckdyb3VwQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiByZW1vdmVcIiB0aXRsZT1cIlJlbW92ZSBmcm9tIEdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jbG9zZVwiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogZmllbGROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjbGVhci1maXhcIj48L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IG91dGVyR3JvdXBEYXRhXCI+XHJcbiAgICAgICAgPCEtLSBrbyBpZjogcm93cy5sZW5ndGggPiAwIHx8ICgkcGFyZW50Lm91dGVyR3JvdXBEYXRhICYmICRwYXJlbnQub3V0ZXJHcm91cERhdGEoKS5sZW5ndGggPT0gMSkgLS0+XHJcbiAgICAgICAgPGg2IGRhdGEtYmluZD1cImh0bWw6IGRpc3BsYXlcIj48L2g2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+PC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWzFdLlJlcG9ydFR5cGUoKSAhPSAnU2luZ2xlJy0tPlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAncmVwb3J0LXRhYmxlJywgZGF0YTogJHBhcmVudC5SZXBvcnREYXRhIH1cIj48L2Rpdj5cclxuICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8IS0tIGtvIGlmOiAkcGFyZW50c1sxXS5SZXBvcnRUeXBlKCkgPT0gJ1NpbmdsZSctLT5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC13aWRnZXQnLCBkYXRhOiAkcGFyZW50LlJlcG9ydERhdGEgfVwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIC9rbyAtLT5cclxuPC9zY3JpcHQ+XHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiYWRtaW4tbW9kZS10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCBhbGlnbi1pdGVtcy1jZW50ZXJcIiBzdHlsZT1cImdhcDogMTBweDtcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBhZG1pbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIGQtaW5saW5lLWJsb2NrXCIgc3R5bGU9XCJmb250LXNpemU6IDEwcHQ7IHBhZGRpbmc6IDVweDsgbWF4LXdpZHRoOiAzNTBweDsgd2hpdGUtc3BhY2U6IG5vcm1hbDsgbWFyZ2luLWJvdHRvbTogMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXItY2lyY2xlXCI+PC9pPiBZb3UgY2FuIG1hbmFnZSBSZXBvcnRzL0Rhc2hib2FyZHMgZm9yIGFsbCB1c2Vyc1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ1YmJsZS1iYWRnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEFkbWluIE1vZGVcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBhZG1pbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlXCI+XHJcbiAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1rZXlcIj48L3NwYW4+TWFuYWdlIEFjY2VzczwvaDU+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdCBwYW5lbC1ib2R5XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5DbGllbnQgSWQgdG8gUmVzdHJpY3QgQWNjZXNzPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3ggc2luZ2xlLWxpbmVcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBjbGllbnRJZFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xIGNvbC1zbS0xXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiTGVhdmUgYmxhbmsgdG8gZ2l2ZSBhbGwgY2xpZW50cyBhY2Nlc3MgKEdsb2JhbCBSZXBvcnRzKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItbyBmYS0yeFwiPjwvc3Bhbj4mbmJzcDtVc2VyIGxldmVsIHJpZ2h0cyBvdmVycmlkZSBSb2xlIGxldmVsIHJpZ2h0cy4gTm8gc2VsZWN0aW9uIGZvciBhIHJ1bGUgaW1wbGllcyByZXBvcnQgaXMgYXZhaWxhYmxlIHRvIGFsbC5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidG9nZ2xlLWljb24gZmFcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlTWFuYWdlVXNlcnMsY3NzOiB7ICdmYS1jaGV2cm9uLWRvd24nOiBzaG93TWFuYWdlVXNlcnMoKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvd01hbmFnZVVzZXJzKCkgfVwiPjwvaT4gPGI+TWFuYWdlIGJ5IFVzZXI8L2I+IChhbGxvdyBlZGl0KVxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzaG93TWFuYWdlVXNlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBncm91cGVkVXNlcnMoKS5sZW5ndGggPiAwIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogZ3JvdXBlZFVzZXJzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHNob3coIXNob3coKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSB0b2dnbGUtaWNvblwiIGRhdGEtYmluZD1cImNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvdygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93KCkgfVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBkYXRhLWJpbmQ9XCJ0ZXh0OiBjYXRlZ29yeVwiPjwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB1c2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4gJm5ic3A7IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7IDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGdyb3VwZWRVc2VycygpLmxlbmd0aCA9PSAwICYmIHVzZXJzLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB1c2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBncm91cGVkVXNlcnMoKS5sZW5ndGggPT0gMCAmJiB1c2Vycy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VycyBsaXN0IG5vdCBwb3B1bGF0ZWQgb3Igbm90IGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRvZ2dsZS1pY29uIGZhXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZVZpZXdVc2Vycyxjc3M6IHsgJ2ZhLWNoZXZyb24tZG93bic6IHNob3dWaWV3VXNlcnMoKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvd1ZpZXdVc2VycygpIH1cIj48L2k+IDxiPlZpZXcgb25seSBieSBVc2VyPC9iPiAobm8gZWRpdC9kZWxldGUpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dWaWV3VXNlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBncm91cGVkVmlld09ubHlVc2VycygpLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBncm91cGVkVmlld09ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2F0ZWdvcnktaGVhZGVyXCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBzaG93KCFzaG93KCkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgdG9nZ2xlLWljb25cIiBkYXRhLWJpbmQ9XCJjc3M6IHsgJ2ZhLWNoZXZyb24tZG93bic6IHNob3coKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvdygpIH1cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgZGF0YS1iaW5kPVwidGV4dDogY2F0ZWdvcnlcIj48L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBjb250YWluZXItZmx1aWRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzaG93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogdmlld09ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4gJm5ic3A7IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7IDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IGdyb3VwZWRWaWV3T25seVVzZXJzKCkubGVuZ3RoID09IDAgJiYgdmlld09ubHlVc2Vycy5sZW5ndGggPiAwIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogdmlld09ubHlVc2VycyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzZWxlY3RlZFwiPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHRleHRcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBncm91cGVkVmlld09ubHlVc2VycygpLmxlbmd0aCA9PSAwICYmIHVzZXJzLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWZub3Q6IGlzRGFzaGJvYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJ0b2dnbGUtaWNvbiBmYVwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVEZWxldGVVc2Vycyxjc3M6IHsgJ2ZhLWNoZXZyb24tZG93bic6IHNob3dEZWxldGVVc2VycygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93RGVsZXRlVXNlcnMoKSB9XCI+PC9pPjxiPkRlbGV0ZSBieSBVc2VyPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd0RlbGV0ZVVzZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogZ3JvdXBlZERlbGV0ZU9ubHlVc2VycygpLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBncm91cGVkRGVsZXRlT25seVVzZXJzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXRlZ29yeS1oZWFkZXJcIiBzdHlsZT1cImN1cnNvcjogcG9pbnRlcjtcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHNob3coIXNob3coKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSB0b2dnbGUtaWNvblwiIGRhdGEtYmluZD1cImNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvdygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93KCkgfVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZyBkYXRhLWJpbmQ9XCJ0ZXh0OiBjYXRlZ29yeVwiPjwvc3Ryb25nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBkZWxldGVPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+ICZuYnNwOyA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwOyA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBncm91cGVkRGVsZXRlT25seVVzZXJzKCkubGVuZ3RoID09IDAgJiYgZGVsZXRlT25seVVzZXJzLmxlbmd0aCA+IDAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBkZWxldGVPbmx5VXNlcnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsIGxhYmVsLWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGdyb3VwZWREZWxldGVPbmx5VXNlcnMoKS5sZW5ndGggPT0gMCAmJiAgdXNlcnMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInRvZ2dsZS1pY29uIGZhXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZU1hbmFnZVJvbGVzLGNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvd01hbmFnZVJvbGVzKCksICdmYS1jaGV2cm9uLXJpZ2h0JzogIXNob3dNYW5hZ2VSb2xlcygpIH1cIj48L2k+PGI+TWFuYWdlIGJ5IFVzZXIgUm9sZTwvYj4gKGFsbG93IGVkaXQpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dNYW5hZ2VSb2xlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogdXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHVzZXJSb2xlcy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VyIFJvbGVzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidG9nZ2xlLWljb24gZmFcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlVmlld1JvbGVzLGNzczogeyAnZmEtY2hldnJvbi1kb3duJzogc2hvd1ZpZXdSb2xlcygpLCAnZmEtY2hldnJvbi1yaWdodCc6ICFzaG93Vmlld1JvbGVzKCkgfVwiPjwvaT48Yj5WaWV3IG9ubHkgYnkgVXNlciBSb2xlPC9iPiAobm8gZWRpdC9kZWxldGUpXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lci1mbHVpZFwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dWaWV3Um9sZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IHZpZXdPbmx5VXNlclJvbGVzIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNlbGVjdGVkXCI+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGV4dFwiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHVzZXJSb2xlcy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VyIFJvbGVzIGxpc3Qgbm90IHBvcHVsYXRlZCBvciBub3QgYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiBpc0Rhc2hib2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidG9nZ2xlLWljb24gZmFcIiBkYXRhLWJpbmQ9XCJjbGljazogdG9nZ2xlRGVsZXRlUm9sZXMsY3NzOiB7ICdmYS1jaGV2cm9uLWRvd24nOiBzaG93RGVsZXRlUm9sZXMoKSwgJ2ZhLWNoZXZyb24tcmlnaHQnOiAhc2hvd0RlbGV0ZVJvbGVzKCkgfVwiPjwvaT48Yj5EZWxldGUgYnkgVXNlciBSb2xlPC9iPiAoYWxsb3cgZGVsZXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd0RlbGV0ZVJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogZGVsZXRlT25seVVzZXJSb2xlcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwgbGFiZWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2VsZWN0ZWRcIj4mbmJzcDs8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiB0ZXh0XCI+PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiB1c2VyUm9sZXMubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZXIgUm9sZXMgbGlzdCBub3QgcG9wdWxhdGVkIG9yIG5vdCBhcHBsaWNhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1ncm91cFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInF1ZXJ5LWJ1aWxkZXIgZm9ybS1pbmxpbmVcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBGaWx0ZXJHcm91cHNcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicnVsZXMtZ3JvdXAtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1ncm91cC1oZWFkZXJcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7cGFyZW50ZGl2aWQ6IGdlbmVyYXRlVW5pcXVlSWQoKX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogIWlzUm9vdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cCBidG4tZ3JvdXAtdG9nZ2xlIGJ0bi1ncm91cC1zbVwiIGRhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uc1wiIHJvbGU9XCJncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBhY3RpdmVcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBkYXRhLWJpbmQ9XCJhdHRyOiB7IG5hbWU6ICdhbmRPckdyb3VwLScgKyAkZWxlbWVudC5jbG9zZXN0KCcucnVsZXMtZ3JvdXAtaGVhZGVyJykuZ2V0QXR0cmlidXRlKCdwYXJlbnRkaXZpZCcpIH0sIGNoZWNrZWQ6IEFuZE9yXCIgdmFsdWU9XCJBbmRcIiAvPiBBbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBkYXRhLWJpbmQ9XCJhdHRyOiB7IG5hbWU6ICdhbmRPckdyb3VwLScgKyAkZWxlbWVudC5jbG9zZXN0KCcucnVsZXMtZ3JvdXAtaGVhZGVyJykuZ2V0QXR0cmlidXRlKCdwYXJlbnRkaXZpZCcpIH0sIGNoZWNrZWQ6IEFuZE9yXCIgdmFsdWU9XCJPclwiIC8+IE9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuUmVtb3ZlRmlsdGVyR3JvdXAsIHZpc2libGU6ICFpc1Jvb3RcIj5SZW1vdmUgR3JvdXA8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpc1Jvb3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0IHBhZGRlZC1kaXZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPiAmbmJzcDtGaWx0ZXIgQ29uZGl0aW9uczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJydWxlcy1ncm91cC1ib2R5XCIgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAnZmlsdGVyLWlubmVyJ31cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJmbHktZmlsdGVyLXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiIGRhdGEtYmluZD1cInZpc2libGU6IEZseUZpbHRlcnMoKS5sZW5ndGg+MCB8fCBEb250RXhlY3V0ZU9uUnVuXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgIDxhIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7J2RhdGEtYnMtdGFyZ2V0JzogJyNmaWx0ZXItcGFuZWwtJyArIFJlcG9ydElEKCkgfVwiIGhyZWY9XCIjXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT4gQ2hvb3NlIEZpbHRlcnNcclxuICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZmlsdGVyLXBhbmVsLScgKyBSZXBvcnRJRCgpIH0sIGNzczoge2NvbGxwYXNlZDogIURvbnRFeGVjdXRlT25SdW4oKSwgY29sbGFwc2U6ICFEb250RXhlY3V0ZU9uUnVuKCl9XCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogRmx5RmlsdGVycyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTUgY29sLXhzLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiIGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIHRpdGxlPVwiQXBwbHkgdGhpcyBmaWx0ZXJcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiAkcGFyZW50LkFwcGx5LCBkaXNhYmxlZDogZm9yY2VkXCIgLz4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRGaWx0ZXJOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiIGNsYXNzPVwiY29sLXNtLTIgY29sLXhzLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5BcHBseVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBjbGFzcz1cImNvbC1zbS01IGNvbC14cy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRwYXJlbnQuQXBwbHlcIiBkYXRhLXBhcmVudHByZWZpeD1cIkZcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncmVwb3J0LWZpbHRlcicsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRXhlY3V0ZVJlcG9ydFwiPlJ1bjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZmlsdGVyLWlubmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicnVsZXMtbGlzdFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiIGRhdGEtYmluZD1cInZpc2libGU6IEZpbHRlcnMoKS5sZW5ndGg+MFwiPlxyXG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWJvcmRlcmxlc3NcIj5cclxuICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5GaWVsZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5GaWx0ZXI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IEZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgZGF0YS1iaW5kPVwidmFsdWU6IEFuZE9yLCB2aXNpYmxlOiAkaW5kZXgoKT4wXCIgY2xhc3M9XCJmb3JtLXNlbGVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkFuZDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPk9yPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMl0uc2VsZWN0ZWRGaWVsZHNDYW5GaWx0ZXIgIT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5zZWxlY3RlZEZpZWxkc0NhbkZpbHRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAkcGFyZW50c1skcGFyZW50cy5sZW5ndGgtMV0uc2VsZWN0ZWRGaWVsZHNDYW5GaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ3NlbGVjdGVkRmllbGROYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnUGxlYXNlIENob29zZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyOiB7cmVxdWlyZWQ6IEZpZWxkKCk9PW51bGw/J3JlcXVpcmVkJzpmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBGaWVsZCgpICYmIEZpZWxkKCkuZm9yY2VkXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogZmllbGRGaWx0ZXIsIHZhbHVlOiAkcGFyZW50Lk9wZXJhdG9yXCIgcmVxdWlyZWQ+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IEZpZWxkXCIgZGF0YS1wYXJlbnRwcmVmaXg9XCJNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdyZXBvcnQtZmlsdGVyJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBGaWVsZCgpICYmIEZpZWxkKCkuZmllbGRUeXBlID09ICdEYXRlVGltZScgJiYgT3BlcmF0b3IoKSA9PSAncmFuZ2UnICYmICRpbmRleCgpPT0wIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5jYW5BZGRTZXJpZXMgIT0gdW5kZWZpbmVkICYmICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5jYW5BZGRTZXJpZXMoKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRzWyRwYXJlbnRzLmxlbmd0aC0yXS5BZGRTZXJpZXMuYmluZCgkZGF0YSlcIj5BZGQgQ29tcGFyaXNvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0va28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBrbyBpZjogJHBhcmVudHNbJHBhcmVudHMubGVuZ3RoLTJdLmNhbkFkZFNlcmllcyA9PSB1bmRlZmluZWQgJiYgJHBhcmVudENvbnRleHQuJHBhcmVudC5jYW5BZGRTZXJpZXMgIT0gdW5kZWZpbmVkICYmICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuY2FuQWRkU2VyaWVzKCktLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuQWRkU2VyaWVzLmJpbmQoJGRhdGEpXCI+QWRkIENvbXBhcmlzb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0va28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogRmllbGQoKSAmJiBGaWVsZCgpLmZvcmNlZFwiIGNsYXNzPVwiYmFkZ2UgYmctaW5mb1wiPlJlcXVpcmVkIEZpbHRlcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuUmVtb3ZlRmlsdGVyLCBoaWRkZW46IEZpZWxkKCkgJiYgRmllbGQoKS5mb3JjZWRcIiB0aXRsZT1cIlJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgc3R5bGU9XCJmbGV4LWdyb3c6IDE7XCIgZGF0YS1iaW5kPVwid2l0aDogRmllbGQsIGhpZGRlbjogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ZpbHRlci1wYW5lbC5jYXJkLWJvZHkuY29sbGFwc2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGZpbHRlck9uRmx5KCFmaWx0ZXJPbkZseSgpKTsgfSwgY3NzOiB7J2J0bi1zdWNjZXNzJzogZmlsdGVyT25GbHkoKT09dHJ1ZSwgJ2J0bi1zZWNvbmRhcnknOiBmaWx0ZXJPbkZseSgpPT1mYWxzZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWZpbHRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRmlsdGVyIG9uIFJlcG9ydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IGNvbXBhcmVUbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+Jm5ic3A7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+PGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudHNbMl0uUmVtb3ZlU2VyaWVzXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaC1vXCI+PC9zcGFuPjwvYnV0dG9uPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11dGVkXCI+Q29tcGFyZSB0bzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogUmFuZ2UsIHZhbHVlOiBWYWx1ZVwiIHJlcXVpcmVkPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJydWxlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ2ZpbHRlci1ncm91cCd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogQWRkRmlsdGVyXCI+QWRkIEZpbHRlcjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IEFkZEZpbHRlckdyb3VwXCI+QWRkIEZpbHRlciBHcm91cDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImZpbHRlci1wYXJhbWV0ZXJzXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImhpZGRlbjogc2hvd1BhcmFtZXRlcnNcIj5ObyBmaWx0ZXJzIGF2YWlsYWJsZSB0byBjaG9vc2U8L3NwYW4+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1ib3JkZXJsZXNzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd1BhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMCVcIj5GaWx0ZXI8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAyMCVcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIndpZHRoOiAzMCVcIj5WYWx1ZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogUGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPHRyIGRhdGEtYmluZD1cImlmbm90OiBIaWRkZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwidGV4dDogRGlzcGxheU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogb3BlcmF0b3JzLCB2YWx1ZTogT3BlcmF0b3JcIiByZXF1aXJlZD48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBkYXRhLXBhcmVudHByZWZpeD1cIlBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC1maWx0ZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICA8L3RhYmxlPlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtc2NoZWR1bGVcIj5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogc2NoZWR1bGVCdWlsZGVyXCIgaWQ9XCJzY2hlZHVsZS1idWlsZGVyLWRpdlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoYXNTY2hlZHVsZVwiIGlkPVwic2NoZWR1bGVSZXBvcnRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2NoZWR1bGVSZXBvcnRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgU2V0IFNjaGVkdWxlIHRvIHNlbmQgYnkgRW1haWxcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBoYXNTY2hlZHVsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ0V2ZXJ5ICcgOiAnJ1wiPjwvc3Bhbj4mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBvcHRpb25zLCB2YWx1ZTogc2VsZWN0ZWRPcHRpb25cIiBzdHlsZT1cIm1pbi13aWR0aDogODBweDtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogc2VsZWN0ZWRPcHRpb24oKSA9PSAnb25jZSdcIiBjbGFzcz1cIm1lLTMgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICZuYnNwO29uJm5ic3A7PGlucHV0IGRhdGEtYmluZD1cImRhdGVwaWNrZXI6IHNlbGVjdGVkRGF0ZSwgZGF0ZXBpY2tlck9wdGlvbnM6IHt2YWx1ZTogc2VsZWN0ZWREYXRlfVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBzaG93RGF5c1wiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDtvbiZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG11bHRpcGxlIGNsYXNzPVwiZm9ybS1zZWxlY3QgbXMtMlwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInNlbGVjdDI6IHsgcGxhY2Vob2xkZXI6ICdDaG9vc2UgRGF5cycsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogZGF5cywgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZERheXNcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBzaG93RGF0ZXNcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tc2VsZWN0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ0Nob29zZSBEYXRlcycsIGFsbG93Q2xlYXI6IHRydWUgfSwgb3B0aW9uczogZGF0ZXMsIHNlbGVjdGVkT3B0aW9uczogc2VsZWN0ZWREYXRlc1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7b24mbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtdWx0aXBsZSBjbGFzcz1cImZvcm0tc2VsZWN0XCIgcmVxdWlyZWQgZGF0YS1iaW5kPVwic2VsZWN0MjogeyBwbGFjZWhvbGRlcjogJ0Nob29zZSBNb250aHMnLCBhbGxvd0NsZWFyOiB0cnVlIH0sIG9wdGlvbnM6IG1vbnRocywgc2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZE1vbnRoc1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNob3dBdFRpbWVcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXMtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmbmJzcDthdCZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgbWUtMlwiIHN0eWxlPVwibWluLXdpZHRoOiA2MHB4O1wiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGhvdXJzLCB2YWx1ZTogc2VsZWN0ZWRIb3VyXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBtZS0yXCIgc3R5bGU9XCJtaW4td2lkdGg6IDYwcHg7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogbWludXRlcywgdmFsdWU6IHNlbGVjdGVkTWludXRlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwibWluLXdpZHRoOiA4MHB4O1wiIGRhdGEtYmluZD1cInZhbHVlOiBzZWxlY3RlZEFtUG1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+QU08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+UE08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgUmVwb3J0IHdpbGwgYmUgcnVuIGFuZCBlbWFpbGVkIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkT3B0aW9uKCkgIT0gJ29uY2UnID8gJ2V2ZXJ5JyA6ICcnXCI+PC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE9wdGlvblwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzZWxlY3RlZE9wdGlvbigpID09ICdvbmNlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhc2VsZWN0ZWREYXRlKClcIj5QbGVhc2UgcGljayBhIERhdGU8L3NwYW4+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkRGF0ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzaG93RGF5c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZERheXMoKS5sZW5ndGggPT0gMFwiPlBsZWFzZSBwaWNrIERheShzKTwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWREYXlzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dEYXRlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIG9uIDxzcGFuIGNsYXNzPVwiZXJyb3JcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZERhdGVzKCkubGVuZ3RoID09IDBcIj5QbGVhc2UgcGljayBEYXRlKHMpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImZvcmVhY2g6IHNlbGVjdGVkRGF0ZXNcIj48c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkaW5kZXgoKT4wXCI+LCA8L3NwYW4+PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJGRhdGEgPT0gMSA/ICcxc3QnOiAoJGRhdGEgPT0gMiA/ICcybmQnIDogKCRkYXRhID09IDMgPyAnM3JkJyA6ICgkZGF0YSA9PSAzMSA/ICczMXN0JyA6ICRkYXRhKyd0aCcpKSlcIj48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaWY6IHNob3dNb250aHNcIj5cclxuICAgICAgICAgICAgICAgICAgICBvZiA8c3BhbiBjbGFzcz1cImVycm9yXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2VsZWN0ZWRNb250aHMoKS5sZW5ndGggPT0gMFwiPlBsZWFzZSBwaWNrIE1vbnRoKHMpPC9zcGFuPiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE1vbnRoc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImlmOiBzaG93QXRUaW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgYXQgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRIb3VyXCI+PC9zcGFuPjo8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZE1pbnV0ZVwiPjwvc3Bhbj4gPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogc2VsZWN0ZWRBbVBtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj5FbWFpbCB0bzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGVtYWlsVG9cIiBwbGFjZWhvbGRlcj1cIkVudGVyIEVtYWlsIEFkZHJlc3NlcyBzZXBhcmF0ZWQgYnkgY29tbWEgdG8gc2VuZCB0aGUgUmVwb3J0IHRvXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMSBjb2wtZm9ybS1sYWJlbFwiPkZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtYXQsZXZlbnQ6IHsgY2hhbmdlOiBvbkZvcm1hdENoYW5nZSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRVhDRUxcIj5FeGNlbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LmNhbkRyaWxsZG93biAmJiAkcGFyZW50LmNhbkRyaWxsZG93bigpXCIgdmFsdWU9XCJFWENFTC1TVUJcIj5FeGNlbCAoRXhwYW5kZWQpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ1NWXCI+Q1NWPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUERGXCI+UERGPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiV09SRFwiPldvcmQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJMSU5LXCI+TGluazwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTMgY29sLWZvcm0tbGFiZWxcIj5QaWNrIFRpbWUgWm9uZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IHRpbWV6b25PcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnZGlzcGxheU5hbWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVmFsdWU6ICd0aW1lWm9uZUlkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkVGltZXpvbmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdDI6IHtkcm9wZG93blBhcmVudDogJCgnI3NjaGVkdWxlLWJ1aWxkZXItZGl2JyksIGFsbG93Q2xlYXI6IHRydWUsIHBsYWNlaG9sZGVyOiAnU2V0IGEgdGltZSB6b25lIHRvIHNlbmQgcmVwb3J0J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIHRpdGxlPVwiU2V0IGEgZGF0ZSB0byBzdGFydCBzZW5kaW5nIHNjaGVkdWxlZCByZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoYXNTY2hlZHVsZVN0YXJ0XCIgaWQ9XCJzY2hlZHVsZVN0YXJ0Q2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJzY2hlZHVsZVN0YXJ0Q2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlZHVsZSBTdGFydCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIiBkYXRhLWJpbmQ9XCJpZjogaGFzU2NoZWR1bGVTdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cImRhdGVwaWNrZXI6IHNjaGVkdWxlU3RhcnQsIGRhdGVwaWNrZXJPcHRpb25zOiB7dmFsdWU6IHNjaGVkdWxlU3RhcnR9XCIgdGl0bGU9XCJTY2hlZHVsZWQgUmVwb3J0IHdpbGwgbm90IGJlIHNlbnQgYmVmb3JlIHRoaXMgZGF0ZVwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGctM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiIHRpdGxlPVwiU2V0IGEgZGF0ZSB0byBzdG9wIHNlbmRpbmcgc2NoZWR1bGVkIHJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGhhc1NjaGVkdWxlRW5kXCIgaWQ9XCJzY2hlZHVsZUVuZENoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwic2NoZWR1bGVFbmRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjaGVkdWxlIEVuZCBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIiBkYXRhLWJpbmQ9XCJpZjogaGFzU2NoZWR1bGVFbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJkYXRlcGlja2VyOiBzY2hlZHVsZUVuZCwgZGF0ZXBpY2tlck9wdGlvbnM6IHt2YWx1ZTogc2NoZWR1bGVFbmR9XCIgdGl0bGU9XCJTY2hlZHVsZWQgUmVwb3J0IHdpbGwgbm90IGJlIHNlbnQgYWZ0ZXIgdGhpcyBkYXRlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuXHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJyZXBvcnQtZmllbGQtb3B0aW9uc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHN0eWxlPVwibWF4LXdpZHRoOiA3NTBweDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IGVkaXRGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj48c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZE5hbWVcIj48L3NwYW4+IC0gU2V0dXAgQWRkaXRpb25hbCBGaWVsZCBPcHRpb25zPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiPkNvbHVtbiBGb3JtYXQgU2V0dGluZ3M8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERhdGEgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBbJ0RheXMnLCAnSG91cnMnLCAnTWludXRlcycsICdTZWNvbmRzJ10uaW5kZXhPZihmaWVsZEZvcm1hdCgpKSA+PSAwID8gWydEYXlzJywgJ0hvdXJzJywgJ01pbnV0ZXMnLCAnU2Vjb25kcyddIDogJHBhcmVudHNbMV0uZmllbGRGb3JtYXRUeXBlcywgdmFsdWU6IGZpZWxkRm9ybWF0XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnRzWzFdLmRlY2ltYWxGb3JtYXRUeXBlcy5pbmRleE9mKCRkYXRhLmZpZWxkRm9ybWF0KCkpPj0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERlY2ltYWwgUGxhY2VzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGRlY2ltYWxQbGFjZXNcIiBwbGFjZWhvbGRlcj1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGZpZWxkRm9ybWF0KCk9PSdDdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBpY2sgQ3VycmVuY3kgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50c1sxXS5jdXJyZW5jeUZvcm1hdHMsIG9wdGlvbnNUZXh0OiAnZGlzcGxheScsb3B0aW9uc1ZhbHVlOiAndmFsdWUnLCB2YWx1ZTogY3VycmVuY3lGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmllbGRGb3JtYXQoKT09J0RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5QaWNrIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50c1sxXS5kYXRlRm9ybWF0cywgdmFsdWU6IGRhdGVGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTpzZWxlY3RlZEFnZ3JlZ2F0ZSgpPT0nUGl2b3QnICYmIGZpZWxkRm9ybWF0KCk9PSdEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+UGl2b3QgRHJpbGxkb3duIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBbJycsICdEYXknLCAnTW9udGgnLCAnWWVhcicsICdNb250aC9ZZWFyJ10sIHZhbHVlOiBkcmlsbERhdGFGb3JtYXRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGZpZWxkRm9ybWF0KCk9PSdEYXRlJyAmJiBkYXRlRm9ybWF0KCk9PT0nQ3VzdG9tJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+RW50ZXIgQ3VzdG9tIERhdGUgRm9ybWF0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBjdXN0b21EYXRlRm9ybWF0XCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgQ29sdW1uIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBmaWVsZExhYmVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5Jbm5lciBDb2x1bW4gTGFiZWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZpZWxkTGFiZWwyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgVGV4dCBBbGlnbm1lbnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnRzWzFdLmZpZWxkQWxpZ25tZW50cywgdmFsdWU6IGZpZWxkQWxpZ25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS01IGNvbC1tZC01IGNvbnRyb2wtbGFiZWxcIj5DaG9vc2UgV2lkdGggKGxlYXZlIGJsYW5rIGZvciBhdXRvKTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZmllbGRXaWR0aFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5IZWFkZXIgU2V0dGluZ3M8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaWNrIFRleHQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHg7IGhlaWdodDogMzhweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGhlYWRlckZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBoZWFkZXJGb250Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgdGl0bGU9XCJBcHBseSB0byBhbGwgY29sdW1uc1wiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpe2FwcGx5QWxsSGVhZGVyRm9udENvbG9yKCFhcHBseUFsbEhlYWRlckZvbnRDb2xvcigpKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogYXBwbHlBbGxIZWFkZXJGb250Q29sb3IoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGljayBCYWNrZ3JvdW5kIENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDM4cHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBoZWFkZXJCYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIG1lLTJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhZGVyQmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEhlYWRlckJhY2tDb2xvcighYXBwbHlBbGxIZWFkZXJCYWNrQ29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsSGVhZGVyQmFja0NvbG9yKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBoZWFkZXJGb250Qm9sZFwiIGlkPVwiaGVhZGVyRm9udEJvbGRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJoZWFkZXJGb250Qm9sZENoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvbGQgVGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxIZWFkZXJCb2xkKCFhcHBseUFsbEhlYWRlckJvbGQoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEhlYWRlckJvbGQoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UZXh0IFNldHRpbmdzPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGljayBUZXh0IENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDM4cHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBmb250Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxGb250Q29sb3IoIWFwcGx5QWxsRm9udENvbG9yKCkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEZvbnRDb2xvcigpID8gJ2ZhLWNoZWNrJyA6ICdmYS1wYXN0ZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5QaWNrIEJhY2tncm91bmQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHg7IGhlaWdodDogMzhweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGJhY2tDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHN0eWxlPVwid2lkdGg6IDEwMHB4O1wiIGNsYXNzPVwiZm9ybS1jb250cm9sIG1lLTJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogYmFja0NvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIHRpdGxlPVwiQXBwbHkgdG8gYWxsIGNvbHVtbnNcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXthcHBseUFsbEJhY2tDb2xvcighYXBwbHlBbGxCYWNrQ29sb3IoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBkYXRhLWJpbmQ9XCJjc3M6IGFwcGx5QWxsQmFja0NvbG9yKCkgPyAnZmEtY2hlY2snIDogJ2ZhLXBhc3RlJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBmb250Qm9sZFwiIGlkPVwiZm9udEJvbGRDaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJmb250Qm9sZENoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvbGQgVGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiB0aXRsZT1cIkFwcGx5IHRvIGFsbCBjb2x1bW5zXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7YXBwbHlBbGxCb2xkKCFhcHBseUFsbEJvbGQoKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBhcHBseUFsbEJvbGQoKSA/ICdmYS1jaGVjaycgOiAnZmEtcGFzdGUnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGVkLWRpdlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkge2FkZENvbmRpdGlvbmFsRm9ybWF0U2V0dGluZyhudWxsKX1cIj5BZGQgQ29uZGl0aW9uYWwgRm9ybWF0dGluZzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IGZpZWxkQ29uZHRpb25hbEZvcm1hdHNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogNDBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkNvbmRpdGlvbmFsIEZvcm1hdCAjPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJGluZGV4KCkrMVwiPjwvc3Bhbj48L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wgZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQucmVtb3ZlU2V0dGluZ1wiPlJlbW92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGljayBUZXh0IENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIHN0eWxlPVwid2lkdGg6IDUwcHg7IGhlaWdodDogMzhweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBzdHlsZT1cIndpZHRoOiAxMDBweDtcIiBjbGFzcz1cImZvcm0tY29udHJvbCBtZS0yXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpY2sgQmFja2dyb3VuZCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBzdHlsZT1cIndpZHRoOiA1MHB4OyBoZWlnaHQ6IDM4cHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgc3R5bGU9XCJ3aWR0aDogMTAwcHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWUtMlwiIGRhdGEtYmluZD1cInZhbHVlOiBiYWNrQ29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZm9udEJvbGRcIiBpZD1cImZvbnRCb2xkQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImZvbnRCb2xkQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJvbGQgVGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtLTJcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmaWx0ZXIuRmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBGaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBmaWVsZEZpbHRlciwgdmFsdWU6ICRwYXJlbnQuT3BlcmF0b3JcIiByZXF1aXJlZD48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogRmllbGRcIiBkYXRhLXBhcmVudHByZWZpeD1cIkNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3JlcG9ydC1maWx0ZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiAkcGFyZW50c1sxXS51c2VTdG9yZWRQcm9jKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBwdWxsLWxlZnRcIiBzdHlsZT1cInBhZGRpbmctdG9wOiA1cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGNoZWNrT3V0ZXJHcm91cFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0ZXIgR3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGNhbmNlbEZpZWxkT3B0aW9uc1wiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZpZWxkT3B0aW9uc1wiPlNhdmUgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWxpbmstZWRpdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHN0eWxlPVwibWF4LXdpZHRoOiA3NTBweDtcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IGVkaXRMaW5rRmllbGRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5TZXR1cCBMaW5rIEZpZWxkPC9oNT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIiBkYXRhLWJpbmQ9XCJ3aXRoOiBsaW5rRmllbGRJdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+VGhpcyBmaWVsZCB3aWxsIGxpbmsgdG88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBsaW5rVHlwZXMsIHZhbHVlOiBzZWxlY3RlZExpbmtUeXBlXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IExpbmtzVG9SZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBSZXBvcnQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTcgY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnRDb250ZXh0LiRwYXJlbnQuU2F2ZWRSZXBvcnRzLCBvcHRpb25zVGV4dDogJ3JlcG9ydE5hbWUnLCBvcHRpb25zVmFsdWU6ICdyZXBvcnRJZCcsIHZhbHVlOiBMaW5rZWRUb1JlcG9ydElkLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSB0aGUgUmVwb3J0IHRvIGxpbmsgdG8nXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImlmOiBMaW5rZWRUb1JlcG9ydElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBmaWVsZCB2YWx1ZSBhcyBSZXBvcnQgRmlsdGVyIFBhcmFtZXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBTZW5kQXNGaWx0ZXJQYXJhbWV0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPkxpbmsgdG8gdGhpcyBSZXBvcnQgRmlsdGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS03IGNvbC1tZC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiByZXF1aXJlZCBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhbGxGaWVsZHMsIG9wdGlvbnNUZXh0OiAnZmllbGROYW1lJywgb3B0aW9uc1ZhbHVlOiAnZmllbGRJZCcsIHZhbHVlOiBTZWxlY3RlZEZpbHRlcklkLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSB0aGUgRmllbGQgdG8gRmlsdGVyIGJ5IHZhbHVlJ1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogTGlua3NUb1JlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tNSBjb2wtbWQtNSBjb250cm9sLWxhYmVsXCI+TGluayB0byB0aGlzIFVSTDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkVudGVyIGEgdXJsIHRvIG9wZW5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogTGlua1RvVXJsXCIgdGl0bGU9XCJWYWxpZCBVUkwgbmVlZHMgdG8gc3RhcnQgd2l0aCBodHRwOi8vIG9yIGh0dHBzOi8vXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2VuZEFzUXVlcnlQYXJhbWV0ZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VuZCBmaWVsZCB2YWx1ZSBhcyBRdWVyeSBQYXJhbWV0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIiBkYXRhLWJpbmQ9XCJpZjogU2VuZEFzUXVlcnlQYXJhbWV0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTUgY29sLW1kLTUgY29udHJvbC1sYWJlbFwiPlBhcmFtZXRlciBOYW1lIHRvIHVzZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNyBjb2wtbWQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkVudGVyIHBhcmFtZXRlciBuYW1lIHRvIHNlbmQgdmFsdWUgYXNcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUXVlcnlQYXJhbWV0ZXJOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHJlbW92ZUxpbmtGaWVsZFwiPlJlbW92ZSBMaW5rPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlTGlua0ZpZWxkXCI+U2F2ZSBDaGFuZ2VzPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJkZXNpZ25lci1jaG9vc2UtdmlzdWFsXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIlZpc3VhbGl6YXRpb24gT3B0aW9uc1wiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ0xpc3QnKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nTGlzdCcgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWxpc3QtYWx0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5MaXN0PC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1N1bW1hcnknKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nU3VtbWFyeScgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5TdW1tYXJ5PC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ0JhcicpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdCYXInIH1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1iYXItY2hhcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxwPkJhcjwvcD5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdQaWUnKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nUGllJyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtcGllLWNoYXJ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5QaWU8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnTGluZScpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdMaW5lJyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtbGluZS1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+TGluZTwvcD5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBzZXRSZXBvcnRUeXBlKCdDb21ibycpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdDb21ibycgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXNpZ25hbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+Q29tYm88L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnSHRtbCcpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCk9PSdIdG1sJyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtY29kZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+Q3VzdG9tPC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ01hcCcpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCkuaW5kZXhPZignTWFwJyk9PTAgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLWdsb2JlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5NYXA8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnSGVhdE1hcCcpOyB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCkuaW5kZXhPZignSGVhdE1hcCcpPT0wIH1cIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS0yeCBmYS1tYXBcIj48L3NwYW4+XHJcbiAgICAgICAgICAgIDxwPkhlYXRNYXA8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2V0UmVwb3J0VHlwZSgnU2luZ2xlJyk7IH0sIGNzczogeyBhY3RpdmU6IFJlcG9ydFR5cGUoKT09J1NpbmdsZScgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXdpbmRvdy1tYXhpbWl6ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPHA+S1BJPC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1RyZWVtYXAnKTsgfSwgY3NzOiB7IGFjdGl2ZTogUmVwb3J0VHlwZSgpPT0nVHJlZW1hcCcgfVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLTJ4IGZhLXdpbmRvdy1yZXN0b3JlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5UcmVlbWFwPC9wPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHNldFJlcG9ydFR5cGUoJ1Bpdm90Jyk7IH0sIGNzczogeyBhY3RpdmU6IFJlcG9ydFR5cGUoKT09J1Bpdm90JyB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtMnggZmEtcmFuZG9tXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8cD5UcmFuc3Bvc2U8L3A+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImRlc2lnbmVyLWNob29zZS1kYXRhXCI+XHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnQgYnRuLWdyb3VwIGJ0bi1ncm91cC10b2dnbGVcIiByb2xlPVwiZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogUmVwb3J0SUQoKSA8PSAwXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tc20gYnRuLWxpZ2h0IGFjdGl2ZVwiIHN0eWxlPVwibWFyZ2luLXJpZ2h0OiAwcHg7XCIgdGl0bGU9XCJZb3UgY2FuIGNoYW5nZSB0aGUgRGF0YSBzb3VyY2Ugb25seSB3aGVuIGNyZWF0aW5nIGEgbmV3IHJlcG9ydCwgY2hhbmdpbmcgdGhpcyB3aWxsIGNsZWFyIGFsbCBzZWxlY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImRhdGFvcHRpb25cIiBpZD1cInRhYmxlXCIgY2hlY2tlZCBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTdG9yZWRQcm9jLCBjaGVja2VkVmFsdWU6IGZhbHNlXCI+IER5bmFtaWNcclxuICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQgYWN0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cImRhdGFvcHRpb25cIiBpZD1cInByb2NcIiB2YWx1ZT1cIjFcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTdG9yZWRQcm9jLCBjaGVja2VkVmFsdWU6IHRydWVcIj4gUHJlZGVmaW5lZFxyXG4gICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0aXRsZT1cIkFkZCBDdXN0b20gRmllbGQgdXNpbmcgRm9ybXVsYVwiIGRhdGEtYmluZD1cImhpZGRlbjogaXNGdW5jdGlvbkZpZWxkKCkgfHwgdXNlU3RvcmVkUHJvYygpLCBjbGljazogY2FuY2VsRm9ybXVsYUZpZWxkLCB0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpPyAnQ2FuY2VsJzogJ0N1c3RvbSBGaWVsZCcsIGNzczogeydidG4tcHJpbWFyeSc6ICFpc0Zvcm11bGFGaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRm9ybXVsYUZpZWxkfVwiPjwvYT5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIHRpdGxlPVwiQWRkIEN1c3RvbSBGaWVsZCB1c2luZyBGdW5jdGlvblwiIGRhdGEtYmluZD1cImhpZGRlbjogdHJ1ZSB8fCBpc0Zvcm11bGFGaWVsZCgpIHx8IHVzZVN0b3JlZFByb2MoKSwgY2xpY2s6IGZ1bmN0aW9uKCl7ZGVzaWduRnVuY3Rpb25GaWVsZCgpfSwgdGV4dDogaXNGdW5jdGlvbkZpZWxkKCk/ICdDYW5jZWwnOiAnRnVuY3Rpb24gRmllbGQnLCBjc3M6IHsnYnRuLXByaW1hcnknOiAhaXNGdW5jdGlvbkZpZWxkKCksICdidG4tZGFuZ2VyJzogaXNGdW5jdGlvbkZpZWxkfVwiPjwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGRhdGEtYmluZD1cImRpc2FibGU6IGlzRm9ybXVsYUZpZWxkLCBoaWRkZW46IHVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiB0ZXh0UXVlcnkuc2VhcmNoRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwic2VhcmNoLWZpZWxkXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyOiB7ZHJvcGRvd25QYXJlbnQ6ICRyb290LmFjdGl2ZURlc2lnbigpID8gJCgnI2Nob29zZS1kYXRhLWRlc2lnbicpIDogJCgnI2Nob29zZS1kYXRhLWNhcmQnKSwgcGxhY2Vob2xkZXI6ICdTZWFyY2ggZm9yIGEgRGF0YSBGaWVsZC4uLicsIGFqYXg6IHsgdXJsOiB1cmwsIGRhdGFUeXBlOiAnanNvbicsIGRhdGE6IHF1ZXJ5LCBwcm9jZXNzUmVzdWx0czogcHJvY2Vzc1Jlc3VsdHMsIGhlYWRlcnM6IGhlYWRlcnMgfSwgbWluaW11bUlucHV0TGVuZ3RoOiAyLCBhbGxvd0NsZWFyOiB0cnVlIH0sIHZhbHVlOiBzZWxlY3RlZE9wdGlvblwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiIGRhdGEtYmluZD1cInZpc2libGU6IHVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJzZWxlY3QyVmFsdWU6IHtkcm9wZG93blBhcmVudDogJHJvb3QuYWN0aXZlRGVzaWduKCkgPyAkKCcjY2hvb3NlLWRhdGEtZGVzaWduJykgOiAkKCcjY2hvb3NlLWRhdGEtY2FyZCcpfSwgb3B0aW9uczogUHJvY3MsIG9wdGlvbnNDYXB0aW9uOiAnQ2hvb3NlIFNlY3Rpb24uLi4nLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgdmFsdWU6IFNlbGVjdGVkUHJvYywgdmlzaWJsZTogdXNlU3RvcmVkUHJvY1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgZGF0YS1iaW5kPVwiaGlkZGVuOiB1c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIiBzdHlsZT1cInBhZGRpbmctdG9wOiAxNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgU2VsZWN0IERhdGEgdG8gdXNlIGluIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGUgdGV4dC1tdXRlZFwiIGRhdGEtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiQ2hvb3NlIGEgdGFibGUgdG8gc2hvdyBmaWVsZHMgdG8gc2VsZWN0LlwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YS1zZWxlY3QtdHJlZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiBDYXRlZ29yaXplZFRhYmxlcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGlzRXhwYW5kZWQoIWlzRXhwYW5kZWQoKSk7IH0sIHZpc2libGU6IGNhdGVnb3J5TmFtZVwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiBpc0V4cGFuZGVkKCkgPyAnZmEtY2hldnJvbi1kb3duIHRleHQtc2Vjb25kYXJ5JyA6ICdmYS1jaGV2cm9uLXJpZ2h0IHRleHQtc2Vjb25kYXJ5J1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogaXNFeHBhbmRlZCgpID8gJ2ZhLWZvbGRlci1vcGVuJyA6ICdmYS1mb2xkZXInXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjYXRlZ29yeU5hbWVcIiBjbGFzcz1cIm1sLTJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcG9ydC1saXN0XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNFeHBhbmRlZCgpLCBmb3JlYWNoOiB0YWJsZXNcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBib3JkZXItYm90dG9tIHB5LTIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBzZWxlY3RUYWJsZSgkZGF0YSk7IH0sIGNzczogeyd0ZXh0LW11dGVkJzogIWlzRW5hYmxlZCgpfSwgc3R5bGU6IHtjdXJzb3I6IGlzRW5hYmxlZCgpID8gJ3BvaW50ZXInIDogJyd9LCBhdHRyOiB7dGl0bGU6ICFpc0VuYWJsZWQoKSA/ICdDYW5ub3QgdXNlIHRhYmxlIGFzIGpvaW5zIGRvIG5vdCBleGlzdCc6ICcnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc2Vjb25kYXJ5IGZhXCIgZGF0YS1iaW5kPVwiY3NzOiBpc0VuYWJsZWQoKSA/ICgkZGF0YSA9PT0gJHBhcmVudHNbMV0uU2VsZWN0ZWRUYWJsZSgpID8gJ2ZhLWNoZXZyb24tZG93bicgOiAnZmEtY2hldnJvbi1yaWdodCcpIDogJ2ZhLWJhbidcIj48L3NwYW4+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L3NwYW4+Jm5ic3A7PHNwYW4gZGF0YS1iaW5kPVwidGV4dDogdGFibGVOYW1lXCIgY2xhc3M9XCJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkZGF0YSA9PT0gJHBhcmVudHNbMV0uU2VsZWN0ZWRUYWJsZSgpICYmICEkcGFyZW50c1sxXS5pc0Zvcm11bGFGaWVsZCgpICYmICEkcGFyZW50c1sxXS5TZWxlY3RlZFRhYmxlKCkuZHluYW1pY0NvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudHNbMV0uTW92ZUFsbEZpZWxkc1wiPlNlbGVjdCBhbGw8L2E+IHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudHNbMV0uUmVtb3ZlU2VsZWN0ZWRGaWVsZHNcIj5SZW1vdmUgYWxsPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBGaWVsZHMgRXhwYW5kIEhlcmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6ICRkYXRhID09PSAkcGFyZW50c1sxXS5TZWxlY3RlZFRhYmxlKClcIiBzdHlsZT1cInBhZGRpbmctbGVmdDogMzBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6ICRwYXJlbnRzWzFdLkNob29zZUZpZWxkcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGJvcmRlci1ib3R0b20gcHktMiBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWRJbkFycmF5OiB7YXJyYXk6ICRwYXJlbnRzWzJdLmlzRm9ybXVsYUZpZWxkKCkgPyAkcGFyZW50c1syXS5mb3JtdWxhRmllbGRzIDogJHBhcmVudHNbMl0uU2VsZWN0ZWRGaWVsZHMsIHZhbHVlOiAkZGF0YX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWVsZE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZGVzaWduZXItc2VsZWN0ZWQtZGF0YVwiPlxyXG4gICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBTZWxlY3RlZEZpZWxkcygpLmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgUGxlYXNlIGNob29zZSBkYXRhXHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IFNlbGVjdGVkRmllbGRzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nQmFyJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7Rm9yIEJhciBHcmFwaCwgdGhlIGZpcnN0IGZpZWxkIGJlbG93IHdpbGwgc2hvdyBvbiB0aGUgeC1heGlzLiBBbGwgb3RoZXIgbnVtZXJpYyBmaWVsZHMgd2lsbCBzaG93IG9uIHktYXhpcy5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBiYXJDaGFydEhvcml6b250YWxcIiAvPlxyXG4gICAgICAgICAgICAgICAgSG9yaXpvbnRhbCBCYXIgQ2hhcnRcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBiYXJDaGFydFN0YWNrZWRcIiAvPlxyXG4gICAgICAgICAgICAgICAgU3RhY2tlZCBCYXIgQ2hhcnRcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdQaWUnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItb1wiPjwvc3Bhbj4mbmJzcDtGb3IgUGllIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBiZSBncm91cGVkLCBhbmQgdGhlIGZpcnN0IG51bWVyaWMgZmllbGQgd2lsbCBzaG93IGFzIHRoZSByYXRpby5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBwaWVDaGFydERvbnV0XCIgLz5cclxuICAgICAgICAgICAgICAgIERvbnV0IENoYXJ0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nVHJlZW1hcCdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHNtYWxsIHB5LTEgbWItMFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vXCI+PC9zcGFuPiZuYnNwO0ZvciBUcmVlbWFwLCB0aGUgZGF0YSBtdXN0IGJlIGluIGEgaGllcmFyY2hpY2FsIGZvcm1hdCB3aXRoIDJuZCBjb2x1bW4gaGF2aW5nIHBhcmVudCBhbmQgdGhpcmQgY29sdW1uIGhhdmluZyBhIG51bWVyaWMgdmFsdWUuIFRoZSBkYXRhIG11c3QgaGF2ZSBhIHNpbmdsZSByb290IG5vZGUgaGF2aW5nIG51bGwgYXMgaXRzIHBhcmVudCBhcyB3ZWxsLlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0hlYXRNYXAnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vIGZhLTJ4XCI+PC9zcGFuPiZuYnNwO0ZvciBIZWF0TWFwLCB0aGUgZmlyc3QgdHdvIGNvbHVtbnMgbXVzdCBiZSBudW1lcmljIHZhbHVlcyByZXByZXNlbnRpbmdcclxuICAgICAgICAgICAgICAgIDxzdHJvbmc+TGF0aXR1ZGU8L3N0cm9uZz4gYW5kIDxzdHJvbmc+TG9uZ2l0dWRlPC9zdHJvbmc+LiBBdCBsZWFzdCBvbmUgYWRkaXRpb25hbCBudW1lcmljIGNvbHVtbiBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRoZVxyXG4gICAgICAgICAgICAgICAgPHN0cm9uZz5pbnRlbnNpdHk8L3N0cm9uZz4gb2YgZWFjaCBwb2ludC5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogaGVhdE1hcE9wdGlvbnMuc2hvd01hcmtlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNob3cgTWFya2VyXHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtMTIgZnctYm9sZFwiPkhlYXRtYXAgQ29sb3JzPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgbWItMlwiPiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZhbHVlOiBoZWF0TWFwT3B0aW9ucy5ncmFkaWVudDFcIiB0aXRsZT1cIkdyYWRpZW50IDFcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgbWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ2YWx1ZTogaGVhdE1hcE9wdGlvbnMuZ3JhZGllbnQyXCIgdGl0bGU9XCJHcmFkaWVudCAyXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6IGhlYXRNYXBPcHRpb25zLmdyYWRpZW50M1wiIHRpdGxlPVwiR3JhZGllbnQgM1wiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nTGluZSdcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHNtYWxsIHB5LTEgbWItMlwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWxpZ2h0YnVsYi1vXCI+PC9zcGFuPiZuYnNwO0ZvciBMaW5lIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBzaG93IG9uIHRoZSB4LWF4aXMuIEFsbCBvdGhlciBmaWVsZHMgd2lsbCBudW1lcmljIGZpZWxkcyB3aWxsIHNob3cgb24geS1heGlzLlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IHNtYWxsXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGxpbmVDaGFydEFyZWFcIiAvPlxyXG4gICAgICAgICAgICAgICAgQXJlYSBDaGFydFxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0NvbWJvJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7Rm9yIENvbWJvIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgd2lsbCBzaG93IG9uIHRoZSB4LWF4aXMuIEFsbCBvdGhlciBudW1lcmljIGZpZWxkcyB3aWxsIHNob3cgb24geS1heGlzLCBhbmQgeW91IGNhbiBjaG9vc2UgZGlzcGxheSBlYWNoIHNlcmllcyBhcyBsaW5lLCBiYXIgb3IgYXJlYS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5EZWZhdWx0IFNlcmllcyBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IHNlcmllc1R5cGVzLCB2YWx1ZTogY29tYm9DaGFydFR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J1Bpdm90J1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7Rm9yIFRyYW5zcG9zZSwgdGhlIGZpcnN0IGZpZWxkIGJlbG93IHdpbGwgYmUgdXNlZCB0byBQaXZvdC9UcmFuc3Bvc2UgdGhlIHJvd3MgYXMgY29sdW1ucywgYW5kIGl0IG11c3QgYmUgZ3JvdXBlZC5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nU2luZ2xlJ1wiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm8gc21hbGwgcHktMSBtYi0wXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlnaHRidWxiLW9cIj48L3NwYW4+Jm5ic3A7S1BJIGlzIGEgc2luZ2xlIHZhbHVlIHJlcG9ydCB0aGF0IGlzIGlkZWFsIGZvciBwbGFjaW5nIG9uIGEgRGFzaGJvYXJkLiBBbGwgZmllbGRzIGV4Y2VwdCBvbmUgbXVzdCBiZSBoaWRkZW4gZm9yIFdpZGdldHMuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFJlcG9ydFR5cGUoKT09J0h0bWwnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgc21hbGxcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZG9udEdyb3VwQ3VzdG9tXCIgLz5cclxuICAgICAgICAgICAgICAgIExpc3QgKERvbid0IFN1bW1hcml6ZSlcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdNYXAnXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbCBweS0xIG1iLTJcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saWdodGJ1bGItb1wiPjwvc3Bhbj4mbmJzcDtGb3IgTWFwIEdyYXBoLCB0aGUgZmlyc3QgZmllbGQgYmVsb3cgaGFzIHRvIGJlIGEgUmVnaW9uLCBsaWtlIGEgQ291bnRyeS5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBzbWFsbFwiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+TWFwIERpc3BsYXk8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTVcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IG1hcFJlZ2lvbnMsIHZhbHVlOiBtYXBSZWdpb25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwic29ydGFibGU6IHsgZGF0YTogU2VsZWN0ZWRGaWVsZHMsIG9wdGlvbnM6IHsgaGFuZGxlOiAnLnNvcnRhYmxlJywgY3Vyc29yOiAnbW92ZScsIHBsYWNlaG9sZGVyOiAnZHJvcC1oaWdobGlnaHQnIH0sIHN0cmF0ZWd5TW92ZTogdHJ1ZSB9XCI+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic29ydGFibGUgcHVsbC1sZWZ0XCIgc3R5bGU9XCJwYWRkaW5nLXJpZ2h0OiAxNXB4O1wiIGRhdGEtYmluZD1cImlmbm90OiAkcGFyZW50LnVzZVN0b3JlZFByb2NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEcmFnIHRvIHJlb3JkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY29sdW1uc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZEZpZWxkTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpID8gJygnICsgZmllbGRGb3JtYXQoKSArICcpJyA6ICcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6ICEkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUgfHwgZmllbGRGb3JtYXQoKSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSkgJiYgJHBhcmVudC5SZXBvcnRUeXBlKCkgIT0nVHJlZW1hcCcgJiYgJHBhcmVudC5pc0NoYXJ0KClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1kYW5nZXJcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhZ3JvdXBJbkdyYXBoKClcIj5XaWxsIG5vdCBzaG93IGluIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRwYXJlbnQuUmVwb3J0VHlwZVwiPjwvc3Bhbj5DaGFydDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5Jc1Bpdm90RmllbGRMYXN0Q29sdW1uKCRpbmRleCgpLHNlbGVjdGVkQWdncmVnYXRlKCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctZGFuZ2VyXCIgPlBpdm90IGZpZWxkIGNhbm5vdCBiZSB0aGUgbGFzdCBjb2x1bW4uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LklzRHluYW1pY0ZpZWxkRmlyc3RDb2x1bW4oJGluZGV4KCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctZGFuZ2VyXCIgPkR5bmFtaWMgY2Fubm90IGJlIGZpcnN0IGNvbHVtbi48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwibWFyZ2luLXRvcDogLTVweDtcIiBkYXRhLWJpbmQ9XCJpZjogJHBhcmVudC5BZ2dyZWdhdGVSZXBvcnQoKSAmJiAhJHBhcmVudC51c2VTdG9yZWRQcm9jKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6ICRwYXJlbnQuY2FuRHJpbGxkb3duKCkgJiYgJGluZGV4KCk+MCA/IGZpZWxkQWdncmVnYXRlV2l0aERyaWxsZG93biA6IGZpZWxkQWdncmVnYXRlLCB2YWx1ZTogc2VsZWN0ZWRBZ2dyZWdhdGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCIgZGF0YS1iaW5kPVwiaWZub3Q6ICRwYXJlbnQudXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoLW9cIiB0aXRsZT1cIkNhbm5vdCBEZWxldGUgUmVxdWlyZWQgRmlsdGVyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZm9yY2VGaWx0ZXJGb3JUYWJsZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyO1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiRGVsZXRlIHRoaXMgRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5SZW1vdmVGaWVsZCwgaGlkZGVuOiBmb3JjZUZpbHRlckZvclRhYmxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJpZm5vdDogJHBhcmVudC51c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IGZpbHRlck9uRmx5KCFmaWx0ZXJPbkZseSgpKTsgfSwgY3NzOiB7YWN0aXZlOiBmaWx0ZXJPbkZseSgpPT10cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkZpbHRlciBieSB0aGlzIGZpZWxkIG9uIHRoZSBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVEaXNhYmxlLCBjc3M6IHthY3RpdmU6IGRpc2FibGVkKCk9PXRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWNsb3NlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJEbyBub3QgaW5jbHVkZSBpbiBSZXBvcnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90JyAmJiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J0xpc3QnICYmICEkcGFyZW50LnVzZVN0b3JlZFByb2MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBoaWRlSW5EZXRhaWwoIWhpZGVJbkRldGFpbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBoaWRlSW5EZXRhaWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZXllLXNsYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJIaWRlIGluIERldGFpbHNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUgfHwgZmllbGRGb3JtYXQoKSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSkgICYmICRwYXJlbnQuaXNDaGFydCgpICYmICRpbmRleCgpPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgZ3JvdXBJbkdyYXBoKCFncm91cEluR3JhcGgoKSk7IH0sIGNzczoge2FjdGl2ZTogZ3JvdXBJbkdyYXBoKCk9PWZhbHNlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1zaWduYWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkluY2x1ZGUgaW4gc2VyaWVzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHBhcmVudC5JbmNsdWRlU3ViVG90YWwoKSAgJiYgIChbJ0ludCcsICdEb3VibGUnLCAnTW9uZXknLCAnRGVjaW1hbCcsICdDdXJyZW5jeSddLmluZGV4T2YoZmllbGRUeXBlKSA+PSAwIHx8IFsnSW50JywgJ0RvdWJsZScsICdNb25leScsICdEZWNpbWFsJywgJ0N1cnJlbmN5J10uaW5kZXhPZihmaWVsZEZvcm1hdCgpKSA+PSAwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyBkb250U3ViVG90YWwoIWRvbnRTdWJUb3RhbCgpKTsgfSwgY3NzOiB7YWN0aXZlOiBkb250U3ViVG90YWwoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRvbid0IGFkZCB0byBUb3RhbCByb3dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKSE9J1Bpdm90J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ1dHRvbi1ib3ggbm8tcGFkZGluZ1wiIHRhYmluZGV4PVwiMFwiIGRhdGEtYmluZD1cImNsaWNrOiBzZXR1cExpbmtGaWVsZCwgY3NzOiB7YWN0aXZlOiBsaW5rRmllbGQoKT09dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtbGlua1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiTGluayB0byBhbm90aGVyIFJlcG9ydCBvciBVcmxcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcGFyZW50LlJlcG9ydFR5cGUoKT09J0NvbWJvJyAmJiAkcGFyZW50LmlzRmllbGRWYWxpZEZvcllBeGlzKCRpbmRleCgpLCBmaWVsZFR5cGUgfHwgZmllbGRGb3JtYXQoKSwgc2VsZWN0ZWRBZ2dyZWdhdGUoKSkgICYmICRwYXJlbnQuaXNDaGFydCgpICYmICRpbmRleCgpPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgc2VyaWVzVHlwZShzZXJpZXNUeXBlKCkgPT0gJ2xpbmUnID8gJ2FyZWEnIDogKHNlcmllc1R5cGUoKT09J2JhcnMnID8gJ2xpbmUnIDogJ2JhcnMnKSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmFcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWJpbmQ9XCJjc3M6IHsnZmEtbGluZS1jaGFydCc6IHNlcmllc1R5cGUoKSA9PSAnbGluZScsICdmYS1iYXItY2hhcnQnOiBzZXJpZXNUeXBlKCkgPT0gJ2JhcnMnLCAnZmEtYXJlYS1jaGFydCc6IHNlcmllc1R5cGUoKT09J2FyZWEnIH0sIGF0dHI6IHt0aXRsZTogc2VyaWVzVHlwZX1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiIHN0eWxlPVwicGFkZGluZy1yaWdodDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidXR0b24tYm94IG5vLXBhZGRpbmdcIiB0YWJpbmRleD1cIjBcIiBkYXRhLWJpbmQ9XCJjbGljazogc2V0dXBGaWVsZE9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZ2VhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHRpdGxlPVwiTW9yZSBPcHRpb25zXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCIgZGF0YS1iaW5kPVwiaWY6IGlzRm9ybXVsYUZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnV0dG9uLWJveCBuby1wYWRkaW5nXCIgdGFiaW5kZXg9XCIwXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGVkaXRGb3JtdWxhRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgdGl0bGU9XCJFZGl0IEZvcm11bGEgRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImRlc2lnbmVyLXN1Yi1yZXBvcnRcIj5cclxuICAgIDxwIGNsYXNzPVwidGV4dC1tdXRlZCBtYi0zXCI+XHJcbiAgICAgICAgTGlua2VkIHJlcG9ydHMgYXJlIGF2YWlsYWJsZSB0byBhZGQgYXMgc3ViIHJlcG9ydHMuXHJcbiAgICAgICAgU2VsZWN0aW5nIHN1YiByZXBvcnRzIHdpbGwgcmVzdHJpY3QgdGhlIHJlcG9ydCB0byA8c3Ryb25nPm9uZSByZWNvcmQgcGVyIHBhZ2U8L3N0cm9uZz4uXHJcbiAgICA8L3A+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwib3B0aW9uczogbGlua2VkUmVwb3J0RmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1RleHQ6ICduYW1lJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFN1YlJlcG9ydCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNDYXB0aW9uOiAnU2VsZWN0IGEgbGlua2VkIHJlcG9ydC4uLidcIj5cclxuICAgICAgICA8L3NlbGVjdD5cclxuICAgIDwvZGl2PlxyXG4gICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiXHJcbiAgICAgICAgZGF0YS1iaW5kPVwic29ydGFibGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogc3ViUmVwb3J0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogeyBoYW5kbGU6ICcuc29ydGFibGUnLCBjdXJzb3I6ICdtb3ZlJywgcGxhY2Vob2xkZXI6ICdkcm9wLWhpZ2hsaWdodCcgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFycyBzb3J0YWJsZSBtZS0yXCIgc3R5bGU9XCJjdXJzb3I6bW92ZTtcIj48L2k+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBuYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnJlbW92ZVN1YlJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgRGVsZXRlXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZGVzaWduZXItaHRtbFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IFNlbGVjdGVkRmllbGRzLCB2YWx1ZTogU2VsZWN0RmllbGRUb0luc2VydCwgb3B0aW9uc0NhcHRpb246ICdTZWxlY3QgYSBmaWVsZC4uLicsIG9wdGlvbnNUZXh0OiAnc2VsZWN0ZWRGaWVsZE5hbWUnXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1hdXRvIGRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBkcm9wZG93bi10b2dnbGVcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRhYmxlXCI+PC9pPiBJbnNlcnQgYXMgVGFibGVcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbnNlcnRGaWVsZFRhYmxlVHJhbnNwb3NlZFwiPlRyYW5zcG9zZWQ8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiI1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbnNlcnRGaWVsZFRhYmxlU3RhbmRhcmRcIj5TdGFuZGFyZDwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPjxociBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGluc2VydEhlYWRlckJyZWFrXCI+QWRkIEhlYWRlciBCcmVhazwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGluc2VydEZvb3RlckJyZWFrXCI+QWRkIEZvb3RlciBCcmVhazwvYT48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLWF1dG8gbXMtMlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5cclxuICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtZS0yXCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogY2FyZFZpZXdcIj5cclxuICAgICAgICAgICAgQ2FyZCBMYXlvdXRcclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgIDx0ZXh0YXJlYSBkYXRhLWJpbmQ9XCJzdW1tZXJub3RlOiByZXBvcnRIdG1sXCI+PC90ZXh0YXJlYT5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwiZGVzaWduZXItc29ydFwiPlxyXG4gICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogdXNlU3RvcmVkUHJvY1wiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3cgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtbm93cmFwXCI+XHJcbiAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtYXV0byBjb250cm9sLWxhYmVsXCI+U29ydCBCeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0IGZvcm0tc2VsZWN0LXNtXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwib3B0aW9uczogRmlsdGVyZWRGaWVsZHMsIG9wdGlvbnNUZXh0OiAnc2VsZWN0ZWRGaWVsZE5hbWUnLCBvcHRpb25zVmFsdWU6ICdmaWVsZElkJywgdmFsdWU6IFNvcnRCeUZpZWxkLCBvcHRpb25zQ2FwdGlvbjogJ1NlbGVjdCBmaWVsZCB0byBzb3J0Li4uJywgYWxsb3dDbGVhcjogdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWF1dG8gZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInRleHQ6ICFTb3J0RGVzYygpID8gJ+KWsiBBc2NlbmRpbmcnIDogJ0Rlc2NlbmRpbmcg4pa8JywgY2xpY2s6IGZ1bmN0aW9uKCkgeyBTb3J0RGVzYyghU29ydERlc2MoKSk7IHJldHVybiBmYWxzZTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjbGljazogYWRkU29ydEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIEFkZCBTb3J0XHJcbiAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IFNvcnRGaWVsZHNcIj5cclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtYXV0byBjb250cm9sLWxhYmVsXCI+Jm5ic3A7Jm5ic3A7VGhlbiBTb3J0IEJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcGFyZW50LkZpbHRlcmVkRmllbGRzLCBvcHRpb25zVGV4dDogJ3NlbGVjdGVkRmllbGROYW1lJywgb3B0aW9uc1ZhbHVlOiAnZmllbGRJZCcsIHZhbHVlOiBzb3J0QnlGaWVsZElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtYXV0byBkLWZsZXggZ2FwLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjbGljazogcmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmUgU29ydFxyXG4gICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ0ZXh0OiAhc29ydERlc2MoKSA/ICfilrIgQXNjZW5kaW5nJyA6ICdEZXNjZW5kaW5nIOKWvCcsIGNsaWNrOiBmdW5jdGlvbigpIHsgc29ydERlc2MoIXNvcnREZXNjKCkpOyByZXR1cm4gZmFsc2U7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuYWRkU29ydEZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgU29ydFxyXG4gICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICA8L2Rpdj5cclxuPC9zY3JpcHQ+XHJcblxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cImRlc2lnbmVyLW9wdGlvbnNcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpIT0nUGl2b3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IEluY2x1ZGVTdWJUb3RhbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgSW5jbHVkZSBUb3RhbCBSb3dcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJoaWRkZW46IEFnZ3JlZ2F0ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTaG93VW5pcXVlUmVjb3Jkc1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgU2hvdyBvbmx5IFVuaXF1ZSBSZWNvcmRzXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpIT0nTGlzdCdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2hvd0V4cGFuZE9wdGlvblwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgRG9uJ3QgU2hvdyBFeHBhbmQgT3B0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IGlzQ2hhcnRcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2hvd0RhdGFXaXRoR3JhcGhcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIFNob3cgRGF0YSBhbG9uZyB3aXRoIEdyYXBoXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IERvbnRFeGVjdXRlT25SdW5cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIFdhaXQgdG8gU2VsZWN0IEZpbHRlcnMgYmVmb3JlIFJ1bm5pbmcgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLW1kLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBtYXhSZWNvcmRzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTWF4IFJlY29yZHNcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTVcIiBkYXRhLWJpbmQ9XCJpZjogbWF4UmVjb3Jkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgc3R5bGU9XCJ3aWR0aDogMTUwcHg7XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIk9ubHkgdG9wIG4uLi5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogT25seVRvcCwgdmlzaWJsZTogbWF4UmVjb3Jkc1wiPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtbWQtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFuZ2VQYWdlU2l6ZSwgZGlzYWJsZTogc3ViUmVwb3J0cygpLmxlbmd0aCA+IDBcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIENoYW5nZSBQYWdlIFNpemVcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmlzaWJsZTogY2hhbmdlUGFnZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3NzOiB7ICd0ZXh0LW11dGVkJzogc3ViUmVwb3J0cygpLmxlbmd0aCA+IDAgfVwiPlxyXG4gICAgICAgICAgICAgICAgPHNlbGVjdCBzdHlsZT1cIndpZHRoOiAxNTBweDtcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwib3B0aW9uczogWzEsMTAsMzAsNTAsMTAwLDE1MCwyMDAsNTAwLDEwMDBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogRGVmYXVsdFBhZ2VTaXplLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlOiBzdWJSZXBvcnRzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEZvcmNlIGRlZmF1bHQgdG8gMSBpZiBzdWIgcmVwb3J0cyBzZWxlY3RlZCAtLT5cclxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtZGFuZ2VyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc3ViUmVwb3J0cygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICBQYWdlIHNpemUgaXMgcmVzdHJpY3RlZCB0byAxIHdoZW4gc3ViIHJlcG9ydHMgYXJlIHNlbGVjdGVkLlxyXG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgPHA+PHNwYW4gY2xhc3M9XCJmYSBmYS1wYWludC1icnVzaFwiPjwvc3Bhbj4gUGljayBSZXBvcnQgRm9ybWF0PC9wPlxyXG4gICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSBrbyBmb3JlYWNoOiB0YWJsZVN0eWxlcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25cIiBkYXRhLWJpbmQ9XCJ0aXRsZTogJGRhdGEubmFtZSwgY2xpY2s6ICRwYXJlbnQuc2VsZWN0U3R5bGUsIGNzczogeydkcm9wZG93bi1vcHRpb24tc2VsZWN0ZWQnOiAkcGFyZW50LnNlbGVjdGVkU3R5bGUoKSA9PSAkZGF0YS5jb2xvcnNjaGVtZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluaS10YWJsZS1wcmV2aWV3XCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogbmV3IEFycmF5KDUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW5pLXRhYmxlLXJvd1wiIGRhdGEtYmluZD1cImZvcmVhY2g6IG5ldyBBcnJheSg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbmktdGFibGUtY2VsbFwiIGRhdGEtYmluZD1cInN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogJHBhcmVudENvbnRleHQuJGluZGV4KCkgPT09IDAgPyAkcGFyZW50c1sxXS5oZWFkZXJCZyA6ICgkcGFyZW50Q29udGV4dC4kaW5kZXgoKSAlIDIgPT09IDAgPyAkcGFyZW50c1sxXS5hbHRSb3dCZyA6ICRwYXJlbnRzWzFdLnJvd0JnKSwgY29sb3I6ICRwYXJlbnRzWzFdLnRleHRDb2xvciB9XCI+PC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9IZWFkZXJSb3dcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIEhlYWRlciBSb3dcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9EYXNoYm9hcmRCb3JkZXJzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICBCb3JkZXJsZXNzIG9uIERhc2hib2FyZFxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImlmOiBSZXBvcnRUeXBlKCkgPT0gJ1NpbmdsZSdcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogc2hvd1ByaW9ySW5LcGlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIFNob3cgcHJldmlvdXMgY29tcGFyaXNpb24gaW4gS1BJIGlmIGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJjdXN0b20tZmllbGQtZGVzaWduZXJcIj5cclxuICAgIDxkaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNGb3JtdWxhRmllbGQoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICBZb3UgYXJlIG5vdyBjcmVhdGluZyBhIEN1c3RvbWl6ZWQgRmllbGQuIFBsZWFzZSBzZWxlY3QgdGhlIGZpZWxkcyB5b3Ugd2FudCB0byB1c2UgaW4gdGhlIGNhbGN1bGF0aW9uLCB0aGVuIGNob29zZSB0aGUgb3BlcmF0aW9ucyB5b3Ugd2FudCB0byBwZXJmb3JtLCBhbmQgY2xpY2sgXCJTYXZlXCIgdG8gYWRkIHlvdXIgQ3VzdG9tIGZpZWxkLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02IHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICBTZXR1cCB5b3VyIEZvcm11bGEgZm9yIGNhbGN1bGF0aW5nIHRoaXMgRmllbGRcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNiByaWdodC1hbGlnblwiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcm11bGFUeXBlKCk9PSdidWlsZCdcIj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkRm9ybXVsYVBhcmVudGhlc2VzXCI+QWRkICggKTwvYT5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiB0aXRsZT1cIkFkZCBUb2RheVwiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkcygpIHx8IGZvcm11bGFGaWVsZHMoKS5sZW5ndGggPT0gMCwgY2xpY2s6IGFkZEZvcm11bGFEYXRlVG9kYXlcIj5BZGQgVG9kYXk8L2E+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgdGl0bGU9XCJBZGQgYSBDb25zdGFudCBWYWx1ZVwiIGRhdGEtYmluZD1cImNsaWNrOiBhZGRGb3JtdWxhQ29uc3RhbnRWYWx1ZVwiPkFkZCBWYWx1ZTwvYT5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogY2xlYXJGb3JtdWxhRmllbGRcIj5DbGVhcjwvYT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAtcm93XCIgZGF0YS1iaW5kPVwiaWY6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIEZvciBEYXRlcyBGaWVsZCBjYWxjdWxhdGlvbiwgeW91IGNhbiBvbmx5IHN1YnN0cmFjdCBkYXRlIGZpZWxkcyBhbmQgZGlzcGxheSB0aGUgcmVzdWx0IGFzIGRheXMsIGhvdXJzLCBtaW51dGVzIG9yIHNlY29uZHMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRmllbGRMYWJlbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiQ3VzdG9tIEZpZWxkIExhYmVsXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5EYXRhIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhRGF0YUZvcm1hdFwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWZub3Q6IGZvcm11bGFPbmx5SGFzRGF0ZUZpZWxkcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlN0cmluZzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+SW50ZWdlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+RGVjaW1hbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Q3VycmVuY3k8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBmb3JtdWxhT25seUhhc0RhdGVGaWVsZHMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5EYXlzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5Ib3Vyczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+TWludXRlczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24+U2Vjb25kczwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGZvcm11bGFEYXRhRm9ybWF0KCkgPT0gJ0RlY2ltYWwnIHx8IGZvcm11bGFEYXRhRm9ybWF0KCkgPT0gJ0N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtc20tMiBjb250cm9sLWxhYmVsXCI+Um91bmQgdG8gRGVjaW1hbCBQbGFjZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvcm11bGFEZWNpbWFsUGxhY2VzXCIgcGxhY2Vob2xkZXI9XCJDaG9vc2UgRGVjaW1hbCBwbGFjZXMgKGxlYXZlIGJsYW5rIHRvIG5vdCB1c2Ugcm91bmRpbmcpXCIgdGl0bGU9XCJDaG9vc2UgRGVjaW1hbCBwbGFjZXMgKGxlYXZlIGJsYW5rIHRvIG5vdCB1c2Ugcm91bmRpbmcpXCIgLz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogYXBwU2V0dGluZ3MudXNlU3FsQ3VzdG9tRmllbGRcIj5cclxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPkZpZWxkIEJ1aWxkZXIgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTBcIj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cInZhbHVlOiBmb3JtdWxhVHlwZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJidWlsZFwiPlNpbXBsZSBDYWxjdWxhdGlvbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJzcWxcIj5BZHZhbmNlZCBFeHByZXNzaW9uPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cImlmOiBmb3JtdWxhVHlwZSgpPT0nYnVpbGQnXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBGb3JtdWxhPC9sYWJlbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmb3JtdWxhRmllbGRzKCkubGVuZ3RoID09IDBcIj5QaWNrIGZpZWxkcyB0byBidWlsZCBjYWxjdWxhdGlvbjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogZm9ybXVsYUZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cIm1lLTNcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc1N0YXJ0XCIgc3R5bGU9XCJtYXJnaW4tdG9wOiAwO1wiPig8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICFzZXR1cEZvcm11bGEuaXNQYXJlbnRoZXNlc1N0YXJ0KCkgJiYgIXNldHVwRm9ybXVsYS5pc1BhcmVudGhlc2VzRW5kKClcIiBjbGFzcz1cImxpc3QtZ3JvdXAgbWUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZm9ybXVsYS1maWVsZC1pdGVtXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMTVweDsgcGFkZGluZzogNXB4IDE1cHhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTmFtZSwgdmlzaWJsZTogIXNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWUoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHNldHVwRm9ybXVsYS5pc0NvbnN0YW50VmFsdWVcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGF0YS1iaW5kPVwidmFsdWU6IHNldHVwRm9ybXVsYS5jb25zdGFudFZhbHVlLCB2aXNpYmxlOiBzZXR1cEZvcm11bGEuY29uc3RhbnRWYWx1ZSgpIT0nfFRvZGF5fCdcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gbWUtMlwiIHJlcXVpcmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogc2V0dXBGb3JtdWxhLmNvbnN0YW50VmFsdWUoKSA9PSAnfFRvZGF5fCdcIj48Yj5Ub2RheTwvYj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc20gbXMtMlwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnJlbW92ZUZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJtZS0zXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2V0dXBGb3JtdWxhLmlzUGFyZW50aGVzZXNFbmRcIiBzdHlsZT1cIm1hcmdpbi10b3A6IDA7XCI+KTwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTNcIiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxNXB4O1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRwYXJlbnQuc2hvd0Zvcm11bGFPcGVyYXRpb24oJGluZGV4KCkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgc3R5bGU9XCJtYXgtd2lkdGg6IDUwcHg7XCIgZGF0YS1iaW5kPVwidmFsdWU6IHNldHVwRm9ybXVsYS5mb3JtdWxhT3BlcmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiAhJHBhcmVudC5mb3JtdWxhT25seUhhc0RhdGVGaWVsZHMoKSB8fCAoJHBhcmVudC5mb3JtdWxhT25seUhhc0RhdGVGaWVsZHMoKSAmJiAkcGFyZW50LmlzQ29uc3RhbnRPcGVyYXRpb24oJGluZGV4KCkpKSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Kzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPi08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gaWY6IFsnSW50ZWdlcicsJ01vbmV5JywnRmxvYXQnLCdEb3VibGUnLCdEZWNpbWFsJywnQ3VycmVuY3knXS5pbmRleE9mKCRwYXJlbnQuZm9ybXVsYURhdGFGb3JtYXQoKSkgIT0gLTEgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPio8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Lzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBjdXN0b21TcWxGaWVsZCwgdmlzaWJsZTogZm9ybXVsYVR5cGUoKT09J3NxbCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U2VsZWN0IERhdGEgT3BlcmF0aW9uOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInNlbGVjdDI6IHtcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duUGFyZW50OiAkcm9vdC5hY3RpdmVEZXNpZ24oKSA/ICQoJyNjaG9vc2UtZGF0YS1kZXNpZ24nKSA6ICQoJyNjaG9vc2UtZGF0YS1jYXJkJyksXHJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBGdW5jdGlvbi4uLicsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBhdmFpbGFibGVGdW5jdGlvbnNHcm91cGVkKCksXHJcbiAgICAgICAgICAgICAgICB0ZW1wbGF0ZVJlc3VsdDogdGVtcGxhdGVSZXN1bHRcclxuICAgICAgICAgICAgfSwgdmFsdWU6IHNlbGVjdGVkU3FsRnVuY3Rpb25cIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJoaWRkZW46IGlzQ29uZGl0aW9uYWxGdW5jdGlvbigpIHx8IHNlbGVjdGVkU3FsRnVuY3Rpb24oKSA9PSAnT3RoZXInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TZWxlY3QgdGhlIERhdGEgRmllbGQgdG8gdXNlOjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwic2VsZWN0Mjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcm9wZG93blBhcmVudDogJHJvb3QuYWN0aXZlRGVzaWduKCkgPyAkKCcjY2hvb3NlLWRhdGEtZGVzaWduJykgOiAkKCcjY2hvb3NlLWRhdGEtY2FyZCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBGaWVsZC4uLicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFqYXg6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJHBhcmVudC50ZXh0UXVlcnkuc2VhcmNoRmllbGRzLnVybCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAkcGFyZW50LnRleHRRdWVyeS5zZWFyY2hGaWVsZHMucXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzUmVzdWx0czogJHBhcmVudC50ZXh0UXVlcnkuc2VhcmNoRmllbGRzLnByb2Nlc3NSZXN1bHRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogJHBhcmVudC50ZXh0UXVlcnkuc2VhcmNoRmllbGRzLmhlYWRlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0NsZWFyOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2VsZWN0MlRleHQ6IHNlbGVjdGVkRmllbGQsc2VsZWN0MlRhYmxlSWQ6c2VsZWN0ZWRGaWVsZFRhYmxlSWRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBzZWxlY3RlZEZpZWxkXCIgY2xhc3M9XCJzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkOiA8c3BhbiBjbGFzcz1cImhpZ2hsaWdodFwiIGRhdGEtYmluZD1cInRleHQ6ICRkYXRhXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJpZjogcmVxdWlyZXNWYWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiaW5wdXRWYWx1ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlByb3ZpZGUgdGhlIHJlbGV2YW50IHZhbHVlIHRvIHVzZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBpZD1cImlucHV0VmFsdWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBpbnB1dFZhbHVlXCIgcmVxdWlyZWQgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzZWxlY3RlZFNxbEZ1bmN0aW9uKCkgPT0gJ090aGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY3VzdG9tLXNxbFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkN1c3RvbSBTUUwgRXhwcmVzc2lvbjo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHlvdXIgY3VzdG9tIFNRTCBFeHByZXNzaW9uIGJlbG93IGJ5IHNlbGVjdGluZyBkYXRhIGZpZWxkcywgYWRkaW5nIGNhbGN1bGF0aW9ucyBvciB1c2luZyBTUUwga2V5d29yZHMgYXMgbmVlZGVkLiBGb3Igc3RyaW5nIHZhbHVlcywgcmVtZW1iZXIgdG8gZW5jbG9zZSB0aGVtIGluIHNpbmdsZSBxdW90ZXMgKCcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGlkPVwiY3VzdG9tLXNxbFwiIGNsYXNzPVwiaGludC1pbnB1dFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIldyaXRlIHlvdXIgY3VzdG9tIFNRTFwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IGlzQ29uZGl0aW9uYWxGdW5jdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1aWxkIHlvdXIgY29uZGl0aW9uYWwgbG9naWMgYmVsb3cgYnkgc2VsZWN0aW5nIGRhdGEgZmllbGRzLCBhZGRpbmcgY2FsY3VsYXRpb25zIGFuZCBkZWZpbmluZyBjb25kaXRpb25zIGFzIG5lZWRlZCwgYW5kIHByb3ZpZGUgY29ycmVzcG9uZGluZyByZXN1bHRzLiBGb3Igc3RyaW5nIHZhbHVlcywgcmVtZW1iZXIgdG8gZW5jbG9zZSB0aGVtIGluIHNpbmdsZSBxdW90ZXMgKCcnKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhpbnQtaW5wdXRcIiBpZD1cImNvbmRpdGlvbi1maWVsZFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIkZpZWxkIHRvIGNvbXBhcmVcIiB0aXRsZT1cIkZpZWxkIHRvIGNvbXBhcmVcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiIHN0eWxlPVwid2lkdGg6IDEyMHB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBmb3JtLXNlbGVjdC1zbVwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZU9wZXJhdG9ycywgdmFsdWU6IHNlbGVjdGVkT3BlcmF0b3JcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGludC1pbnB1dFwiIGlkPVwiY29uZGl0aW9uLXZhbHVlXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiVmFsdWUgdG8gY29tcGFyZVwiIHRpdGxlPVwiVmFsdWUgdG8gY29tcGFyZVwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiIHN0eWxlPVwibWF4LWhlaWdodDogMzJweDtcIj5USEVOPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiaGludC1pbnB1dFwiIGlkPVwiY29uZGl0aW9uLXJlc3VsdFwiIGNvbnRlbnRlZGl0YWJsZT1cInRydWVcIiBwbGFjZWhvbGRlcj1cIkNvbmRpdGlvbiBSZXN1bHRcIiB0aXRsZT1cIkNvbmRpdGlvbiBSZXN1bHRcIj48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkQ29uZGl0aW9uXCI+QWRkIENvbmRpdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIG10LTNcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBjb25kaXRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGNvbmRpdGlvbkRpc3BsYXlcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnJlbW92ZUNvbmRpdGlvblwiPlJlbW92ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBtYi0zXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogNXB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCIgc3R5bGU9XCJtYXgtaGVpZ2h0OiAzMnB4O1wiPkVMU0U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImhpbnQtaW5wdXRcIiBpZD1cImNvbmRpdGlvbi1lbHNlXCIgY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwiRGVmYXVsdCBSZXN1bHRcIiB0aXRsZT1cIkRlZmF1bHQgUmVzdWx0XCI+PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiB0aXRsZT1cIlNhdmUgQ3VzdG9tIEZvcm11bGEgRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZvcm11bGFGaWVsZCwgdmlzaWJsZTogaXNGb3JtdWxhRmllbGRcIj5TYXZlPC9hPlxyXG4gICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiQ3VzdG9tIEZpZWxkIHVzaW5nIEZvcm11bGFcIiBkYXRhLWJpbmQ9XCJjbGljazogY2FuY2VsRm9ybXVsYUZpZWxkLCB0ZXh0OiBpc0Zvcm11bGFGaWVsZCgpPyAnQ2FuY2VsJzogJ0N1c3RvbWl6ZScsIGNzczogeydidG4tcHJpbWFyeSc6ICFpc0Zvcm11bGFGaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRm9ybXVsYUZpZWxkfVwiPjwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWRlc2lnbmVyLWNvbXBhY3RcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJkZXNpZ25lci1jb250YWluZXIgY29tcGFjdC1kZXNpZ25lclwiIGlkPVwiY2hvb3NlLWRhdGEtZGVzaWduXCIgc3R5bGU9XCJmb250LXNpemU6MTJweDtcIj5cclxuXHJcbiAgICAgIDwhLS0gVmlzdWFsaXphdGlvbiBUb29sYmFyIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBwLTEgbWItMlwiPlxyXG4gICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvaT4gVmlzdWFsaXphdGlvbjwvc3Bhbj5cclxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHRcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRJRCgpLCBjbGljazogZnVuY3Rpb24oKSB7YWN0aXZlRGVzaWduKGZhbHNlKTt9XCIgdGl0bGU9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPiBDbG9zZSBEZXNpZ25lclxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTFcIj5cclxuICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1jaG9vc2UtdmlzdWFsJ1wiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwhLS0gTWFpbiBHcmlkIC0tPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IGZsZXgtd3JhcCBnYXAtMiBjb21wYWN0LWZpbHRlcnMgbmVlZHMtdmFsaWRhdGlvblwiPlxyXG5cclxuICAgICAgICA8IS0tIERhdGEgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImRhdGFQYW5lbFwiIHN0eWxlPVwibWF4LXdpZHRoOiAzMDBweFwiXHJcbiAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6eydjb2xsYXBzZWQtdmVydGljYWwnOiBwYW5lbHMuaXNDb2xsYXBzZWQoJ2RhdGFQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtMVwiIGRhdGEtYmluZD1cImNsaWNrOmZ1bmN0aW9uKCl7cGFuZWxzLnRvZ2dsZVBhbmVsKCdkYXRhUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvaT4gRGF0YVxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTFcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItY2hvb3NlLWRhdGEnXCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBTZWxlY3RlZCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwic2VsZWN0ZWRQYW5lbFwiIHN0eWxlPVwibWF4LXdpZHRoOiA0MDBweFwiXHJcbiAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnc2VsZWN0ZWRQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtMVwiIGRhdGEtYmluZD1cImNsaWNrOmZ1bmN0aW9uKCl7cGFuZWxzLnRvZ2dsZVBhbmVsKCdzZWxlY3RlZFBhbmVsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L2k+IFNlbGVjdGVkIGRhdGEgZm9yIHRoZSBSZXBvcnRcclxuICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWQgZmxvYXQtZW5kXCJcclxuICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmlzaWJsZTogU2VsZWN0ZWRGaWVsZHMoKS5sZW5ndGgsIGNsaWNrOmZ1bmN0aW9uKCl7U2VsZWN0ZWRGaWVsZHMoW10pO31cIj5DbGVhciBhbGw8L2E+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGRlc2lnbmVyLWF1dG8tdXBkYXRlIHAtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1heC1oZWlnaHQ6IDMwMHB4OyBvdmVyZmxvdy15OiBhdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1zZWxlY3RlZC1kYXRhJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwic3ViUmVwb3J0c1BhbmVsXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnc3ViUmVwb3J0c1BhbmVsJyl9LCB2aXNpYmxlOiBsaW5rZWRSZXBvcnRGaWVsZHMoKS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBwLTFcIiBkYXRhLWJpbmQ9XCJjbGljazpmdW5jdGlvbigpe3BhbmVscy50b2dnbGVQYW5lbCgnc3ViUmVwb3J0c1BhbmVsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYm9va21hcmtcIj48L2k+IFN1YiBSZXBvcnRzXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHAtMVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc3ViLXJlcG9ydCcsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwiaHRtbFJlcG9ydFBhbmVsXCJcclxuICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnaHRtbFJlcG9ydFBhbmVsJyl9LCB2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdIdG1sJ1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ2h0bWxSZXBvcnRQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiPjwvaT4gQ3VzdG9tIERlc2lnblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTFcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ2Rlc2lnbmVyLWh0bWwnLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBDdXN0b20gRmllbGQgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImN1c3RvbUZpZWxkUGFuZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBpc0Zvcm11bGFGaWVsZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbWFnaWNcIj48L2k+IEN1c3RvbSBGaWVsZFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTEgY3VzdG9tLWZpZWxkLWRlc2lnblwiIHN0eWxlPVwibWF4LWhlaWdodDogNDAwcHg7IG92ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6IGhpZGRlbjtcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdjdXN0b20tZmllbGQtZGVzaWduZXInLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEZpZWxkIE9wdGlvbnMgUGFuZWwgLS0+XHJcbiAgICAgICAgPGRpdiBpZD1cImZpZWxkT3B0aW9uc1BhbmVsXCIgY2xhc3M9XCJjYXJkIHAtMiBtdC0yIGNvbGxhcHNlXCI+XHJcbiAgICAgICAgPCEtLSBkeW5hbWljIGZpZWxkIHNldHRpbmdzIGxvYWQgaGVyZSAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8IS0tIEZpbHRlcnMgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImZpbHRlcnNQYW5lbFwiXHJcbiAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6eydjb2xsYXBzZWQtdmVydGljYWwnOiBwYW5lbHMuaXNDb2xsYXBzZWQoJ2ZpbHRlcnNQYW5lbCcpfSwgaGlkZGVuOiBpc0Zvcm11bGFGaWVsZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHAtMVwiIGRhdGEtYmluZD1cImNsaWNrOmZ1bmN0aW9uKCl7cGFuZWxzLnRvZ2dsZVBhbmVsKCdmaWx0ZXJzUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+IEZpbHRlcnNcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTEgZGVzaWduZXItYXV0by11cGRhdGVcIiBzdHlsZT1cIm1heC1oZWlnaHQ6MzAwcHg7IG92ZXJmbG93LXk6YXV0bztcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjp1c2VTdG9yZWRQcm9jXCI+PGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTp7bmFtZTonZmlsdGVyLXBhcmFtZXRlcnMnfVwiPjwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OnVzZVN0b3JlZFByb2NcIj48ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOntuYW1lOidmaWx0ZXItZ3JvdXAnfVwiPjwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU29ydCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBmbGV4LWZpbGwgZXhwYW5kYWJsZS1wYW5lbFwiIGlkPVwic29ydFBhbmVsXCJcclxuICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnc29ydFBhbmVsJyl9LCBoaWRkZW46IHVzZVN0b3JlZFByb2MoKSB8fCBpc0Zvcm11bGFGaWVsZCgpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ3NvcnRQYW5lbCcpfVwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNvcnRcIj48L2k+IFNvcnRcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTEgZGVzaWduZXItYXV0by11cGRhdGUgcm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1zb3J0J1wiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2V0dGluZ3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cInNldHRpbmdzUGFuZWxcIlxyXG4gICAgICAgICAgICAgZGF0YS1iaW5kPVwiY3NzOnsnY29sbGFwc2VkLXZlcnRpY2FsJzogcGFuZWxzLmlzQ29sbGFwc2VkKCdzZXR0aW5nc1BhbmVsJyl9LCBoaWRkZW46IGlzRm9ybXVsYUZpZWxkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ3NldHRpbmdzUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1nZWFyXCI+PC9pPk9wdGlvbnNcclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1mb3JtLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9pPiBSZXBvcnQgTmFtZVxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIlJlcG9ydCBOYW1lXCIgZGF0YS1iaW5kPVwidmFsdWU6IFJlcG9ydE5hbWVcIj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvLWNpcmNsZVwiPjwvaT4gUmVwb3J0IERlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiIHJvd3M9XCIzXCIgcGxhY2Vob2xkZXI9XCJBZGRpdGlvbmFsIGRldGFpbHMgKG9wdGlvbmFsKVwiIGRhdGEtYmluZD1cInZhbHVlOiBSZXBvcnREZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cInZpc2libGU6IENhblNhdmVSZXBvcnRzKClcIj5cclxuICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFNhdmUgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbCBoNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyLW9wZW5cIj48L2k+IENob29zZSBGb2xkZXJcclxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9sZGVycywgb3B0aW9uc1RleHQ6ICdGb2xkZXJOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCB2YWx1ZTogRm9sZGVySURcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1vcHRpb25zJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gU2NoZWR1bGUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cInNjaGVkdWxlUGFuZWxcIlxyXG4gICAgICAgICAgICAgZGF0YS1iaW5kPVwiY3NzOnsnY29sbGFwc2VkLXZlcnRpY2FsJzogcGFuZWxzLmlzQ29sbGFwc2VkKCdzY2hlZHVsZVBhbmVsJyl9XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ3NjaGVkdWxlUGFuZWwnKX1cIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1ob3VyZ2xhc3NcIj48L2k+IFNjaGVkdWxlXHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC0xIGRlc2lnbmVyLWF1dG8tdXBkYXRlIHJvd1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC1zY2hlZHVsZSd9XCI+PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSBBY2Nlc3MgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgZmxleC1maWxsIGV4cGFuZGFibGUtcGFuZWxcIiBpZD1cImFjY2Vzc1BhbmVsXCJcclxuICAgICAgICAgICAgIGRhdGEtYmluZD1cImNzczp7J2NvbGxhcHNlZC12ZXJ0aWNhbCc6IHBhbmVscy5pc0NvbGxhcHNlZCgnYWNjZXNzUGFuZWwnKX0sIHZpc2libGU6IGFkbWluTW9kZSgpICYmICFpc0Zvcm11bGFGaWVsZCgpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcC0xXCIgZGF0YS1iaW5kPVwiY2xpY2s6ZnVuY3Rpb24oKXtwYW5lbHMudG9nZ2xlUGFuZWwoJ2FjY2Vzc1BhbmVsJyl9XCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEta2V5XCI+PC9pPlNlY3VyaXR5XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIlwiIGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlJywgZGF0YTogbWFuYWdlQWNjZXNzfVwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxociAvPlxyXG48L3NjcmlwdD5cclxuXHJcbjxzY3JpcHQgdHlwZT1cInRleHQvaHRtbFwiIGlkPVwicmVwb3J0LWRlc2lnbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMHZoO1wiIGlkPVwicmVwb3J0LWRlc2lnbmVyLW1vZGFsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGhlaWdodDogMTAwJTtcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm15TW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIHRpdGxlPVwiTmVlZCBoZWxwIHNldHRpbmcgdXAgYSByZXBvcnQ/XCIgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vZG90bmV0cmVwb3J0LmNvbS9ibG9ncy9kb2NzL2Rlc2lnbmluZy1yZXBvcnRzXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGVcIj48L3NwYW4+PC9hPiBEZXNpZ24geW91ciBSZXBvcnRcclxuICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6IG9uTW9kYWxDbG9zZUNsaWNrZWRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IG5lZWRzLXZhbGlkYXRpb25cIiBzdHlsZT1cIm92ZXJmbG93LXk6IGF1dG87IGZsZXgtZ3JvdzogMTtcIj5cclxuICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIiBpZD1cImNob29zZS1kYXRhLWNhcmRcIiAgc3R5bGU9XCJtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjAwcHgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvaT4gUmVwb3J0IE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVwiUmVwb3J0IE5hbWVcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUmVwb3J0TmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT48c3BhbiBjbGFzcz1cImZhIGZhLWRhdGFiYXNlXCI+PC9zcGFuPiZuYnNwO0Nob29zZSBEYXRhIGZvciBSZXBvcnQ8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ2Rlc2lnbmVyLWNob29zZS1kYXRhJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mby1jaXJjbGVcIj48L2k+IFJlcG9ydCBEZXNjcmlwdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiByb3dzPVwiM1wiIHBsYWNlaG9sZGVyPVwiQWRkaXRpb25hbCBkZXRhaWxzIChvcHRpb25hbClcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogUmVwb3J0RGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBDYW5TYXZlUmVwb3J0cygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2F2ZVJlcG9ydFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlIFJlcG9ydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsIGg2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyLW9wZW5cIj48L2k+IENob29zZSBGb2xkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogRm9sZGVycywgb3B0aW9uc1RleHQ6ICdGb2xkZXJOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCB2YWx1ZTogRm9sZGVySURcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9zcGFuPiZuYnNwO0Nob29zZSBWaXN1YWxpemF0aW9uPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdy14OiBhdXRvOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1jaG9vc2UtdmlzdWFsJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogaXNGdW5jdGlvbkZpZWxkXCIgY2xhc3M9XCJjdXN0b20tZmllbGQtZGVzaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcHVsbC1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSBDdXN0b20gRnVuY3Rpb24gRmllbGRcIiBkYXRhLWJpbmQ9XCJjbGljazogc2F2ZUZ1bmN0aW9uRmllbGQsIHZpc2libGU6IGlzRnVuY3Rpb25GaWVsZFwiPlNhdmU8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJDdXN0b20gRmllbGQgdXNpbmcgRnVuY3Rpb25cIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXtpc0Z1bmN0aW9uRmllbGQoIWlzRnVuY3Rpb25GaWVsZCgpKX0sIHRleHQ6IGlzRnVuY3Rpb25GaWVsZCgpPyAnQ2FuY2VsJzogJ0Z1bmN0aW9uJywgY3NzOiB7J2J0bi1wcmltYXJ5JzogIWlzRnVuY3Rpb25GaWVsZCgpLCAnYnRuLWRhbmdlcic6IGlzRnVuY3Rpb25GaWVsZH1cIj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkZWQtZGl2XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNGdW5jdGlvbkZpZWxkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhcmUgbm93IGNyZWF0aW5nIGEgQ3VzdG9taXplZCBGaWVsZCB1c2luZyBGdW5jdGlvbnMgYXZhaWxhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5GaWVsZCBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybXVsYUZpZWxkTGFiZWxcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cIkN1c3RvbSBGaWVsZCBMYWJlbFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1zbS0yIGNvbnRyb2wtbGFiZWxcIj5EYXRhIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZvcm11bGFEYXRhRm9ybWF0XCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPlN0cmluZzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5JbnRlZ2VyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkRlY2ltYWw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+Q3VycmVuY3k8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24+RGF0ZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRhdGVUaW1lXCI+RGF0ZSBhbmQgVGltZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZm9ybXVsYURhdGFGb3JtYXQoKSA9PSAnRGVjaW1hbCcgfHwgZm9ybXVsYURhdGFGb3JtYXQoKSA9PSAnQ3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLXNtLTIgY29udHJvbC1sYWJlbFwiPlJvdW5kIHRvIERlY2ltYWwgUGxhY2VzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZm9ybXVsYURlY2ltYWxQbGFjZXNcIiBwbGFjZWhvbGRlcj1cIkNob29zZSBEZWNpbWFsIHBsYWNlcyAobGVhdmUgYmxhbmsgdG8gbm90IHVzZSByb3VuZGluZylcIiB0aXRsZT1cIkNob29zZSBEZWNpbWFsIHBsYWNlcyAobGVhdmUgYmxhbmsgdG8gbm90IHVzZSByb3VuZGluZylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZpbmUgeW91ciBGdW5jdGlvbjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmdW5jdGlvbi1jb2RlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGxhc3RQaWNrZWRGaWVsZCgpICYmIGxhc3RQaWNrZWRGaWVsZCgpLmZpZWxkVHlwZSA9PSAnSnNvbidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNj5TZWxlY3QgRGF0YSBGaWVsZHMgZnJvbSA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBsYXN0UGlja2VkRmllbGQoKS5maWVsZE5hbWVcIj48L3NwYW4+PC9oNj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgY29udGFpbmVyLWZsdWlkXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDoganNvbkZpZWxkc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tNCBjb2wteHMtNiBsaXN0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWRJbkFycmF5OiB7YXJyYXk6ICRwYXJlbnQuU2VsZWN0ZWRGaWVsZHMsIHZhbHVlOiAkZGF0YX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDoganNvbkNvbHVtbk5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJjdXN0b21GaWVsZFNlY3Rpb25cIiBkYXRhLWJpbmQ9XCJpZjogaXNGb3JtdWxhRmllbGRcIiBjbGFzcz1cImN1c3RvbS1maWVsZC1kZXNpZ25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkJ1aWxkIEN1c3RvbSBGaWVsZDwvYj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ2N1c3RvbS1maWVsZC1kZXNpZ25lcidcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwiY29sLTggcHVsbC1sZWZ0XCI+PHNwYW4gY2xhc3M9XCJmYSBmYS10YWJsZVwiPjwvc3Bhbj4mbmJzcDtTZWxlY3RlZCBkYXRhIGZvciB0aGUgUmVwb3J0PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgcHVsbC1yaWdodCByaWdodC1hbGlnblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiI1wiIGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZFwiIGRhdGEtYmluZD1cInZpc2libGU6IFNlbGVjdGVkRmllbGRzKCkubGVuZ3RoLCBjbGljazogZnVuY3Rpb24oKSB7U2VsZWN0ZWRGaWVsZHMoW10pO31cIj5DbGVhciBhbGw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc2VsZWN0ZWQtZGF0YSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGxpbmtlZFJlcG9ydEZpZWxkcygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgbWItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBiZy1saWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1iLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1ib29rbWFya1wiPjwvaT4gSW5jbHVkZSBTdWIgUmVwb3J0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc3ViLXJlcG9ydCdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdIdG1sJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJnLWxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibWItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBlbmNpbFwiPjwvaT4gRGVzaWduIHlvdXIgUmVwb3J0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdkZXNpZ25lci1odG1sJ1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIEZpbHRlcnM8L2g1PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cInBhZGRpbmc6IDEwcHggMTBweDsgb3ZlcmZsb3cteDogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiB1c2VTdG9yZWRQcm9jXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdmaWx0ZXItcGFyYW1ldGVycyd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogdXNlU3RvcmVkUHJvY1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHtuYW1lOiAnZmlsdGVyLWdyb3VwJ31cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogRWRpdEZpbHRlcnNPblJlcG9ydFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvdyBzZXR0aW5nIHVwIGFuZCBzYXZpbmcgZmlsdGVycyBvbiBSZXBvcnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaGlkZGVuOiB1c2VTdG9yZWRQcm9jXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1PjxzcGFuIGNsYXNzPVwiZmEgZmEtc29ydFwiPjwvc3Bhbj4mbmJzcDtDaG9vc2UgU29ydGluZzwvaDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItc29ydCdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IFNhdmVSZXBvcnRcIiBjbGFzcz1cImNhcmQgY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+PHNwYW4gY2xhc3M9XCJmYSBmYS1ob3VyZ2xhc3NcIj48L3NwYW4+Jm5ic3A7Q2hvb3NlIFNjaGVkdWxlPC9oNT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZzogMTBweCAxMHB4XCIgZGF0YS1iaW5kPVwiaWY6IFNhdmVSZXBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ3JlcG9ydC1zY2hlZHVsZSd9XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmbm90OiB1c2VTdG9yZWRQcm9jXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAnZGVzaWduZXItb3B0aW9ucydcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogYWRtaW5Nb2RlXCIgY2xhc3M9XCJjYXJkIGNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZToge25hbWU6ICdtYW5hZ2UtYWNjZXNzLXRlbXBsYXRlJywgZGF0YTogbWFuYWdlQWNjZXNzfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBhZG1pbk1vZGUsIGNsaWNrOiBSdW5SZXBvcnRTcWxQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jb2RlXCI+PC9pPiBQcmV2aWV3IFJlcG9ydCBDb2RlXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiBjYW5jZWxDcmVhdGVSZXBvcnRcIj5DYW5jZWwgZWRpdGluZyBSZXBvcnQ8L2E+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYmluZD1cInZpc2libGU6IFNhdmVSZXBvcnQoKSAmJiBDYW5TYXZlUmVwb3J0cygpLCBjbGljazogU2F2ZVdpdGhvdXRSdW5cIiBzdHlsZT1cInBhZGRpbmctcmlnaHQ6IDEwcHg7XCI+U2F2ZSBSZXBvcnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1iaW5kPVwidGV4dDogU2F2ZVJlcG9ydCgpICYmIENhblNhdmVSZXBvcnRzKCk/ICdTYXZlICYgUnVuIFJlcG9ydCc6ICdSdW4gUmVwb3J0JywgY2xpY2s6IFJ1blJlcG9ydFwiPlJ1biBSZXBvcnQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJjaGFydC1zZXR0aW5nc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNoYXJ0LWNvbnRhaW5lciBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMiBjaGFydC1zZXR0aW5ncy1idG5cIlxyXG4gICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZUNoYXJ0U2V0dGluZ3NcIiB0aXRsZT1cIlJlcG9ydCBzZXR0aW5nc1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZ1wiPjwvaT5cclxuICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNoYXJ0LXNldHRpbmdzLXBhbmVsIGJvcmRlciBwLTIgc2hhZG93LXNtIGJnLWxpZ2h0XCIgZGF0YS1iaW5kPVwidmlzaWJsZTogc2hvd1NldHRpbmdzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1jbG9zZVwiIGRhdGEtYmluZD1cImNsaWNrOiB0b2dnbGVDaGFydFNldHRpbmdzXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtYi0wXCI+UmVwb3J0IFNldHRpbmdzPC9oNj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXNtIG1iLTIgc21hbGxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZSdcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJ0YWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaHJlZjogJyNjaGFydFRhYi0nICsgUmVwb3J0SUQoKSB9LCBjc3M6IHsgYWN0aXZlOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDaGFydFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJhdHRyOiB7IGhyZWY6ICcjdGFibGVUYWItJyArIFJlcG9ydElEKCkgfSwgY3NzOiB7IGFjdGl2ZTogIShSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVcclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgc21hbGxcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItcGFuZSBmYWRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogJ2NoYXJ0VGFiLScgKyBSZXBvcnRJRCgpIH0sIGNzczogeyAnc2hvdyBhY3RpdmUnOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXBcIiByb2xlPVwiZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIHRpdGxlPVwiQmFyIENoYXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY3NzOiB7ICdhY3RpdmUnOiBSZXBvcnRUeXBlKCkgPT09ICdCYXInIH0sIGNsaWNrOiBmdW5jdGlvbigpIHsgUmVwb3J0VHlwZSgnQmFyJyk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWJhci1jaGFydFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0XCIgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgdGl0bGU9XCJQaWUgQ2hhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6IHsgJ2FjdGl2ZSc6IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfSwgY2xpY2s6IGZ1bmN0aW9uKCkgeyBSZXBvcnRUeXBlKCdQaWUnKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGllLWNoYXJ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiB0aXRsZT1cIkxpbmUgQ2hhcnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjc3M6IHsgJ2FjdGl2ZSc6IFJlcG9ydFR5cGUoKSA9PT0gJ0xpbmUnIH0sIGNsaWNrOiBmdW5jdGlvbigpIHsgUmVwb3J0VHlwZSgnTGluZScpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1saW5lLWNoYXJ0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nQmFyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYmFyQ2hhcnRIb3Jpem9udGFsXCIgLz4gSG9yaXpvbnRhbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveCBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYmFyQ2hhcnRTdGFja2VkXCIgLz4gU3RhY2tlZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCk9PSdQaWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBwaWVDaGFydERvbnV0XCIgLz4gRG9udXQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogUmVwb3J0VHlwZSgpPT0nTGluZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGxpbmVDaGFydEFyZWFcIiAvPiBBcmVhPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsXCI+QmFja2dyb3VuZCBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLmJhY2tncm91bmRDb2xvciwgYXR0cjogeyBwbGFjZWhvbGRlcjogJ1NlbGVjdCcgfSwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5Gb250IENvbG9yPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZmxleC13cmFwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogY2hhcnRPcHRpb25zKCkuZm9udENvbG9yLCBhdHRyOiB7IHBsYWNlaG9sZGVyOiAnU2VsZWN0JyB9LCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPlNlcmllcyBDb2xvcnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtd3JhcFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IGNoYXJ0T3B0aW9ucygpLnNlcmllc0NvbG9yc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbG9yLWJveCBtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6ICRkYXRhLCBldmVudDogeyBpbnB1dDogZnVuY3Rpb24oZGF0YSwgZXZlbnQpIHsgJHBhcmVudC51cGRhdGVTZXJpZXNDb2xvcigkaW5kZXgoKSwgZXZlbnQudGFyZ2V0LnZhbHVlKTsgfSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlciByZW1vdmUtY29sb3JcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5yZW1vdmVTZXJpZXNDb2xvclwiPiZ0aW1lczs8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbG9yLWJveCBidG4gYnRuLXNtIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkU2VyaWVzQ29sb3JcIiB0aXRsZT1cIkFkZCBTZXJpZXMgQ29sb3JcIiBzdHlsZT1cIm1hcmdpbi10b3A6IC03cHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPkxlZ2VuZCBQb3NpdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3QgZm9ybS1zZWxlY3Qtc21cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogY2hhcnRPcHRpb25zKCkubGVnZW5kUG9zaXRpb24sIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlQ2hhcnQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJyaWdodFwiPlJpZ2h0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInRvcFwiPlRvcDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJib3R0b21cIj5Cb3R0b208L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibm9uZVwiPk5vbmU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5Gb250IFNpemU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZm9udC1zaXplLWlucHV0XCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLmZvbnRTaXplLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkhPSdQaWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFydE9wdGlvbnMoKS5zaG93WEF4aXNMYWJlbCwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+WC1BeGlzIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFydE9wdGlvbnMoKS5zaG93WUF4aXNMYWJlbCwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+WS1BeGlzIExhYmVsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBSZXBvcnRUeXBlKCkgIT09ICdQaWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogY2hhcnRPcHRpb25zKCkuc2hvd0dyaWRsaW5lcywgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVDaGFydCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+R3JpZGxpbmVzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHNtYWxsIG1iLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBjaGFydE9wdGlvbnMoKS5zaG93U21hbGxWYWx1ZXNPbkxhYmVsLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5TaG93IFNtYWxsIFZhbHVlcyBPbiBMYWJlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBzbWFsbCBtYi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+WS1BeGlzIEZvcm1hdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBwbGFjZWhvbGRlcj1cIiMsIyMwLjAwXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLnlBeGlzRm9ybWF0LCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZUNoYXJ0IH1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgc21hbGwgbWItMSBkLWZsZXggZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlktQXhpcyBNaW48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLnlNaW4sIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlQ2hhcnQgfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTUwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlktQXhpcyBNYXg8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgZGF0YS1iaW5kPVwidmFsdWU6IGNoYXJ0T3B0aW9ucygpLnlNYXgsIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlQ2hhcnQgfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXBhbmUgZmFkZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICd0YWJsZVRhYi0nICsgUmVwb3J0SUQoKSB9LCBjc3M6IHsgJ3Nob3cgYWN0aXZlJzogIShSZXBvcnRUeXBlKCkgPT09ICdCYXInIHx8IFJlcG9ydFR5cGUoKSA9PT0gJ1BpZScgfHwgUmVwb3J0VHlwZSgpID09PSAnTGluZScpIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5IZWFkZXIgQmFjayBDb2xvcjwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICd0YmwtY29sb3ItcGlja2VyLScgKyBSZXBvcnRJRCgpfSAsIHZhbHVlOiB0YWJsZVNldHRpbmdzKCkuaGVhZGVyQmFja0NvbG9yLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZVRhYmxlIH1cIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMiBjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPkhlYWRlciBGb250IENvbG9yPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY29sb3JcIiBjbGFzcz1cImNvbG9yLXBpY2tlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogJ3RibC1jb2xvci1waWNrZXItJyArIFJlcG9ydElEKCl9ICx2YWx1ZTogdGFibGVTZXR0aW5ncygpLmhlYWRlckZvbnRDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5Sb3cgQmFjayBDb2xvcjwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImF0dHI6IHsgaWQ6ICd0YmwtY29sb3ItcGlja2VyLScgKyBSZXBvcnRJRCgpfSAsdmFsdWU6IHRhYmxlU2V0dGluZ3MoKS5yb3dCYWNrQ29sb3IsIGV2ZW50OiB7IGNoYW5nZTogdXBkYXRlVGFibGUgfVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsXCI+Um93IEZvbnQgQ29sb3I8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJhdHRyOiB7IGlkOiAndGJsLWNvbG9yLXBpY2tlci0nICsgUmVwb3J0SUQoKX0gLHZhbHVlOiB0YWJsZVNldHRpbmdzKCkucm93Rm9udENvbG9yLCBldmVudDogeyBjaGFuZ2U6IHVwZGF0ZVRhYmxlIH1cIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5BbHQgUm93IEJhY2sgQ29sb3I8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ2YWx1ZTogdGFibGVTZXR0aW5ncygpLmFsdFJvd0JhY2tDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgc21hbGxcIj5BbHQgUm93IEZvbnQgQ29sb3I8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjb2xvclwiIGNsYXNzPVwiY29sb3ItcGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJ2YWx1ZTogdGFibGVTZXR0aW5ncygpLmFsdFJvd0ZvbnRDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCBtYi0yXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIHNtYWxsXCI+Qm9yZGVyczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tZ3JvdXAgZC1mbGV4IGZsZXgtd3JhcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbGV4LWZpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKXsgdGFibGVTZXR0aW5ncygpLmJvcmRlcignbm9uZScpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnbm9uZScgfVwiPk5vbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxleC1maWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCl7IHRhYmxlU2V0dGluZ3MoKS5ib3JkZXIoJ2FsbCcpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnYWxsJyB9XCI+QWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsZXgtZmlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyB0YWJsZVNldHRpbmdzKCkuYm9yZGVyKCdvdXRlcicpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnb3V0ZXInIH1cIj5PdXRzaWRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGZsZXgtZmlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyB0YWJsZVNldHRpbmdzKCkuYm9yZGVyKCdpbm5lcicpOyB1cGRhdGVUYWJsZSgpOyB9LCBjc3M6IHsgYWN0aXZlOiB0YWJsZVNldHRpbmdzKCkuYm9yZGVyID09PSAnaW5uZXInIH1cIj5JbnNpZGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGNvbC02XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBzbWFsbFwiPkJvcmRlciBDb2xvcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNvbG9yXCIgY2xhc3M9XCJjb2xvci1waWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6IHRhYmxlU2V0dGluZ3MoKS5ib3JkZXJDb2xvciwgZXZlbnQ6IHsgY2hhbmdlOiB1cGRhdGVUYWJsZSB9XCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTIgY29sLTYgZC1mbGV4IGFsaWduLWl0ZW1zLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIHNtYWxsIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBjbGVhclRhYmxlU2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkcmlsbGRvd25Nb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBDaGFydERyaWxsRG93bkRhdGFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EcmlsbGRvd24gRGF0YTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBwdWxsLXJpZ2h0XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwhLS0ga28gaWY6IERyaWxsRG93bkRhdGEgLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgbWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBEcmlsbERvd25EYXRhLCBhdHRyOiB7Y2xhc3M6ICd0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLWNvbmRlbnNlZCAnICsgJHBhcmVudC5zZWxlY3RlZFN0eWxlKCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZCBzdHlsZT1cInBvc2l0aW9uOiBzdGlja3k7IHRvcDogLTFweDsgei1pbmRleDogMjtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIm5vLWhpZ2hsaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogQ29sdW1ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggZGF0YS1iaW5kPVwiYXR0cjogeyBpZDogZmllbGRJZCB9LCBjc3M6IHsncmlnaHQtYWxpZ24nOiBJc051bWVyaWN9LCBzdHlsZTogeyd3aWR0aCc6IGZpZWxkV2lkdGgsICdiYWNrZ3JvdW5kLWNvbG9yJzogaGVhZGVyQmFja0NvbG9yIH0sIGhpZGRlbjogb3V0ZXJHcm91cFwiIHN0eWxlPVwiYm9yZGVyLXJpZ2h0OiAxcHggc29saWQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpZWxkTGFiZWwyKCkgPyBmaWVsZExhYmVsMigpIDogKGZpZWxkTGFiZWwoKSA/IGZpZWxkTGFiZWwoKSA6IGZpZWxkTmFtZSksIHN0eWxlOiB7J2NvbG9yJzogaGVhZGVyRm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBoZWFkZXJGb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCd9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IFJvd3MgJiYgUm93cy5sZW5ndGggPCAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImF0dHI6e2NvbHNwYW46IENvbHVtbnMubGVuZ3RofVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByZWNvcmRzIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGZvcmVhY2g6IFJvd3MgIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0ga28gZm9yZWFjaDogSXRlbXMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGRhdGEtYmluZD1cImhpZGRlbjogb3V0ZXJHcm91cCwgc3R5bGU6IHsnYmFja2dyb3VuZC1jb2xvcic6IGJhY2tDb2xvciwgJ2NvbG9yJzogZm9udENvbG9yLCAnZm9udC13ZWlnaHQnOiBmb250Qm9sZCgpID8gJ2JvbGQnIDogJ25vcm1hbCcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInN0eWxlOiB7J3dpZHRoJzogZmllbGRXaWR0aCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmOiBMaW5rVG8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYmluZD1cImF0dHI6IHtocmVmOiBMaW5rVG99XCIgdGFyZ2V0PVwiX2JsYW5rXCI+PHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogZm9ybWF0dGVkVmFsXCI+PC9zcGFuPjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGtvIGlmbm90OiBMaW5rVG8tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImh0bWw6IGZvcm1hdHRlZFZhbFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gL2tvLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAva28tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1jZW50ZXJlZFwiIGRhdGEtYmluZD1cIndpdGg6IHBhZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0taW5saW5lIHNtYWxsIHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtbGVmdCB0b3RhbC1yZWNvcmRzXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogcGFnZXMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJ1RvdGFsIFJlY29yZHM6ICcgKyB0b3RhbFJlY29yZHMoKVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXhzXCIgdGl0bGU9XCJEb3dubG9hZCBFeGNlbFwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LmV4cG9ydEV4Y2VsXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1maWxlLWV4Y2VsLW9cIj48L3NwYW4+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI3NxbERyaWxsRG93bk1vZGFsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuYWRtaW5Nb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jb2RlXCI+PC9zcGFuPiBWaWV3IENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcHVsbC1yaWdodFwiIGRhdGEtYmluZD1cInZpc2libGU6IHBhZ2VzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6ICdwYWdlci10ZW1wbGF0ZScsIGRhdGE6ICRkYXRhXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIC9rbyAtLT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwic3FsTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5SZXBvcnQgQ29kZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeSBidG4tc20gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbihkYXRhLCBldmVudCkgeyBjb3B5U3FsVG9DbGlwYm9hcmQoZXZlbnQudGFyZ2V0KTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xpcGJvYXJkXCI+PC9pPiZuYnNwO0NvcHlcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgcHVsbC1yaWdodFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIGRhdGEtYmluZD1cIndpdGg6IFJlcG9ydFJlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cInJlcG9ydFNxbENvZGVcIiBzdHlsZT1cIm92ZXJmbG93LXg6IGF1dG87IG1heC1oZWlnaHQ6IDUwMHB4OyBvdmVyZmxvdy15OiBzY3JvbGw7IGJvcmRlcjogMXB4IHNvbGlkOyBwYWRkaW5nOiAxMHB4O1wiIGNsYXNzPVwiYmctZGFyayB0ZXh0LWxpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZT48Y29kZSBkYXRhLWJpbmQ9XCJodG1sOiBSZXBvcnRTcWxcIiBzdHlsZT1cIndoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj48L2NvZGU+PC9wcmU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInNxbERyaWxsRG93bk1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6Q2hhcnREcmlsbERvd25EYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5EcmlsbCBEb3duIFJlcG9ydCBDb2RlPC9oND5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKGRhdGEsIGV2ZW50KSB7IGNvcHlTcWxUb0NsaXBib2FyZChldmVudC50YXJnZXQpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jbGlwYm9hcmRcIj48L2k+Jm5ic3A7Q29weVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBwdWxsLXJpZ2h0XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCIgZGF0YS1iaW5kPVwid2l0aDpEcmlsbERvd25EYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicmVwb3J0U3FsQ29kZVwiIHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgbWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IHNjcm9sbDsgYm9yZGVyOiAxcHggc29saWQ7IHBhZGRpbmc6IDEwcHg7XCIgY2xhc3M9XCJiZy1kYXJrIHRleHQtbGlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cHJlPjxjb2RlIGRhdGEtYmluZD1cImh0bWw6IFJlcG9ydFNxbFwiIHN0eWxlPVwid2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPjwvY29kZT48L3ByZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJub2FjY291bnRNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BY2NvdW50IG5vdCBTZXR1cDwvaDQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIj5kb3RuZXQgUmVwb3J0IEFjY291bnQgQ29uZmlndXJhdGlvbiBtaXNzaW5nITwvcD5cclxuICAgICAgICAgICAgICAgIDxwPllvdSBkbyBub3QgaGF2ZSB0aGUgbmVjY2Vzc2FyeSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gY29tcGxldGVkIHRvIHVzZSBkb3RuZXQgUmVwb3J0LjwvcD5cclxuICAgICAgICAgICAgICAgIDxwPlBsZWFzZSB2aWV3IHRoZSA8YSBocmVmPVwiaHR0cHM6Ly9kb3RuZXRyZXBvcnQuY29tL2Jsb2dzL2dldHRpbmctc3RhcnRlZC13aXRoLWRvdG5ldC1yZXBvcnQvXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R2V0dGluZyBTdGFydGVkIEd1aWRlPC9hPiB0byBjb3JyZWN0bHkgY29uZmlndXJlIGRvdG5ldCBSZXBvcnQuPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInBkZi1vcHRpb25zLXNjaGVkdWxlLXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogUGRmUGFnZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwicGRmT3B0aW9uc1NjaGVkdWxlTW9kYWxMYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1wZGYtbyBtZS0yXCI+PC9pPiBTZXQgUERGIFBhZ2UgU2l6ZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHJvdyBnLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUERGIHdpbGwgYmUgZXhwb3J0ZWQgdXNpbmcgdGhlIHNlbGVjdGVkIHBhZ2Ugc2l6ZS4gRW5zdXJlIHlvdXIgY29udGVudCBmaXRzIHdlbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb250ZW50IHdpZHRoIGV4Y2VlZHMgdGhlIHNlbGVjdGVkIHNpemUsIGl0IHdpbGwgZGVmYXVsdCB0byBMZXR0ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cIndvcmQtb3B0aW9ucy1zY2hlZHVsZS10ZW1wbGF0ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IFdvcmRQYWdlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJwZGZPcHRpb25zU2NoZWR1bGVNb2RhbExhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLXBkZi1vIG1lLTJcIj48L2k+IFNldCBXT1JEIFBhZ2UgU2l6ZVxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHJvdyBnLTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgV09SRCB3aWxsIGJlIGV4cG9ydGVkIHVzaW5nIHRoZSBzZWxlY3RlZCBwYWdlIHNpemUuIEVuc3VyZSB5b3VyIGNvbnRlbnQgZml0cyB3ZWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29udGVudCB3aWR0aCBleGNlZWRzIHRoZSBzZWxlY3RlZCBzaXplLCBpdCB3aWxsIGRlZmF1bHQgdG8gTGV0dGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgIFNhdmVcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuPHNjcmlwdCB0eXBlPVwidGV4dC9odG1sXCIgaWQ9XCJ3b3JkLW9wdGlvbnMtdGVtcGxhdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogV29yZFBhZ2VcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIndvcmRPcHRpb25zTW9kYWxMYWJlbFwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsZS1wZGYtbyBtZS0yXCI+PC9pPiBFeHBvcnQgdG8gV09SRDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSByb3cgZy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExlZnQgU2lkZTogUGFnZSBQcmV2aWV3IFNWRyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBGb3JtIE9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgV29yZCB3aWxsIGJlIGV4cG9ydGVkIHVzaW5nIHRoZSBzZWxlY3RlZCBwYWdlIHNpemUuIEVuc3VyZSB5b3VyIGNvbnRlbnQgZml0cyB3ZWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJZiB0aGUgY29udGVudCB3aWR0aCBleGNlZWRzIHRoZSBzZWxlY3RlZCBzaXplLCBpdCB3aWxsIGRlZmF1bHQgdG8gTGV0dGVyLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHRcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGRhdGEtYmluZD1cImNsaWNrOiBkb3dubG9hZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWQgbWUtMVwiPjwvaT4gRG93bmxvYWQgV09SRFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvc2NyaXB0PlxyXG48c2NyaXB0IHR5cGU9XCJ0ZXh0L2h0bWxcIiBpZD1cInBkZi1vcHRpb25zLXRlbXBsYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogUGRmUGFnZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwicGRmT3B0aW9uc01vZGFsTGFiZWxcIj48aSBjbGFzcz1cImZhIGZhLWZpbGUtcGRmLW8gbWUtMlwiPjwvaT4gRXhwb3J0IHRvIFBERjwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSByb3cgZy0wXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIExlZnQgU2lkZTogUGFnZSBQcmV2aWV3IFNWRyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNSBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicGFnZVByZXZpZXdCb3hcIiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwic3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzZWxlY3RlZFdpZHRoKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHNlbGVjdGVkSGVpZ2h0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHNlbGVjdGVkQmFja2dyb3VuZFN0eWxlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uOiAnYWxsIDAuM3MgZWFzZSdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzaGFkb3cgcm91bmRlZCBteC1hdXRvIG1iLTIgYm9yZGVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC01MCBzdGFydC01MCB0cmFuc2xhdGUtbWlkZGxlIHRleHQtbXV0ZWQgc21hbGxcIj5QcmV2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZXh0OiBzZWxlY3RlZFBhZ2VMYWJlbFwiIGNsYXNzPVwiZnctYm9sZFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IHNlbGVjdGVkUGFnZURpbWVuc2lvblwiIGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBGb3JtIE9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgU2l6ZTo8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInBhZ2VTaXplU2VsZWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVQYWdlU2l6ZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zVGV4dDogJ2xhYmVsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNWYWx1ZTogJ3ZhbHVlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzZWxlY3RlZFBhZ2VTaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIiBjbGFzcz1cImZvcm0tbGFiZWwgZnctYm9sZFwiPlBhZ2UgT3JpZW50YXRpb246PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJwYWdlT3JpZW50YXRpb25TZWxlY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZVBhZ2VPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnNUZXh0OiAnbGFiZWwnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1ZhbHVlOiAndmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHNlbGVjdGVkUGFnZU9yaWVudGF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1pbmZvIHAtMiBzbWFsbCBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgUERGIHdpbGwgYmUgZXhwb3J0ZWQgdXNpbmcgdGhlIHNlbGVjdGVkIHBhZ2Ugc2l6ZS4gRW5zdXJlIHlvdXIgY29udGVudCBmaXRzIHdlbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSBjb250ZW50IHdpZHRoIGV4Y2VlZHMgdGhlIHNlbGVjdGVkIHNpemUsIGl0IHdpbGwgZGVmYXVsdCB0byBMZXR0ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc3VjY2Vzc1wiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGRvd25sb2FkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZCBtZS0xXCI+PC9pPiBEb3dubG9hZCBQREZcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L3NjcmlwdD5cclxuYCk7XHJcbiAgdGhpcy5jZHJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbn1cclxuXHJcbn1cclxuIiwiPGRpdiBpZD1cImRvdC1uZXQtcmVwb3J0XCIgY2xhc3M9XCJib2R5LWNvbnRlbnRcIj5cclxuXHJcbjxkaXY+XHJcbiAgICA8aDI+TWFuYWdlIERhdGFiYXNlPC9oMj5cclxuICAgIDxwPlxyXG4gICAgICAgIFlvdSBjYW4gc2VsZWN0IGFuZCBtYW5hZ2UgZGlzcGxheSBuYW1lcyBmb3IgdGhlIFRhYmxlcyBhbmQgQ29sdW1ucyB5b3Ugd291bGQgbGlrZSB0byBhbGxvdyBpbiBEb3RuZXQgUmVwb3J0IEJ1aWxkZXIuXHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICBEbyBub3QgZXhwb3NlIHRoaXMgU2V0dXAgVG9vbCB0byBlbmQgdXNlcnMgd2hvIHNob3VsZCBub3QgaGF2ZSBhY2Nlc3MgdG8gaXQuIElkZWFsbHksIG9ubHkgRGV2ZWxvcGVycyBzaG91bGQgYmUgZ2l2ZW4gYWNjZXNzIHRvIHRoaXMgdXRpbGl0eS5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1zLTNcIiBkYXRhLWJpbmQ9XCJjbGljazogcmVmcmVzaEFsbFwiIHRpdGxlPVwiUmVsb2FkIGFsbCBUYWJsZSBhbmQgQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+IFJlZnJlc2hcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2U7XCI+XHJcbiAgICAgICAgTG9hZGluZy4uLlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8IS0tIE5hdiB0YWJzIC0tPlxyXG4gICAgICAgIDx1bCBjbGFzcz1cIm5hdiBuYXYtdGFicyBmbGV4LWdyb3ctMVwiIHJvbGU9XCJ0YWJsaXN0XCI+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI3RhYmxlc2ZpZWxkc1wiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjdXN0b21UYWJsZU1vZGUoZmFsc2UpOyBhY3RpdmVUYWJsZShudWxsKTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvaT4gRGF0YWJhc2UgVGFibGVzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjdGFibGVzZmllbGRzXCIgYXJpYS1jb250cm9scz1cImN1c3RvbVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgY3VzdG9tVGFibGVNb2RlKHRydWUpOyBhY3RpdmVUYWJsZShudWxsKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L2k+IEN1c3RvbSBUYWJsZXNcclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNyZWxhdGlvbnNcIiBhcmlhLWNvbnRyb2xzPVwicHJvZmlsZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtbGlua1wiPjwvaT4gUmVsYXRpb25zXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjcHJvY2VkdXJlXCIgYXJpYS1jb250cm9scz1cInByb2NlZHVyZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY29kZVwiPjwvaT4gU3RvcmVkIFByb2NzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjc2NoZWR1bGVzXCIgYXJpYS1jb250cm9scz1cInNjaGVkdWxlc1wiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2xvY2stb1wiPjwvaT4gU2NoZWR1bGVzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwibmF2LWxpbmtcIiBocmVmPVwiI2Z1bmN0aW9uc1wiIGFyaWEtY29udHJvbHM9XCJmdW5jdGlvbnNcIiByb2xlPVwidGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNvZ3NcIj48L2k+IEN1c3RvbSBGdW5jdGlvbnNcclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIm5hdi1saW5rXCIgaHJlZj1cIiNtYW5hZ2VhY2Nlc3NcIiBhcmlhLWNvbnRyb2xzPVwibWFuYWdlYWNjZXNzXCIgcm9sZT1cInRhYlwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1mb2xkZXJcIj48L2k+IE1hbmFnZSBSZXBvcnRzXHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSByb2xlPVwicHJlc2VudGF0aW9uXCIgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29ubmVjdGlvblwiIGFyaWEtY29udHJvbHM9XCJob21lXCIgcm9sZT1cInRhYlwiIGRhdGEtYnMtdG9nZ2xlPVwidGFiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVnXCI+PC9pPiBEYXRhIENvbm5lY3Rpb25cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L3VsPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGJyIC8+XHJcbjwvZGl2PlxyXG48IS0tIFRhYiBwYW5lcyAtLT5cclxuPGRpdiBjbGFzcz1cImZpeC1jb250ZW50XCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGRhdGEtYmluZD1cInZpc2libGU6IHRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWItY29udGVudFwiPlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwiY29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICA8Yj5NYW5hZ2UgRGF0YSBDb25uZWN0aW9uPC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIERhdGEgQ29ubmVjdGlvbiBncm91cHMgZGF0YSBzY2hlbWFzIChpbmNsdWRpbmcgdGFibGVzIGFuZCBzdG9yZWQgcHJvY2VkdXJlcyBhbmQgb3RoZXIgY29uZmlndXJhdGlvbiksIFJlcG9ydHMsIGFuZCBEYXNoYm9hcmRzIGludG8gYSBzaW5nbGUgZW52aXJvbm1lbnQuIFlvdSBjYW4gY3JlYXRlIG11bHRpcGxlIERhdGEgQ29ubmVjdGlvbnMgYW5kIGVhc2lseSBzd2l0Y2ggYmV0d2VlbiB0aGVtIGZvciBzZXBhcmF0ZSBlbnZpcm9ubWVudCBtYW5hZ2VtZW50LlxyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxociAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIHN0eWxlPVwid2lkdGg6MjUlXCIgZGF0YS1iaW5kPVwib3B0aW9uczogRGF0YUNvbm5lY3Rpb25zLCBvcHRpb25zVGV4dDogJ0RhdGFDb25uZWN0TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0RhdGFDb25uZWN0R3VpZCcsIHZhbHVlOiBjdXJyZW50Q29ubmVjdGlvbktleVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFkZGVkLXRvcFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cInZpc2libGU6IGZhbHNlXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2Nvbm5lY3Rpb24tc2V0dXAtbW9kYWxcIj5NYW5hZ2UgREIgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBzd2l0Y2hDb25uZWN0aW9uLCB2aXNpYmxlOiBjYW5Td2l0Y2hDb25uZWN0aW9uXCI+U3dpdGNoIENvbm5lY3Rpb248L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogZWRpdERhdGFDb25uZWN0aW9uTW9kYWwsIGhpZGRlbjogY2FuU3dpdGNoQ29ubmVjdGlvblwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNhZGQtY29ubmVjdGlvbi1tb2RhbFwiPkVkaXQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBuZXdEYXRhQ29ubmVjdGlvbk1vZGFsXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2FkZC1jb25uZWN0aW9uLW1vZGFsXCI+QWRkIE5ldyBDb25uZWN0aW9uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGV4cG9ydEFsbCwgdmlzaWJsZTogZmFsc2VcIj5FeHBvcnQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBpbXBvcnRTdGFydCwgdmlzaWJsZTogZmFsc2VcIj5JbXBvcnQgQ29ubmVjdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogaW1wb3J0aW5nRmlsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSBmaWxlIHlvdSBoYXZlIHByZXZpb3VzbHkgZXhwb3J0ZWQgZnJvbSB0aGlzIHV0aWxpdHkuIFRoZSBzeXN0ZW0gd2lsbCBsb2FkIHRoZSBzY3JlZW4gd2l0aCB0aGUgRGF0YSBDb25uZWN0aW9uIHNldHRpbmcgaW4gdGhlIGZpbGUsIGhvd2V2ZXIsIGl0IHdpbGwgPGI+Tk9UPC9iPiBiZSBzYXZlZCB1bnRpbCB5b3UgcHJlc3MgdGhlIFNhdmUgQWxsIGJ1dHRvbiBvciBTYXZlIGluZGl2aWR1YWwgdGFibGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cIi5qc29uXCIgaWQ9XCJpbXBvcnQtZmlsZVwiIGRhdGEtYmluZD1cImV2ZW50OiB7IGNoYW5nZTogZnVuY3Rpb24oKSB7IGltcG9ydEZpbGUoJGVsZW1lbnQuZmlsZXNbMF0pIH0gfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1idG5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlua1wiIGRhdGEtYmluZD1cImNsaWNrOiBpbXBvcnRDYW5jZWxcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGI+QWNjb3VudCBMZXZlbCBTZXR0aW5nczwvYj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogc2V0dGluZ3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibXQtMiBtYi0yXCI+QWRtaW4gT3B0aW9uczwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwidXNlQ2xpZW50SWRJbkFkbWluXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogdXNlQ2xpZW50SWRJbkFkbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJ1c2VDbGllbnRJZEluQWRtaW5cIj5Vc2UgQ2xpZW50IElEIGluIEFkbWluIG1vZGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5FbmFibGUgdGhpcyB0byByZXNwZWN0IGNsaWVudCBJRHMgZXZlbiB3aGVuIGluIGFkbWluIG1vZGUuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJ1c2VTcWxCdWlsZGVySW5BZG1pbk1vZGVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTcWxCdWlsZGVySW5BZG1pbk1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cInVzZVNxbEJ1aWxkZXJJbkFkbWluTW9kZVwiPlVzZSBTUUwgQnVpbGRlciBpbiBBZG1pbiBNb2RlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+QWxsb3dzIFNRTCBxdWVyeSBidWlsZGVyIGFjY2VzcyA8Yj5vbmx5PC9iPiBpbiBhZG1pbiBtb2RlLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibXQtMyBtYi0yXCI+Q3VzdG9taXphdGlvbjwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwidXNlU3FsQ3VzdG9tRmllbGRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VTcWxDdXN0b21GaWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwidXNlU3FsQ3VzdG9tRmllbGRcIj5Vc2UgU1FMIGluIEN1c3RvbSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPkFsbG93cyB0aGUgdXNlIG9mIFNRTCBleHByZXNzaW9ucyBpbiBjdXN0b20gZmllbGRzLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHVzZVByb21wdEJ1aWxkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlVzZSBBSSBhaWRlZCwgcHJvbXB0IGJhc2VkIFJlcG9ydCBCdWlsZGVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+TGV0IG5vbiBBZG1pbiB1c2VycyBjcmVhdGUgcmVwb3J0cyB1c2luZyB0aGUgQUkgYWlkZWQgUHJvbXB0IGJhc2VkIGJ1aWxkZXI8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiB1c2VBbHRQaXZvdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UGl2b3Qgd2l0aCBEcmlsbGRvd248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5Vc2UgYWx0ZXJuYXRlIFBpdm90IG1ldGhvZCB0aGF0IGRvZXNu4oCZdCB1c2UgU1FM4oCZcyBQSVZPVC48YnI+QWxsb3dzIGRyaWxsZG93biwgYnV0IG1heSBiZSBzbG93ZXIuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtdC0zIG1iLTJcIj5SZXBvcnQgT3B0aW9uczwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwiYWxsb3dVc2Vyc1RvQ3JlYXRlUmVwb3J0c1wiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGFsbG93VXNlcnNUb0NyZWF0ZVJlcG9ydHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiIGZvcj1cImFsbG93VXNlcnNUb0NyZWF0ZVJlcG9ydHNcIj5BbGxvdyBBbGwgVXNlcnMgdG8gQ3JlYXRlIFJlcG9ydHM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5QZXJtaXRzIHVzZXJzIHRvIGdlbmVyYXRlIGFuZCBjdXN0b21pemUgcmVwb3J0cy48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzaG93SW1wb3J0RXhwb3J0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIj5BbGxvdyBBbGwgVXNlcnMgdG8gZXhwb3J0L2ltcG9ydMKgcmVwb3J0czwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3cgbm9uIGFkbWluIHVzZXJzIHRvIGV4cG9ydCBhbmQgaW1wb3J0IFJlcG9ydHMgaW4gdGhlIHN5c3RlbS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg2IGNsYXNzPVwibXQtMiBtYi0yXCI+Rm9sZGVyIE9wdGlvbnM8L2g2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwibm9Gb2xkZXJzXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9Gb2xkZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJub0ZvbGRlcnNcIj5ObyBGb2xkZXJzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+RGlzYWJsZXMgdGhlIHVzZSBvZiBmb2xkZXJzIGluIHRoZSBhcHBsaWNhdGlvbi48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGlkPVwibm9EZWZhdWx0Rm9sZGVyXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogbm9EZWZhdWx0Rm9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIiBmb3I9XCJub0RlZmF1bHRGb2xkZXJcIj5ObyBEZWZhdWx0IEZvbGRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPlJlbW92ZXMgdGhlIERlZmF1bHQgZm9sZGVyLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHNob3dFbXB0eUZvbGRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlNob3cgRW1wdHkgRm9sZGVyczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPldpbGwgc2hvdyBlbXB0eSBmb2xkZXJzIGZvciBub24gYWRtaW4gdXNlcnMuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgaWQ9XCJhbGxvd1VzZXJzVG9NYW5hZ2VGb2xkZXJzXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogYWxsb3dVc2Vyc1RvTWFuYWdlRm9sZGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCIgZm9yPVwiYWxsb3dVc2Vyc1RvTWFuYWdlRm9sZGVyc1wiPkFsbG93IEFsbCBVc2VycyB0byBNYW5hZ2UgRm9sZGVyczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInRleHQtbXV0ZWQgZC1ibG9ja1wiPkdyYW50cyBwZXJtaXNzaW9uIHRvIG9yZ2FuaXplIGFuZCBtYW5hZ2UgZm9sZGVycyB3aXRob3V0IGFkbWluIG1vZGUuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtdC0zIG1iLTJcIj5FeHBvcnQgT3B0aW9uczwvaDY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHVzZUFsdFBkZlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsXCI+UERGIEV4cG9ydCB3aXRob3V0IENocm9taXVtPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+VXNlIGFsdGVybmF0ZSBQREYgZXhwb3J0IG1ldGhvZCB0aGF0IGRvZXNu4oCZdCByZWx5IG9uIENocm9taXVtLjwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGRvbnRYbWxFeHBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPkhpZGUgWE1MIEV4cG9ydCBvcHRpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkIGQtYmxvY2tcIj5SZW1vdmUgWE1MIEV4cG9ydCBvcHRpb24uPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogZG9udFdvcmRFeHBvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPkhpZGUgV29yZCBFeHBvcnQgb3B0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+UmVtb3ZlIFdvcmQgRXhwb3J0IG9wdGlvbi48L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBzaG93UGFnZVNpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbFwiPlNob3cgUGFnZSBTaXplIG9uIFBERiAmIFdvcmQgZXhwb3J0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwidGV4dC1tdXRlZCBkLWJsb2NrXCI+RGlzcGxheSBkb2N1bWVudCBkaW1lbnNpb25zIGluIGV4cG9ydGVkIFBERiAmIFdvcmQuPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cInNhdmVBcHBTZXR0aW5nc1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVBcHBTZXR0aW5nc1wiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZSBhY3RpdmVcIiBpZD1cInRhYmxlc2ZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8YiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjdXN0b21UYWJsZU1vZGUoKSA/ICdDdXN0b20gVGFibGVzJyA6ICdEYXRhYmFzZSBUYWJsZXMnXCI+PC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmN1c3RvbVRhYmxlTW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIERlZmluZSBDdXN0b20gVGFibGVzIHVzaW5nIFNRTCBTZWxlY3QgUXVlcnkgdG8gdXNlIGluIERvdG5ldCBSZXBvcnQgZm9yIFJlcG9ydGluZyBhbmQgQW5hbHl0aWNzLlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaGlkZGVuOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICBTZWxlY3QgVGFibGVzIG9yIFZpZXdzIGZyb20geW91ciBEYXRhYmFzZSB0byB1c2UgaW4gRG90bmV0IFJlcG9ydCBmb3IgUmVwb3J0aW5nIGFuZCBBbmFseXRpY3MuXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvcD5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwid2l0aDogVGFibGVzXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpbnB1dC1zbVwiIHBsYWNlaG9sZGVyPVwiRmlsdGVyIFRhYmxlcy4uLlwiIGRhdGEtYmluZD1cInZhbHVlOiB0YWJsZUZpbHRlciwgdmFsdWVVcGRhdGU6ICdhZnRlcmtleWRvd24nXCIgc3R5bGU9XCJmbG9hdDogbGVmdDsgd2lkdGg6IDE4MHB4OyBtYXJnaW4tcmlnaHQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBjbGVhclRhYmxlRmlsdGVyLCAgdmlzaWJsZTogdGFibGVGaWx0ZXIoKSE9JycgJiYgdGFibGVGaWx0ZXIoKSE9bnVsbFwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtcmVtb3ZlXCI+PC9zcGFuPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1zZWNvbmRhcnkgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IHRvZ2dsZVNob3dBbGwsIGhpZGRlbjogJHJvb3QuY3VzdG9tVGFibGVNb2RlKCkgfHwgJHJvb3Qub25seUFwaSgpLCB0ZXh0OiB1c2VkT25seSgpID8gJ1Nob3cgYWxsJyA6ICdTaG93IHVzZWQgb25seSdcIj5TaG93IHVzZWQgb25seTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QuY3VzdG9tU3FsLmFkZE5ld0N1c3RvbVNxbFRhYmxlLCB2aXNpYmxlOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5BZGQgTmV3IEN1c3RvbSBUYWJsZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QubG9hZEZyb21EYXRhYmFzZSwgaGlkZGVuOiAkcm9vdC5jdXN0b21UYWJsZU1vZGUoKSB8fCAhJHJvb3Qub25seUFwaSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1kYXRhYmFzZVwiPjwvc3Bhbj4gTG9hZCBhbGwgRGF0YWJhc2UgVGFibGVzXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnZpc3VhbGl6ZUpvaW5zXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1hcnJvd3MtaFwiPjwvc3Bhbj4gVmlzdWFsaXplIEpvaW5zPC9idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgZXhwb3J0VGFibGVzSnNvbih0cnVlKSB9LCB2aXNpYmxlOiAkcm9vdC5jdXN0b21UYWJsZU1vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9zcGFuPiBFeHBvcnQgQ3VzdG9tIFRhYmxlc1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgZXhwb3J0VGFibGVzSnNvbihmYWxzZSkgfSwgdmlzaWJsZTogISRyb290LmN1c3RvbVRhYmxlTW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvc3Bhbj4gRXhwb3J0IFRhYmxlcy9WaWV3c1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjdXBsb2FkVGFibGVzRmlsZU1vZGFsXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLWZpbGVcIj48L3NwYW4+IEltcG9ydCBUYWJsZXMvVmlld3NcclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiB0aXRsZT1cIk1hbmFnZSBDYXRlZ29yaWVzXCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI2NhdGVnb3J5LW1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1zZXJ2ZXJcIj48L3NwYW4+IE1hbmFnZSBDYXRlZ29yaWVzXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNlbGVjdEFsbCwgdmlzaWJsZTogISRyb290Lm9ubHlBcGkoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtY2hlY2tcIj48L3NwYW4+IFNlbGVjdCBBbGwgVGFibGVzXHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5zYXZlQ2hhbmdlcygkcm9vdC5jdXN0b21UYWJsZU1vZGUoKSkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW9cIj48L3NwYW4+IFNhdmUgQWxsIFRhYmxlc1xyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuICAgICAgICAgICAgPGhyIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC00IGNvbC1sZy0zIGJvcmRlci1lbmRcIiBzdHlsZT1cImhlaWdodDogMTAwdmg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZm5vdDogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlcy5tb2RlbCgpLmZpbHRlcih0ID0+ICF0LkN1c3RvbVRhYmxlKCkpLmxlbmd0aFwiPjwvc3Bhbj4gVGFibGVzL1ZpZXdzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogJHJvb3Qub25seUFwaSgpID8gJ2NvbmZpZ3VyZWQgYW5kIHVzZWQnIDogJ3JlYWQgZnJvbSBkYXRhYmFzZSdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgZy0zXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogcGFnZWRUYWJsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtY2F0ZWdvcnkgY2FyZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGNsZWFyZml4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94IHB1bGwtbGVmdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogU2VsZWN0ZWRcIiB0aXRsZT1cIkNoZWNrIHRvIHVzZSBpbiBEb3RuZXQgUmVwb3J0LCB1bmNoZWNrIHRvIFJlbW92ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogVGFibGVOYW1lLGF0dHI6IHsgdGl0bGU6IFRhYmxlTmFtZSB9LCBjbGljazogZnVuY3Rpb24oKSB7ICRyb290LmFjdGl2ZVRhYmxlKCRkYXRhKTsgfVwiIGNsYXNzPVwidGFibGUtbmFtZS1sYWJlbFwiIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogSXNWaWV3XCIgY2xhc3M9XCJsYWJlbC1zbVwiPih2aWV3KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0aXRsZT1cIlNhdmUgdGhpcyBUYWJsZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgc2F2ZVRhYmxlKCRyb290LmtleXMuQWNjb3VudEFwaUtleSwgJHJvb3Qua2V5cy5EYXRhYmFzZUFwaUtleSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiUHJldmlldyB0aGlzIFRhYmxlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBwcmV2aWV3VGFibGUoJHJvb3Qua2V5cy5BY2NvdW50QXBpS2V5LCAkcm9vdC5rZXlzLkRhdGFiYXNlQXBpS2V5KTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10YWJsZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5hY3RpdmVUYWJsZSgkZGF0YSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGNvbC1tZC0xMlwiIGRhdGEtYmluZD1cIndpdGg6IHBhZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiAncGFnZXItdGVtcGxhdGUnLCBkYXRhOiAkZGF0YVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMCBwdC0wXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweFwiIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC04IGNvbC1sZy05XCIgaWQ9XCJ0YWJsZURldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInZpc2libGU6IHBhZ2VkVGFibGVzKCkubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6NDBweDtmbG9hdDpsZWZ0O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSB0cmFuc2xhdGVZKDZweCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO1wiIGZpbGw9XCIjMDAwMDAwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gZmxhdC1saW5lXCI+PGcgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCIgc3Ryb2tlLXdpZHRoPVwiMC4wNDhcIj48L2c+PGc+PHBhdGggZD1cIk0xOCwyMUExMy4xNywxMy4xNywwLDAsMSw5LDguNTFWM1wiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz1cIjEyIDYgOSAzIDYgNlwiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BvbHlsaW5lPjwvZz48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgZnctYm9sZFwiIHN0eWxlPVwiZmxvYXQ6bGVmdDsgcGFkZGluZy1sZWZ0OiA1cHg7XCI+Tm8gPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+Q3VzdG9tIDwvc3Bhbj4gVGFibGVzIGFkZGVkIHlldCwgY2xpY2sgXCI8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBjdXN0b21UYWJsZU1vZGUoKSA/ICdBZGQgTmV3IEN1c3RvbSBUYWJsZScgOiAnTG9hZCBBbGwgVGFibGVzJ1wiPjwvc3Bhbj5cIiB0byBnZXQgc3RhcnRlZCE8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAhYWN0aXZlVGFibGUoKSAmJiBwYWdlZFRhYmxlcygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHN0eWxlPVwid2lkdGg6NDBweDtmbG9hdDpsZWZ0O3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKSB0cmFuc2xhdGVZKDZweCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXIgY2VudGVyO1wiIGZpbGw9XCIjMDAwMDAwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBjbGFzcz1cImljb24gZmxhdC1saW5lXCI+PGcgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz48ZyBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiBzdHJva2U9XCIjQ0NDQ0NDXCIgc3Ryb2tlLXdpZHRoPVwiMC4wNDhcIj48L2c+PGc+PHBhdGggZD1cIk0xOCwyMUExMy4xNywxMy4xNywwLDAsMSw5LDguNTFWM1wiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BhdGg+PHBvbHlsaW5lIHBvaW50cz1cIjEyIDYgOSAzIDYgNlwiIHN0eWxlPVwiZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MjtcIj48L3BvbHlsaW5lPjwvZz48L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTMgZnctYm9sZFwiIHN0eWxlPVwiZmxvYXQ6bGVmdDsgcGFkZGluZy1sZWZ0OiA1cHg7XCI+U2VsZWN0IGEgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogJHJvb3QuY3VzdG9tVGFibGVNb2RlXCI+Q3VzdG9tIDwvc3Bhbj4gVGFibGUsIG9yIFwiPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogY3VzdG9tVGFibGVNb2RlKCkgPyAnQWRkIE5ldyBDdXN0b20gVGFibGUnIDogJ0xvYWQgQWxsIFRhYmxlcydcIj48L3NwYW4+XCI8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ3aXRoOiBhY3RpdmVUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZWxlY3RlZFwiIHRpdGxlPVwiQ2hlY2sgdG8gdXNlIGluIERvdG5ldCBSZXBvcnQsIHVuY2hlY2sgdG8gUmVtb3ZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTogSXNWaWV3XCIgY2xhc3M9XCJsYWJlbC1zbVwiPih2aWV3KTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHNhdmVUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmxvcHB5LW9cIj48L2k+IFNhdmUgQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJQcmV2aWV3IHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IHByZXZpZXdUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdGFibGVcIj48L2k+IFByZXZpZXcgRGF0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXJcIiB0aXRsZT1cIkRlbGV0ZSB0aGlzIFRhYmxlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBkZWxldGVUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+IFJlbW92ZSBUYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJNYW5hZ2UgQ2F0ZWdvcnlcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjY2F0ZWdvcnktbWFuYWdlLW1vZGFsXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNlbGVjdGVkQ2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZ2VhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiRXhwb3J0IHRoaXMgVGFibGVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGV4cG9ydFRhYmxlSnNvbigpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtc21cIj5EaXNwbGF5IE5hbWU8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPlNjaGVtYSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IFNjaGVtYU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkZXByZWNhdGVkIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJsYWJlbC1zbVwiPkFjY291bnQgSWQgRmllbGQ8L2xhYmVsPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogQWNjb3VudElkRmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiB0eXBlPVwiY2hlY2tib3hcIiB2YWx1ZT1cInRydWVcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBEb05vdERpc3BsYXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERvIE5vdCBEaXNwbGF5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogQ3VzdG9tVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5jdXN0b21TcWwudmlld0N1c3RvbVNxbC5iaW5kKCRkYXRhKVwiPlZpZXcgQ3VzdG9tIFNRTDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtIG0tMFwiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6IENvbHVtbnMoKS5sZW5ndGhcIj48L3NwYW4+IENvbHVtbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYXV0b0Zvcm1hdCwgdmlzaWJsZTogU2VsZWN0ZWRcIj5BdXRvIEZvcm1hdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogdW5zZWxlY3RBbGxDb2x1bW5zLCB2aXNpYmxlOiBTZWxlY3RlZFwiPlVuc2VsZWN0IEFsbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2VsZWN0QWxsQ29sdW1ucywgdmlzaWJsZTogU2VsZWN0ZWRcIj5TZWxlY3QgQWxsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cInNvcnRhYmxlOiB7IGRhdGE6IENvbHVtbnMsIG9wdGlvbnM6IHsgaGFuZGxlOiAnLnNvcnRhYmxlJywgY3Vyc29yOiAnbW92ZScgfSwgYWZ0ZXJNb3ZlOiAkcm9vdC5UYWJsZXMuY29sdW1uU29ydGVkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRwYXJlbnQuRHluYW1pY0NvbHVtbnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogRGlzcGxheU5hbWUsIGF0dHI6IHsgdGl0bGU6ICdEQiBmaWVsZCBpcyAnICsgQ29sdW1uTmFtZSgpIH1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJpZjogISRwYXJlbnQuRHluYW1pY0NvbHVtbnMoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBTZWxlY3RlZCwgZW5hYmxlOiAkcGFyZW50LlNlbGVjdGVkKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogRGlzcGxheU5hbWUsIGF0dHI6IHsgdGl0bGU6ICdEQiBmaWVsZCBpcyAnICsgQ29sdW1uTmFtZSgpIH1cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IEZpZWxkVHlwZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidmlzaWJsZTogUHJpbWFyeUtleVwiIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1wcmltYXJ5XCI+UHJpbWFyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGRhdGEtYmluZD1cInZpc2libGU6IEZvcmVpZ25LZXlcIiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCI+Rm9yZWlnbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1yaWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2x1bW4tbW9kYWxcIiB0aXRsZT1cIkFsbCBjb2x1bW4gb3B0aW9uc1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zZWxlY3RDb2x1bW4uYmluZCgkZGF0YSwgZmFsc2UpXCI+Li4uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuIGJ0bi1zbSBwdWxsLXJpZ2h0IHNvcnRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1hcnJvd3NcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB0aXRsZT1cIkRyYWcgdG8gcmVvcmRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cInJlbGF0aW9uc1wiPlxyXG4gICAgICAgICAgICA8Yj5SZWxhdGlvbnM8L2I+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgU2V0dXAgeW91ciBEYXRhYmFzZSBSZWxhdGlvbnMgZm9yIERvdG5ldCBSZXBvcnQgdG8gcHJvZHVjZSBkeW5hbWljIHF1ZXJpZXNcclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBBZGRBbGxSZWxhdGlvbnNcIj5BdXRvIEFkZCBKb2luczwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBBZGRKb2luXCI+QWRkIG5ldyBKb2luPC9idXR0b24+Jm5ic3A7XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IFNhdmVKb2luc1wiPlNhdmUgSm9pbnM8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogdmlzdWFsaXplSm9pbnNcIj5WaXN1YWxpemUgSm9pbnM8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRGVsZXRlVmlzaWJsZUpvaW5zXCIgdGl0bGU9XCJEZWxldGUgZmlsdGVyZWQgSm9pbnNcIj5EZWxldGUgSm9pbnM8L2J1dHRvbj4mbmJzcDtcclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogRXhwb3J0Sm9pbnNcIiB0aXRsZT1cIkV4cG9ydCBmaWx0ZXJlZCBKb2luc1wiPkV4cG9ydCBKb2luczwvYnV0dG9uPiZuYnNwO1xyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiN1cGxvYWRKb2luc0ZpbGVNb2RhbFwiIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvc3Bhbj4gSW1wb3J0IEpvaW5zXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGRpdiBpZD1cImZvcm0tam9pbnNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogaXNEaXJ0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gUGxlYXNlIGJlIHN1cmUgdG8gY2xpY2sgPGI+U2F2ZSBKb2luczwvYj4gdG8gc2F2ZSB5b3VyIGNoYW5nZXMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmdy1ib2xkIGJnLWxpZ2h0IGJvcmRlci1ib3R0b20gcHktMlwiIGRhdGEtYmluZD1cIndpdGg6IEpvaW5GaWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVwZWF0IGZvciBlYWNoIGNvbHVtbiBoZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbWFyeSBUYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGlucHV0LWdyb3VwLXNtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogcHJpbWFyeVRhYmxlLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnNvcnRCeVByaW1hcnlUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgZGF0YS1iaW5kPVwiY3NzOiAkcm9vdC5zb3J0RGlyZWN0aW9uLnByaW1hcnlUYWJsZSgpID8gJ2ZhLXNvcnQtYXNjJyA6ICdmYS1zb3J0LWRlc2MnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBwcmltYXJ5RmllbGQsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj48aSBjbGFzcz1cImZhIGZhLWZpbHRlclwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc29ydEJ5RmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5wcmltYXJ5RmllbGQoKSA/ICdmYS1zb3J0LWFzYycgOiAnZmEtc29ydC1kZXNjJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGpvaW5UeXBlLCB2YWx1ZVVwZGF0ZTogJ2FmdGVya2V5ZG93bidcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiZmEgZmEtZmlsdGVyXCI+PC9pPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0biBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc29ydEJ5Sm9pblR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5qb2luVHlwZSgpID8gJ2ZhLXNvcnQtYXNjJyA6ICdmYS1zb3J0LWRlc2MnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBKb2luIFRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBqb2luVGFibGUsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zb3J0QnlKb2luVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5qb2luVGFibGUoKSA/ICdmYS1zb3J0LWFzYycgOiAnZmEtc29ydC1kZXNjJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRmllbGQ8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgaW5wdXQtZ3JvdXAtc21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBqb2luRmllbGQsIHZhbHVlVXBkYXRlOiAnYWZ0ZXJrZXlkb3duJ1wiIHBsYWNlaG9sZGVyPVwiU2VhcmNoLi4uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1maWx0ZXJcIj48L2k+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zb3J0QnlKb2luRmllbGRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogJHJvb3Quc29ydERpcmVjdGlvbi5qb2luRmllbGQoKSA/ICdmYS1zb3J0LWFzYycgOiAnZmEtc29ydC1kZXNjJ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTmV3IEpvaW4gUm93IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYmctaW5mbyBiZy1vcGFjaXR5LTI1IHAtMlwiIGRhdGEtYmluZD1cInZpc2libGU6IHNob3dOZXdKb2luUm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogVGFibGVzLmF2YWlsYWJsZVRhYmxlcywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBOZXdKb2luKCkuSm9pblRhYmxlLCBvcHRpb25zQ2FwdGlvbjogJ1BpY2sgYSB0YWJsZS4uLidcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiIGRhdGEtYmluZD1cIndpdGg6IE5ld0pvaW4oKS5Kb2luVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IGF2YWlsYWJsZUNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCBvcHRpb25zQ2FwdGlvbjogJ1BpY2sgYSBmaWVsZC4uLicsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogJHJvb3QuTmV3Sm9pbigpLkZpZWxkTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcm9vdC5Kb2luVHlwZXMsIHZhbHVlOiBOZXdKb2luKCkuSm9pblR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogTmV3Sm9pbigpLk90aGVyVGFibGVzLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgdmFsdWU6IE5ld0pvaW4oKS5PdGhlclRhYmxlLCBvcHRpb25zQ2FwdGlvbjogJ1BpY2sgYSB0YWJsZS4uLidcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiIGRhdGEtYmluZD1cIndpdGg6IE5ld0pvaW4oKS5PdGhlclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBhdmFpbGFibGVDb2x1bW5zLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiAkcm9vdC5OZXdKb2luKCkuSm9pbkZpZWxkTmFtZSwgb3B0aW9uc0NhcHRpb246ICdQaWNrIGEgZmllbGQuLi4nXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IENvbmZpcm1BZGRKb2luXCI+KyBBZGQgSm9pbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBFeGlzdGluZyBKb2luIFJvd3MgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBwYWdlZEpvaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci1ib3R0b20gcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuVGFibGVzLmF2YWlsYWJsZVRhYmxlcywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIHZhbHVlOiBKb2luVGFibGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCIgZGF0YS1iaW5kPVwid2l0aDogSm9pblRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogYXZhaWxhYmxlQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogJHBhcmVudC5GaWVsZE5hbWVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuSm9pblR5cGVzLCB2YWx1ZTogSm9pblR5cGVcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogT3RoZXJUYWJsZXMsIG9wdGlvbnNUZXh0OiAnRGlzcGxheU5hbWUnLCB2YWx1ZTogT3RoZXJUYWJsZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBPdGhlclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwib3B0aW9uczogYXZhaWxhYmxlQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdEaXNwbGF5TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogJHBhcmVudC5Kb2luRmllbGROYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgdGV4dC1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLXdhcm5pbmcgdGV4dC1kYXJrIG1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZpc2libGU6IGlzTmV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTmV3IHJlY29yZCBhZGRlZCBvciBpbXBvcnRlZCwgbm90IHNhdmVkIHlldFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXdhcm5pbmdcIj48L2k+IE5ld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiBEZWxldGVKb2luXCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIGNvbC1tZC0xMlwiIGRhdGEtYmluZD1cIndpdGg6IGpvaW5zUGFnZXJcIj4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ0ZW1wbGF0ZTogJ3BhZ2VyLXRlbXBsYXRlJywgZGF0YTogJGRhdGFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMCBwdC0wXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDNweFwiIGRhdGEtYmluZD1cInRleHQ6ICdUb3RhbCBSZWNvcmRzOiAnICsgdG90YWxSZWNvcmRzKClcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgaWQ9XCJwcm9jZWR1cmVcIiBjbGFzcz1cInRhYi1wYW5lXCI+XHJcbiAgICAgICAgICAgIDxiPlN0b3JlZCBQcm9jZWR1cmVzPC9iPlxyXG4gICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgIFNlbGVjdCBhbmQgbWFuYWdlIFN0b3JlZCBQcm9jZWR1cmVzIHRvIHVzZSBpbiBEb3RuZXQgUmVwb3J0IGZvciBtb3JlIGNvbXBsZXggYW5kIGNvZGVkIFJlcG9ydHNcclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNwcm9jZWR1cmUtbW9kYWxcIj48c3BhbiBjbGFzcz1cImZhIGZhLXBsdXNcIj48L3NwYW4+IEFkZCBTdG9yZWQgUHJvY3MgZnJvbSBkYXRhYmFzZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiN1cGxvYWRTdG9yZWRQcm9jZWR1cmVzRmlsZU1vZGFsXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZmlsZVwiPjwvc3Bhbj4gSW1wb3J0IFN0b3JlZCBQcm9jZWR1cmVzXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogUHJvY2VkdXJlcy5zYXZlZFByb2NlZHVyZXMoKS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgPGJyIC8+XHJcbiAgICAgICAgICAgICAgICBObyBTdG9yZWQgUHJvY2VkdXJlcyBoYXZlIGJlZW4gc2V0dXAgeWV0LlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIGRhdGEtYmluZD1cImlmOiBQcm9jZWR1cmVzLnNhdmVkUHJvY2VkdXJlcygpLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gTGVmdCBQYW5lbCBmb3IgU3RvcmVkIFByb2NlZHVyZSBOYW1lcyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTQgY29sLWxnLTMgYm9yZGVyLWVuZFwiIHN0eWxlPVwiaGVpZ2h0OiAxMDB2aDsgb3ZlcmZsb3cteTogYXV0bztcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudSBnLTNcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBQcm9jZWR1cmVzLnNhdmVkUHJvY2VkdXJlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jYXRlZ29yeSBjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgY2xlYXJmaXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZSwgY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5hY3RpdmVQcm9jZWR1cmUoJGRhdGEpOyB9XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJTYXZlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC5zYXZlUHJvY2VkdXJlKCRkYXRhLlRhYmxlTmFtZSwgZmFsc2UpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXNhdmVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiRGVsZXRlIHRoaXMgUHJvY2VkdXJlXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkZGF0YS5kZWxldGVUYWJsZSgkcm9vdC5rZXlzLkFjY291bnRBcGlLZXksICRyb290LmtleXMuRGF0YWJhc2VBcGlLZXkpOyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIENsaWNrIHRvIGFjdGl2YXRlIHByb2NlZHVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInB1bGwtcmlnaHRcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7ICRyb290LmFjdGl2ZVByb2NlZHVyZSgkZGF0YSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCIgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBSaWdodCBQYW5lbCBmb3IgU3RvcmVkIFByb2NlZHVyZSBEZXRhaWxzIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtOCBjb2wtbGctOVwiIGlkPVwicHJvY0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cIndpdGg6IGFjdGl2ZVByb2NlZHVyZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBteS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgZGF0YS1iaW5kPVwidGV4dDogVGFibGVOYW1lXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSB0aGlzIFByb2NlZHVyZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpIHsgJHJvb3Quc2F2ZVByb2NlZHVyZSgkZGF0YS5UYWJsZU5hbWUsIGZhbHNlKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXNhdmVcIj48L3NwYW4+IFNhdmUgQ2hhbmdlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJEZWxldGUgdGhpcyBQcm9jZWR1cmVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7ICRkYXRhLmRlbGV0ZVRhYmxlKCRyb290LmtleXMuQWNjb3VudEFwaUtleSwgJHJvb3Qua2V5cy5EYXRhYmFzZUFwaUtleSk7IH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvc3Bhbj4gRGVsZXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc21cIiB0aXRsZT1cIk1hbmFnZSBSb2xlIEFjY2Vzc1wiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNyb2xlLWFjY2Vzcy1tb2RhbFwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zZWxlY3RBbGxvd2VkUm9sZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtXCIgdGl0bGU9XCJFeHBvcnQgdGhpcyBQcm9jZWR1cmVcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7ICRyb290LmV4cG9ydFByb2NlZHVyZUpzb24oJGRhdGEuVGFibGVOYW1lKTsgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxhYmVsLXNtXCI+RGlzcGxheSBOYW1lPC9sYWJlbD48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwibGFiZWwtc21cIj5TY2hlbWEgTmFtZTwvbGFiZWw+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBTY2hlbWFOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPkNvbHVtbnM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lLCBhdHRyOiB7IHRpdGxlOiAnREIgZmllbGQgaXMgJyArIENvbHVtbk5hbWUoKSB9XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBGaWVsZFR5cGVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gcHVsbC1yaWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNjb2x1bW4tbW9kYWxcIiB0aXRsZT1cIkFsbCBjb2x1bW4gb3B0aW9uc1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zZWxlY3RDb2x1bW4uYmluZCgkZGF0YSwgdHJ1ZSlcIj4uLi48L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5QYXJhbWV0ZXJzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IFBhcmFtZXRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZSwgYXR0cjogeyB0aXRsZTogJ0RCIGZpZWxkIGlzICcgKyBQYXJhbWV0ZXJOYW1lKCkgfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogUGFyYW1ldGVyRGF0YVR5cGVTdHJpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7Jm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnkgcHVsbC1yaWdodFwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiNwYXJhbWV0ZXItbW9kYWxcIiB0aXRsZT1cIkFsbCBQYXJhbWV0ZXIgb3B0aW9uc1wiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5lZGl0UGFyYW1ldGVyXCI+Li4uPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBpZD1cIm1hbmFnZWFjY2Vzc1wiIGNsYXNzPVwidGFiLXBhbmVcIj5cclxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCIgaWQ9XCJhY2Nlc3NUYWJzXCIgcm9sZT1cInRhYmxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBpZD1cInJlcG9ydHMtdGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIiBkYXRhLWJzLXRhcmdldD1cIiNyZXBvcnRzQWNjZXNzXCIgdHlwZT1cImJ1dHRvblwiIHJvbGU9XCJ0YWJcIj5SZXBvcnRzIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi1pdGVtXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJuYXYtbGlua1wiIGlkPVwiZm9sZGVycy10YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiIGRhdGEtYnMtdGFyZ2V0PVwiI2ZvbGRlcnNBY2Nlc3NcIiB0eXBlPVwiYnV0dG9uXCIgcm9sZT1cInRhYlwiPkZvbGRlcnMgQWNjZXNzPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLWNvbnRlbnQgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1wYW5lIGZhZGUgc2hvdyBhY3RpdmVcIiBpZD1cInJlcG9ydHNBY2Nlc3NcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCJyZXBvcnRzLXRhYlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxiPlJlcG9ydHMgQWNjZXNzPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gc2V0dXAgYWNjZXNzIHRvIGluZGl2aWR1YWwgUmVwb3J0cyBoZXJlPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yIGQtZmxleCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGV4cG9ydEZvbGRlcnNSZXBvcnRKc29uKCkgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L3NwYW4+IEV4cG9ydCBTZWxlY3RlZCBSZXBvcnRzIEFjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIiBkYXRhLWJzLXRhcmdldD1cIiN1cGxvYWRGaWxlTW9kYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXVwbG9hZFwiPjwvc3Bhbj4gSW1wb3J0IFJlcG9ydHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiIGRhdGEtYnMtdGFyZ2V0PVwiI3NlYXJjaE1vZGFsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS10YXNrc1wiPjwvc3Bhbj4gQnVsayBBY3Rpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGhyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiByZXBvcnRzQW5kRm9sZGVyc1wiIGNsYXNzPVwibGlzdC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJjaGVja2VkOiBhbGxSZXBvcnRzU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHtocmVmOiAnI2ZvbGRlci0nICsgZm9sZGVySWQgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyXCI+PC9pPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZvbGRlclwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZm9sZGVyLScgKyBmb2xkZXJJZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogcmVwb3J0cy5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBSZXBvcnRzIGZvdW5kIGluIHRoaXMgZm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IHJlcG9ydHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGJvcmRlci1lbmRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBpc1NlbGVjdGVkXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbS1oZWFkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYVwiIGRhdGEtYmluZD1cImNzczogeydmYS1maWxlJzogcmVwb3J0VHlwZT09J0xpc3QnLCAnZmEtdGgtbGlzdCc6IHJlcG9ydFR5cGU9PSdTdW1tYXJ5JywgJ2ZhLWJhci1jaGFydCc6IHJlcG9ydFR5cGU9PSdCYXInLCAnZmEtcGllLWNoYXJ0JzogcmVwb3J0VHlwZT09J1BpZScsICAnZmEtbGluZS1jaGFydCc6IHJlcG9ydFR5cGU9PSdMaW5lJywgJ2ZhLWdsb2JlJzogcmVwb3J0VHlwZSA9PSdNYXAnfVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB0OyBjb2xvcjogIzgwODA4MFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiByZXBvcnROYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtLXRleHQgc21hbGxcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiByZXBvcnREZXNjcmlwdGlvblwiPjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPkN1cnJlbnQgUmVwb3J0IEFjY2VzczwvYj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VySWQoKSA/IHVzZXJJZCgpIDogJ0FueSBVc2VyJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgb25seSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiAodmlld09ubHlVc2VySWQoKSA/IHZpZXdPbmx5VXNlcklkKCkgOiAodXNlcklkKCkgPyB1c2VySWQoKSA6ICdBbnkgVXNlcicpKVwiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IGRlbGV0ZU9ubHlVc2VySWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZSBvbmx5IGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IGRlbGV0ZU9ubHlVc2VySWQoKVwiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogdXNlclJvbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmFnZSBieSBSb2xlIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VyUm9sZSgpID8gdXNlclJvbGUoKSA6ICdBbnkgUm9sZSdcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IHZpZXdPbmx5VXNlclJvbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgb25seSBieSBSb2xlIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB2aWV3T25seVVzZXJSb2xlKCkgPyB2aWV3T25seVVzZXJSb2xlKCkgOiAnQW55IFJvbGUnXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBkZWxldGVPbmx5VXNlclJvbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlbGV0ZSBvbmx5IGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IGRlbGV0ZU9ubHlVc2VyUm9sZSgpID8gZGVsZXRlT25seVVzZXJSb2xlKCkgOiAnU2FtZSBhcyBNYW5hZ2UnXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBDbGllbnQgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IGNsaWVudElkKCkgPyBjbGllbnRJZCgpIDogJ0FsbCBDbGllbnRzJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VBY2Nlc3MoIWNoYW5nZUFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnLCBoaWRkZW46IGNoYW5nZUFjY2Vzc1wiPkNoYW5nZSBBY2Nlc3M8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBjaGFuZ2VBY2Nlc3NcIiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDEwcHg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdC5tYW5hZ2VBY2Nlc3MgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBzYXZlQWNjZXNzQ2hhbmdlc1wiPlNhdmUgQWNjZXNzIENoYW5nZXM8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VBY2Nlc3MoIWNoYW5nZUFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItcGFuZSBmYWRlXCIgaWQ9XCJmb2xkZXJzQWNjZXNzXCIgcm9sZT1cInRhYnBhbmVsXCIgYXJpYS1sYWJlbGxlZGJ5PVwiZm9sZGVycy10YWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8Yj5Gb2xkZXJzIEFjY2VzczwvYj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5Zb3UgY2FuIHNldHVwIGFjY2VzcyB0byBpbmRpdmlkdWFsIEZvbGRlcnMgaGVyZTwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IEZvbGRlcnNcIiBjbGFzcz1cImxpc3QtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBkYXRhLWJpbmQ9XCJhdHRyOiB7aHJlZjogJyNmb2xkZXJBY2Nlc3MtJyArIElkIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZm9sZGVyXCI+PC9pPiZuYnNwOzxzcGFuIGRhdGEtYmluZD1cInRleHQ6IEZvbGRlck5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbGxhcHNlXCIgZGF0YS1iaW5kPVwiYXR0cjoge2lkOiAnZm9sZGVyQWNjZXNzLScgKyBJZCB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgYm9yZGVyLWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNtYWxsXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5DdXJyZW50IEZvbGRlciBBY2Nlc3M8L2I+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IFVzZXJJZCgpPyBVc2VySWQoKSA6ICdBbnkgVXNlcidcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBvbmx5IGJ5IFVzZXIgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IChWaWV3T25seVVzZXJJZCgpID8gVmlld09ubHlVc2VySWQoKSA6IChVc2VySWQoKSA/IFVzZXJJZCgpIDogJ0FueSBVc2VyJykpXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IERlbGV0ZU9ubHlVc2VySWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGUgb25seSBieSBVc2VyIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBEZWxldGVPbmx5VXNlcklkKClcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogVXNlclJvbGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuYWdlIGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IFVzZXJSb2xlcygpID8gVXNlclJvbGVzKCkgOiAnQW55IFJvbGUnXCI+PC9zcGFuPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6IFZpZXdPbmx5VXNlclJvbGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlldyBvbmx5IGJ5IFJvbGUgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IFZpZXdPbmx5VXNlclJvbGVzKCkgPyBWaWV3T25seVVzZXJSb2xlcygpIDogJ0FueSBSb2xlJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBEZWxldGVPbmx5VXNlclJvbGVzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIG9ubHkgYnkgUm9sZSA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogRGVsZXRlT25seVVzZXJSb2xlcygpID8gRGVsZXRlT25seVVzZXJSb2xlcygpIDogJ1NhbWUgYXMgTWFuYWdlJ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQ2xpZW50IDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBDbGllbnRJZCgpID8gQ2xpZW50SWQoKSA6ICdBbGwgQ2xpZW50cydcIj48L3NwYW4+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogZnVuY3Rpb24oKSB7IGNoYW5nZUZvbGRlckFjY2VzcyghY2hhbmdlRm9sZGVyQWNjZXNzKCkpfSwgdGV4dDogIWNoYW5nZUZvbGRlckFjY2VzcygpID8gJ0NoYW5nZSBBY2Nlc3MnOiAnQ2FuY2VsIENoYW5naW5nIEFjY2VzcycsIGhpZGRlbjogY2hhbmdlRm9sZGVyQWNjZXNzXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogY2hhbmdlRm9sZGVyQWNjZXNzXCIgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRlbXBsYXRlOiB7bmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdC5tYW5hZ2VBY2Nlc3MgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHNhdmVGb2xkZXJBY2Nlc3NDaGFuZ2VzXCI+U2F2ZSBBY2Nlc3MgQ2hhbmdlczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyBjaGFuZ2VGb2xkZXJBY2Nlc3MoIWNoYW5nZUZvbGRlckFjY2VzcygpKX0sIHRleHQ6ICFjaGFuZ2VGb2xkZXJBY2Nlc3MoKSA/ICdDaGFuZ2UgQWNjZXNzJzogJ0NhbmNlbCBDaGFuZ2luZyBBY2Nlc3MnXCI+Q2hhbmdlIEFjY2VzczwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgcm9sZT1cInRhYnBhbmVsXCIgY2xhc3M9XCJ0YWItcGFuZVwiIGlkPVwiZnVuY3Rpb25zXCIgZGF0YS1iaW5kPVwid2l0aDogRnVuY3Rpb25zXCI+XHJcbiAgICAgICAgICAgIDxiPkN1c3RvbSBGdW5jdGlvbnM8L2I+XHJcbiAgICAgICAgICAgIDxwPlxyXG4gICAgICAgICAgICAgICAgQ3JlYXRlIGFuZCBtYW5hZ2UgQ3VzdG9tIEZ1bmN0aW9uIHRoYXQgeW91IGNhbiB1c2UgaW4gYnVpbGRpbmcgUmVwb3J0cyBhbmQgRGFzaGJvYXJkc1xyXG4gICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IGNyZWF0ZU5ld0Z1bmN0aW9uXCI+QWRkIG5ldyBGdW5jdGlvbjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgPGhyIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGJvcmRlci1lbmRcIiBzdHlsZT1cImhlaWdodDogMTAwdmg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cInNlYXJjaElucHV0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMlwiIHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogc2VhcmNoLCB2YWx1ZVVwZGF0ZTogJ2lucHV0JywgdmlzaWJsZTogZnVuY3Rpb25zKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogZmlsdGVyZWRGdW5jdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidGV4dDogbmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnNlbGVjdEZ1bmN0aW9uXCI+RWRpdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kYW5nZXIgYnRuLXNtXCIgZGF0YS1iaW5kPVwiY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcGFyZW50LmRlbGV0ZUZ1bmN0aW9uKCRkYXRhKSB9XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBmdW5jdGlvbnMoKS5sZW5ndGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gRnVuY3Rpb25zIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiIGRhdGEtYmluZD1cIndpdGg6IHNlbGVjdGVkRnVuY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInBhZGRpbmctbGVmdDogMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPlNldHVwIEZ1bmN0aW9uPC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiBkYXRhLWJpbmQ9XCJ2YWxpZGF0aW9uRWxlbWVudDogZnVuY3Rpb25OYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZnVuY3Rpb25OYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RnVuY3Rpb24gTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJmdW5jdGlvbk5hbWVcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIGRhdGEtYmluZD1cInZhbHVlOiBuYW1lLCB2YWx1ZVVwZGF0ZTogJ2lucHV0J1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiPkZ1bmN0aW9uIE5hbWUgaXMgcmVxdWlyZWQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZ1bmN0aW9uVHlwZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkZ1bmN0aW9uIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBpZD1cImZ1bmN0aW9uVHlwZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGZ1bmN0aW9uVHlwZSwgZXZlbnQ6IHsgY2hhbmdlOiAkcGFyZW50LnVwZGF0ZUNvZGVFZGl0b3JNb2RlIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiY3NoYXJwXCI+QyM8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tPG9wdGlvbiB2YWx1ZT1cImphdmFzY3JpcHRcIj5KYXZhU2NyaXB0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInNxbFwiPlNRTDwvb3B0aW9uPi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZ1bmN0aW9uRGVzY3JpcHRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5EZXNjcmlwdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XCJmdW5jdGlvbkRlc2NyaXB0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGVzY3JpcHRpb24sIHZhbHVlVXBkYXRlOiAnaW5wdXQnXCIgcGxhY2Vob2xkZXI9XCJBZGQgYW55IGhlbHBmdWwgZGVzY3JpcHRpb24gaGVyZSBmb3IgdGhlIHVzZXIuLi5cIj48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5Bcmd1bWVudHM8L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1ib3JkZXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRpc3BsYXkgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRhdGEgVHlwZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+UmVxdWlyZWQ8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgZGF0YS1iaW5kPVwiZm9yZWFjaDogcGFyYW1ldGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IHBhcmFtZXRlck5hbWUsIHZhbHVlVXBkYXRlOiAnaW5wdXQnXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogbmFtZS5oYXNFcnJvciwgdGV4dDogbmFtZS52YWxpZGF0aW9uTWVzc2FnZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZGF0YS1iaW5kPVwidmFsdWU6IGRpc3BsYXlOYW1lLCB2YWx1ZVVwZGF0ZTogJ2lucHV0J1wiIC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGVzY3JpcHRpb24sIHZhbHVlVXBkYXRlOiAnaW5wdXQnXCIgcGxhY2Vob2xkZXI9XCJGcmllbmRseSBkZXNjcmlwdGlvbiBmb3IgdXNlci4uLlwiIC8+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogZGF0YXR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5vYmplY3Q8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5zdHJpbmc8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5pbnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5mbG9hdDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPmJvb2w8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHJlcXVpcmVkXCIgLz48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1kYW5nZXJcIiBkYXRhLWJpbmQ9XCJjbGljazogJHBhcmVudC5yZW1vdmVQYXJhbWV0ZXJcIj5SZW1vdmU8L2J1dHRvbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogYWRkUGFyYW1ldGVyXCI+QWRkIEFyZ3VtZW50PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb2RlRWRpdG9yXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+V3JpdGUgdGhlIDxiPkNvZGU8L2I+IGZvciB0aGUgZnVuY3Rpb24gYmVsb3c6PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cImNvZGVFZGl0b3JcIiBjbGFzcz1cImNvZGUtZWRpdG9yIGZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBjb2RlXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcGFyZW50LnNhdmVGdW5jdGlvblwiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRwYXJlbnQuY2FuY2VsRWRpdFwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cInNjaGVkdWxlc1wiPlxyXG4gICAgICAgICAgICA8Yj5TY2hlZHVsZWQgUmVwb3J0czwvYj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICBWaWV3IFNjaGVkdWxlcyBzZXR1cCBmb3Igc2VuZGluZyBSZXBvcnRzIGFuZCBEYXNoYm9hcmRzXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgPGhyIC8+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBzY2hlZHVsZXMoKS5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leGNsYW1hdGlvbi1jaXJjbGVcIj48L2k+IE5vIHNjaGVkdWxlZCBSZXBvcnRzIG9yIERhc2hib2FyZHMgYXZhaWxhYmxlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXItZmx1aWRcIiBkYXRhLWJpbmQ9XCJpZjogc2NoZWR1bGVzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHNjaGVkdWxlc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBib3JkZXItYm90dG9tIHB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciA8c3BhbiBjbGFzcz1cInRleHQtbXV0ZWRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBEYXNoYm9hcmRJZCA9PT0gMCA/ICdSZXBvcnQnIDogJ0Rhc2hib2FyZCdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6IE5hbWVcIj48L3NwYW4+PC9iPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbm5lciBzY2hlZHVsZSBpdGVtcyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZnctYm9sZCBiZy1saWdodCBweS0yIGQtbm9uZSBkLW1kLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCI+PGkgY2xhc3M9XCJmYSBmYS1jbG9jay1vXCI+PC9pPiBTY2hlZHVsZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWVudmVsb3BlXCI+PC9pPiBFbWFpbCBUbzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWZpbGVcIj48L2k+IEZvcm1hdDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWhpc3RvcnlcIj48L2k+IExhc3QgUnVuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPjxpIGNsYXNzPVwiZmEgZmEtdXNlclwiPjwvaT4gVXNlciBJRDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIj48aSBjbGFzcz1cImZhIGZhLWdsb2JlXCI+PC9pPiBUaW1lIFpvbmU8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCI+PGkgY2xhc3M9XCJmYSBmYS1jb2dzXCI+PC9pPiBBY3Rpb25zPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IHsgZGF0YTogU2NoZWR1bGVzLCBhczogJ2l0ZW0nIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGJvcmRlci1ib3R0b20gcHktMiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiIGRhdGEtYmluZD1cInRleHQ6IGl0ZW0uU2NoZWR1bGVEaXNwbGF5XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBpdGVtLkVtYWlsVG9cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiaWY6IGl0ZW0uRm9ybWF0ICYmIGl0ZW0uRm9ybWF0LnRyaW0oKS5zdWJzdHJpbmcoMCwxKSA9PT0gJ3snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImh0bWw6IGl0ZW0uRm9ybWF0LnNsaWNlKDEsLTEpLnNwbGl0KCcsJykuam9pbignPGJyPicpXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJpZjogIWl0ZW0uRm9ybWF0IHx8IGl0ZW0uRm9ybWF0LnRyaW0oKS5zdWJzdHJpbmcoMCwxKSAhPT0gJ3snXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cInRleHQ6IGl0ZW0uRm9ybWF0XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kXCIgZGF0YS1iaW5kPVwidGV4dDogaXRlbS5MYXN0UnVuXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWRcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBpdGVtLlVzZXJJZCA/IGl0ZW0uVXNlcklkIDogJ04vQSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiIGRhdGEtYmluZD1cInRleHQ6IGl0ZW0uVGltZXpvbmUgPyBpdGVtLlRpbWV6b25lIDogJ04vQSdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWRhbmdlclwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5kZWxldGVTY2hlZHVsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2hcIj48L2k+IERlbGV0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJjb2x1bW4tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdENvbHVtbigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJteU1vZGFsTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogQ29sdW1uTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwPkNob29zZSBvcHRpb25zIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHVzZXJzIGludGVyYWN0IHdpdGggdGhpcyBjb2x1bW4gb24gUmVwb3J0czwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibmF2IG5hdi10YWJzXCIgcm9sZT1cInRhYmxpc3RcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGluayBhY3RpdmVcIiBocmVmPVwiI2NvbHVtbi1tYWluXCIgYXJpYS1jb250cm9scz1cImhvbWVcIiByb2xlPVwidGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIj5NYWluIE9wdGlvbnM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29sdW1uLWZvcmVpZ25cIiBhcmlhLWNvbnRyb2xzPVwicHJvZmlsZVwiIHJvbGU9XCJ0YWJcIiBkYXRhLWJzLXRvZ2dsZT1cInRhYlwiPkZvcmVpZ24gS2V5IE9wdGlvbnM8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIHJvbGU9XCJwcmVzZW50YXRpb25cIiBjbGFzcz1cIm5hdi1pdGVtXCI+PGEgY2xhc3M9XCJuYXYtbGlua1wiIGhyZWY9XCIjY29sdW1uLWZpbHRlclwiIGFyaWEtY29udHJvbHM9XCJwcm9jZWR1cmVcIiByb2xlPVwidGFiXCIgZGF0YS1icy10b2dnbGU9XCJ0YWJcIj5GaWx0ZXIgT3B0aW9uczwvYT48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmUgYWN0aXZlXCIgaWQ9XCJjb2x1bW4tbWFpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkRpc3BsYXlfTmFtZVwiIGRhdGEtYmluZD1cImF0dHI6e3BsYWNlaG9sZGVyOidFeCBGaXJzdCBOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEZpcnN0IE5hbWVcIj5EaXNwbGF5IE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWJveCBzaW5nbGUtbGluZVwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIERpc3BsYXlOYW1lIGZpZWxkIGlzIHJlcXVpcmVkLlwiIGlkPVwiRGlzcGxheU5hbWVcIiBuYW1lPVwiRGlzcGxheU5hbWVcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiRmlyc3QgTmFtZVwiIGRhdGEtYmluZD1cInZhbHVlOiBEaXNwbGF5TmFtZSwgYXR0cjp7cGxhY2Vob2xkZXI6J0V4IEZpcnN0IE5hbWUnfVwiIHBsYWNlaG9sZGVyPVwiRXggRmlyc3QgTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyBhIGZyaWVuZGx5IG5hbWUgdG8gZGlzcGxheSB0byB5b3VyIHVzZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIkZpZWxkX1R5cGVcIiBkYXRhLWJpbmQ9XCJcIj5GaWVsZCBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cIkZpZWxkVHlwZV9TZWxlY3RlZElkXCIgbmFtZT1cIkZpZWxkVHlwZS5TZWxlY3RlZElkXCIgZGF0YS1iaW5kPVwidmFsdWU6IEZpZWxkVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJCb29sZWFuXCI+Qm9vbGVhbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJEYXRlVGltZVwiPkRhdGUgVGltZTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJWYXJjaGFyXCI+VmFyY2hhcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJNb25leVwiPk1vbmV5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkludFwiPkludDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJEb3VibGVcIj5Eb3VibGU8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSnNvblwiPkpzb248L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRGF0ZVwiPkRhdGUgT25seTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJUaW1lXCI+VGltZSBPbmx5PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBlcmNlbnRhZ2VcIj5QZXJjZW50YWdlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZpZWxkVHlwZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGZvcj1cIlByaW1hcnlfS2V5XCIgZGF0YS1iaW5kPVwiXCI+UHJpbWFyeSBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgUHJpbWFyeUtleSBmaWVsZCBpcyByZXF1aXJlZC5cIiBpZD1cIlByaW1hcnlLZXlcIiBuYW1lPVwiUHJpbWFyeUtleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6UHJpbWFyeUtleVwiPjxpbnB1dCBuYW1lPVwiUHJpbWFyeUtleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZpZWxkLXZhbGlkYXRpb24tdmFsaWQgaGVscC1pbmxpbmUgaW5kZW50XCIgZGF0YS12YWxtc2ctZm9yPVwiUHJpbWFyeUtleVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cIlwiPkRvIE5vdCBEaXNwbGF5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6RG9Ob3REaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiSWYgdGhpcyBpcyBjaGVja2VkLCB0aGUgY29sdW1uIHdpbGwgbm90IGJlIGRpc3BsYXllZCBvbiBSZXBvcnQgRGVzaWduZXIsIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZCBvbiBHbG9iYWwgRGF0YSBGaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwiaWY6IEZpZWxkVHlwZSgpID09ICdKc29uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+SlNPTiBEYXRhIFN0cnVjdHVyZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94IHNpbmdsZS1saW5lXCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgRGlzcGxheU5hbWUgZmllbGQgaXMgcmVxdWlyZWQuXCIgZGF0YS1iaW5kPVwidmFsdWU6IEpzb25TdHJ1Y3R1cmUsIGF0dHI6e3BsYWNlaG9sZGVyOidQbGVhc2UgcGFzdGUgaW4gU2FtcGxlIEpzb24gd2l0aCBhbGwgY29sdW1ucyBmb3IgdGhpcyBKU09OIGRhdGEgZmllbGQnfVwiIHJvd3M9XCI1XCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIllvdSBjYW4gcGFzdGUgaW4gYSBzYW1wbGUgSnNvbiBibG9iIHdpdGggYWxsIHRoZSBjb2x1bW5zIHlvdSB3YW50IHRvIHVzZSBpbiB0aGlzIGZpZWxkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiByb2xlPVwidGFicGFuZWxcIiBjbGFzcz1cInRhYi1wYW5lXCIgaWQ9XCJjb2x1bW4tZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb2wtc20tNCBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZSBGaWx0ZXIgaWYgQ29sdW1uIGlzIHNlbGVjdGVkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yY2VGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgY29sLXNtLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJJZiB0aGlzIGlzIGNoZWNrZWQsIHRoZSBjb2x1bW4gd2lsbCBhbHdheXMgcmVxdWlyZSB0aGUgdXNlciB0byBwaWNrIGEgZmlsdGVyZWQgdmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb2wtc20tNCBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZSBGaWx0ZXIgaWYgVGFibGUgaXMgc2VsZWN0ZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDpGb3JjZUZpbHRlckZvclRhYmxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIGNvbC1zbS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiSWYgdGhpcyBpcyBjaGVja2VkLCB0aGUgcmVwb3J0IHdpbGwgYWx3YXlzIHJlcXVpcmUgdGhlIHVzZXIgdG8gcGljayBhIGZpbHRlciB2YWx1ZSBpZiB1c2VyIHBpY2tzIHRoZSBjb2x1bW4gaW4gcmVwb3J0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogRmllbGRUeXBlKCkgPT0gJ0RhdGVUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtNCBjb2wtc20tNCBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVzdHJpY3QgRmlsdGVyIERhdGUgUmFuZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEgY29sLXNtLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IHJlc3RyaWN0RGF0ZVJhbmdlRmlsdGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiIGRhdGEtYmluZD1cImlmOiByZXN0cmljdERhdGVSYW5nZUZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cIm51bWJlclwiIGRhdGEtYmluZD1cInZhbHVlOiByZXN0cmljdERhdGVSYW5nZU51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIiBkYXRhLWJpbmQ9XCJpZjogcmVzdHJpY3REYXRlUmFuZ2VGaWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cInZhbHVlOiByZXN0cmljdERhdGVSYW5nZVZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkRheXNcIj5EYXkocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTW9udGhzXCI+TW9udGgocyk8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiWWVhcnNcIj5ZZWFyKHMpPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBjb2wtc20tMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIklmIHRoaXMgaXMgc2VsZWN0ZWQsIHVzZXIgd2lsbCBub3QgYmUgYWJsZSB0byBwaWNrIGRhdGUgcmFuZ2UgbGFyZ2VyIHRoYW4gdGhpcyBzZWxlY3Rpb25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHJvbGU9XCJ0YWJwYW5lbFwiIGNsYXNzPVwidGFiLXBhbmVcIiBpZD1cImNvbHVtbi1mb3JlaWduXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+Rm9yZWlnbiBLZXk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJUaGUgRm9yZWlnbktleSBmaWVsZCBpcyByZXF1aXJlZC5cIiBpZD1cIkZvcmVpZ25LZXlcIiBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbktleVwiPjxpbnB1dCBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiRm9yZWlnbiBrZXlzIGFsbG93cyBmcmllbmRseSBzZWxlY3Rpb24gaW4gRmlsdGVycyB1c2luZyBhIERyb3Bkb3duIExpc3RcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IHRibEVtcGxveWVlcyd9XCIgcGxhY2Vob2xkZXI9XCJFeCB0YmxFbXBsb3llZXNcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwidmFsdWU6IEpvaW5UYWJsZSwgdmlzaWJsZTpGb3JlaWduS2V5KCksIG9wdGlvbnM6ICRyb290LlRhYmxlcy5hdmFpbGFibGVUYWJsZXMsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBKb2luPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cIkZvcmVpZ25Kb2luX1NlbGVjdGVkSWRcIiBuYW1lPVwiRm9yZWlnbkpvaW4uU2VsZWN0ZWRJZFwiIGRhdGEtYmluZD1cInZhbHVlOiBGb3JlaWduSm9pbiwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHNlbGVjdGVkPVwic2VsZWN0ZWRcIiB2YWx1ZT1cIklubmVyXCI+SW5uZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTGVmdFwiPkxlZnQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUmlnaHRcIj5SaWdodDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtdmFsaWRhdGlvbi12YWxpZCBoZWxwLWlubGluZSBpbmRlbnRcIiBkYXRhLXZhbG1zZy1mb3I9XCJGb3JlaWduSm9pblwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJpZjogJHJvb3QuaXNTdG9yZWRQcm9jQ29sdW1uKCkgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCBFbXBsb3llZUlkJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBLZXkgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGlkPVwiRm9yZWlnbktleUZpZWxkXCIgbmFtZT1cIkZvcmVpZ25LZXlGaWVsZFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnbktleUZpZWxkLCB2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGx9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZUlkXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKVwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHRpdGxlPVwiRm9yZWlnbiBLZXkgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGljaCBpcyB1c2VkIGFzIHRoZSBLZXkgZmllbGRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiIGRhdGEtYmluZD1cImlmOiAkcm9vdC5pc1N0b3JlZFByb2NDb2x1bW4oKSA9PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBFbXBsb3llZU5hbWVcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+Rm9yZWlnbiBWYWx1ZSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJGb3JlaWduVmFsdWVGaWVsZFwiIG5hbWU9XCJGb3JlaWduVmFsdWVGaWVsZFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblZhbHVlRmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduS2V5KClcIiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiB0aXRsZT1cIkZvcmVpZ24gVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJpZjogRm9yZWlnbktleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPk9ubHkgZm9yIEZpbHRlcj88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbkZpbHRlck9ubHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkNoZWNrIHRoaXMgb3B0aW9uIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGlzIGZvciBGaWx0ZXJpbmcgb25seSwgYW5kIG5vdCBmb3IgU1FMIEpvaW5zXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZb3UgY2FuIHNldHVwIGEgY2FzY2FkaW5nIGZpbHRlciBieSBzZXR0aW5nIHVwIGEgcGFyZW50IGZvciB0aGUgZm9yZWlnbiBrZXkgYmVsb3dcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5TZXR1cCBGb3JlaWduIEtleSBQYXJlbnQ/PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOkZvcmVpZ25QYXJlbnRLZXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiB0aXRsZT1cIkZvcmVpZ24ga2V5cyBwYXJlbnQgYWxsb3dzIGNhc2NhZGluZyBkcm9wZG93biBzZWxlY3Rpb24gaW4gRmlsdGVyc1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggdGJsRW1wbG95ZWVzJ31cIiBwbGFjZWhvbGRlcj1cIkV4IHRibEVtcGxveWVlc1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5QYXJlbnQgVGFibGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgZGF0YS1iaW5kPVwidmFsdWU6IEZvcmVpZ25Kb2luVGFibGUsIHZpc2libGU6Rm9yZWlnblBhcmVudEtleSgpLCBvcHRpb25zOiAkcm9vdC5UYWJsZXMubW9kZWwsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25Kb2luVGFibGVcIiBkYXRhLXZhbG1zZy1yZXBsYWNlPVwidHJ1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25QYXJlbnRLZXkoKVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduUGFyZW50S2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVJZCd9XCI+UGFyZW50IEtleSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiBGb3JlaWduSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduUGFyZW50S2V5RmllbGQsIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVJZFwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiUGFyZW50IEtleSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBQYXJlbnQgdGFibGUgd2hpY2ggaXMgdXNlZCBhcyB0aGUga2V5IGluIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cImF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlTmFtZSd9XCI+UGFyZW50IFZhbHVlIEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEZvcmVpZ25Kb2luVGFibGUoKS5Db2x1bW5zLCBvcHRpb25zVGV4dDogJ0NvbHVtbk5hbWUnLCBvcHRpb25zVmFsdWU6ICdDb2x1bW5OYW1lJywgdmFsdWU6IEZvcmVpZ25QYXJlbnRWYWx1ZUZpZWxkLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25QYXJlbnRLZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiUGFyZW50IFZhbHVlIGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIFBhcmVudCB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXIgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCIgZGF0YS1iaW5kPVwidmlzaWJsZTpGb3JlaWduUGFyZW50S2V5KClcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cImF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsLCBwbGFjZWhvbGRlcjogJ0V4IEVtcGxveWVlTmFtZSd9XCI+Rm9yZWlnbiBLZXkgRmlsdGVyIEZpZWxkPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGRhdGEtYmluZD1cIm9wdGlvbnM6IEpvaW5UYWJsZSgpLkNvbHVtbnMsIG9wdGlvbnNUZXh0OiAnQ29sdW1uTmFtZScsIG9wdGlvbnNWYWx1ZTogJ0NvbHVtbk5hbWUnLCB2YWx1ZTogRm9yZWlnblBhcmVudEFwcGx5VG8sIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnblBhcmVudEtleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJGb3JlaWduIEtleSBGaWx0ZXIgVmFsdWUgZmllbGQgaXMgYSBDb2x1bW4gZnJvbSB0aGUgRm9yZWlnbiB0YWJsZSB3aGVyZSB0aGUgc2VsZWN0ZWQgcGFyZW50IGZpbHRlciB3aWxsIGJlIGFwcGxpZWQgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS08ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5SZXF1aXJlIEZvcmVpZ24gS2V5IFBhcmVudD88L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnblBhcmVudFJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJGb3JlaWduIGtleXMgcGFyZW50IGNhbiBiZSBvcHRpb25hbCBvciBzZXQgdG8gcmVxdWlyZWQgZm9yIGNhc2NhZGluZyBmaWx0ZXJzXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pi0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgdGl0bGU9XCJNYW5hZ2UgUm9sZSBBY2Nlc3NcIiBkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS1icy10YXJnZXQ9XCIjcm9sZS1hY2Nlc3MtbW9kYWxcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Quc2VsZWN0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXVzZXJcIj48L2k+TWFuYWdlIFJvbGUgQWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJqb2luTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgcm9sZT1cImRpYWxvZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+Sm9pbnMgRGlhZ3JhbTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiIHN0eWxlPVwibWF4LWhlaWdodDo4MDBweDtvdmVyZmxvdzphdXRvO1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImpvaW5EaWFncmFtXCIgc3R5bGU9XCJ3aWR0aDoyMDAwcHg7aGVpZ2h0OjEyMDBweDtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MXB4IHNvbGlkICNjY2M7XCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicHJvY2VkdXJlLW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudCBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BZGQgU3RvcmVkIFByb2M8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMiBjb250cm9sLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlYXJjaCBmb3JcclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGRhdGEtYmluZD1cInZhbHVlOiBzZWFyY2hQcm9jZWR1cmVUZXJtXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggc3RvcmVkIHByb2NlZHVyZXMgYnkgbmFtZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogc2VhcmNoU3RvcmVkUHJvY2VkdXJlXCI+U2VhcmNoPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUgZy0zXCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjBweDtcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBmb3VuZFByb2NlZHVyZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1jYXRlZ29yeSBjYXJkXCIgc3R5bGU9XCJmbG9hdDpsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBjbGVhcmZpeFwiIHN0eWxlPVwiXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBUYWJsZU5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWwteHNcIj5Qcm9jZWR1cmU8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbVwiIHRpdGxlPVwiU2F2ZSB0aGlzIFByb2NlZHVyZVwiIGRhdGEtYmluZD1cImNsaWNrOiBmdW5jdGlvbigpeyRyb290LnNhdmVQcm9jZWR1cmUoJGRhdGEuVGFibGVOYW1lLCB0cnVlKTt9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtc2F2ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwdWxsLXJpZ2h0XCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGRhdGEtYmluZD1cImF0dHI6IHsnZGF0YS1icy10YXJnZXQnOiAnI3NwXycrJGluZGV4KCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImF0dHI6IHtpZDogJ3NwXycrJGluZGV4KCl9XCIgY2xhc3M9XCJwYW5lbC1jb2xsYXBzZSBjb2xsYXBzZSBpblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgTmFtZTxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzbWFsbFwiPkNvbHVtbnM8L2xhYmVsPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiZWRpdGFibGU6IERpc3BsYXlOYW1lXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IEZpZWxkVHlwZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwic21hbGxcIj5QYXJhbWV0ZXJzPC9sYWJlbD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxpc3QtZ3JvdXBcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBQYXJhbWV0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBEaXNwbGF5TmFtZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiBQYXJhbWV0ZXJEYXRhVHlwZVN0cmluZ1wiPjwvc3Bhbj48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgVmFsdWU6IDxzcGFuIGRhdGEtYmluZD1cImVkaXRhYmxlOiBQYXJhbWV0ZXJWYWx1ZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJwYXJhbWV0ZXItbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCIgZGF0YS1iaW5kPVwid2l0aDogZWRpdFBhcmFtZXRlcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJteU1vZGFsTGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICBNYW5hZ2VcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZGF0YS1iaW5kPVwidGV4dDogUGFyYW1ldGVyTmFtZVwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2g0PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxwPkNob29zZSBvcHRpb25zIHRoYXQgd2lsbCBkZXRlcm1pbmUgaG93IHVzZXJzIGludGVyYWN0IHdpdGggdGhpcyBwYXJhbWV0ZXIgb24gUmVwb3J0czwvcD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJhdHRyOntwbGFjZWhvbGRlcjonRXggRmlyc3QgTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBGaXJzdCBOYW1lXCI+RGlzcGxheSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCB0ZXh0LWJveCBzaW5nbGUtbGluZVwiIGRhdGEtdmFsPVwidHJ1ZVwiIGRhdGEtdmFsLXJlcXVpcmVkPVwiVGhlIERpc3BsYXlOYW1lIGZpZWxkIGlzIHJlcXVpcmVkLlwiIG5hbWU9XCJEaXNwbGF5TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJGaXJzdCBOYW1lXCIgZGF0YS1iaW5kPVwidmFsdWU6IERpc3BsYXlOYW1lLCBhdHRyOntwbGFjZWhvbGRlcjonRXggRmlyc3QgTmFtZSd9XCIgcGxhY2Vob2xkZXI9XCJFeCBGaXJzdCBOYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJUaGlzIGlzIGEgZnJpZW5kbHkgbmFtZSB0byBkaXNwbGF5IHRvIHlvdXIgdXNlcnNcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+RGVmYXVsdCBWYWx1ZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJlZGl0YWJsZTogUGFyYW1ldGVyVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+SGlkZGVuIFBhcmFtZXRlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiY2hlY2stYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgdHlwZT1cImNoZWNrYm94XCIgdmFsdWU9XCJ0cnVlXCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogSGlkZGVuLCBlbmFibGU6IFBhcmFtZXRlclZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRyb2wtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCIgZGF0YS1iaW5kPVwiXCI+UmVxdWlyZWQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImNoZWNrLWJveFwiIGRhdGEtdmFsPVwidHJ1ZVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6UmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJcIj5Vc2UgTG9va3VwIFRhYmxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJjaGVjay1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJjaGVja2JveFwiIHZhbHVlPVwidHJ1ZVwiIGRhdGEtYmluZD1cImNoZWNrZWQ6Rm9yZWlnbktleVwiPjxpbnB1dCBuYW1lPVwiRm9yZWlnbktleVwiIHR5cGU9XCJoaWRkZW5cIiB2YWx1ZT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgdGl0bGU9XCJVc2luZyBsb29rdXAgdGFibGUgYWxsb3dzIGZyaWVuZGx5IHNlbGVjdGlvbiBpbiByZXBvcnQgdXNpbmcgYSBEcm9wZG93biBMaXN0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCB0YmxFbXBsb3llZXMnfVwiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPkxvb2t1cCBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogSm9pblRhYmxlLCB2aXNpYmxlOkZvcmVpZ25LZXkoKSwgb3B0aW9uczogJHJvb3QuUHJvY2VkdXJlcy50YWJsZXMsIG9wdGlvbnNUZXh0OiAnVGFibGVOYW1lJ1wiIHBsYWNlaG9sZGVyPVwiRXggdGJsRW1wbG95ZWVzXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmaWVsZC12YWxpZGF0aW9uLXZhbGlkIGhlbHAtaW5saW5lIGluZGVudFwiIGRhdGEtdmFsbXNnLWZvcj1cIkZvcmVpZ25UYWJsZVwiIGRhdGEtdmFsbXNnLXJlcGxhY2U9XCJ0cnVlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250cm9sLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbCwgcGxhY2Vob2xkZXI6ICdFeCBFbXBsb3llZUlkJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+TG9va3VwIEtleSBGaWVsZDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBuYW1lPVwiRm9yZWlnbktleUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduS2V5RmllbGQsIHZpc2libGU6Rm9yZWlnbktleSgpLCBhdHRyOiB7cmVxdWlyZWQ6IEZvcmVpZ25LZXkoKT8nVHJ1ZSc6bnVsbH1cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlSWRcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCI+PC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInZpc2libGU6Rm9yZWlnbktleSgpXCIgZGF0YS1icy10b2dnbGU9XCJ0b29sdGlwXCIgZGF0YS1icy1wbGFjZW1lbnQ9XCJyaWdodFwiIGNsYXNzPVwiZmEgZmEtcXVlc3Rpb24tY2lyY2xlIGhlbHB0aXBcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgdGl0bGU9XCJGb3JlaWduIEtleSBmaWVsZCBpcyBhIENvbHVtbiBmcm9tIHRoZSBGb3JlaWduIHRhYmxlIHdoaWNoIGlzIHVzZWQgYXMgdGhlIEtleSBmaWVsZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udHJvbC1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKSwgYXR0cjoge3JlcXVpcmVkOiBGb3JlaWduS2V5KCk/J1RydWUnOm51bGwsIHBsYWNlaG9sZGVyOiAnRXggRW1wbG95ZWVOYW1lJ31cIiBwbGFjZWhvbGRlcj1cIkV4IEVtcGxveWVlTmFtZVwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIj5Mb29rdXAgVmFsdWUgRmllbGQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IGNvbC1zbS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgbmFtZT1cIkZvcmVpZ25WYWx1ZUZpZWxkXCIgZGF0YS1iaW5kPVwib3B0aW9uczogSm9pblRhYmxlKCkuQ29sdW1ucywgb3B0aW9uc1RleHQ6ICdDb2x1bW5OYW1lJywgb3B0aW9uc1ZhbHVlOiAnQ29sdW1uTmFtZScsIHZhbHVlOiBGb3JlaWduVmFsdWVGaWVsZCwgdmlzaWJsZTpGb3JlaWduS2V5KCksIGF0dHI6IHtyZXF1aXJlZDogRm9yZWlnbktleSgpPydUcnVlJzpudWxsfVwiIHBsYWNlaG9sZGVyPVwiRXggRW1wbG95ZWVOYW1lXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOkZvcmVpZ25LZXkoKVwiIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiIGRhdGEtYnMtcGxhY2VtZW50PVwicmlnaHRcIiBjbGFzcz1cImZhIGZhLXF1ZXN0aW9uLWNpcmNsZSBoZWxwdGlwXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIHRpdGxlPVwiTG9va3VwIFZhbHVlIGZpZWxkIGlzIGEgQ29sdW1uIGZyb20gdGhlIExvb2t1cCB0YWJsZSB3aGljaCBpcyB1c2VkIHRvIGRpc3BsYXkgdGhlIHZhbHVlIHRvIHRoZSBVc2VyIGluIHRoZSBSZXBvcnQgRGVzaWduZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwicm9sZS1hY2Nlc3MtbW9kYWxcIiByb2xlPVwiZGlhbG9nXCIgdGFiaW5kZXg9XCItMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBlZGl0QWxsb3dlZFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5NYW5hZ2UgQWNjZXNzIGJ5IFJvbGVzPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+Q2hvb3NlIFVzZXIgUm9sZXMgdGhhdCB3aWxsIGhhdmUgQWNjZXNzPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwic21hbGxcIj5Ob3RlOiBBbGwgVXNlcnMgd2lsbCBoYXZlIGFjY2VzcyBpZiBubyByZXN0cmljdGVkIHJvbGVzIGFyZSBzZXR1cDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiAkcm9vdC5hbGxSb2xlcygpLmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz5ObyByb2xlcyBhdmFpbGFibGUuPC9zdHJvbmc+IFBsZWFzZSBhZGQgcm9sZXMgZmlyc3QuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwiaWY6ICRyb290LmFsbFJvbGVzKCkubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cFwiIGRhdGEtYmluZD1cImZvcmVhY2g6ICRyb290LmFsbFJvbGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgc3R5bGU9XCJwYWRkaW5nOiAycHggMTBweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwidmFsdWU6ICRkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6ICRyb290LmVkaXRBbGxvd2VkUm9sZXMoKS5BbGxvd2VkUm9sZXNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiAkZGF0YVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+RG9uZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImNhdGVnb3J5LW1hbmFnZS1tb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiB0YWJpbmRleD1cIi0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZ1wiIHJvbGU9XCJkb2N1bWVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IG1hbmFnZUNhdGVnb3JpZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+TWFuYWdlIENhdGVnb3JpZXMgZm9yIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IFRhYmxlTmFtZVwiPjwvc3Bhbj48L2I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzYmxlOiAkcm9vdC5DYXRlZ29yaWVzKCkubGVudGggPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBObyBjYXRlZ29yaWVzIGhhdmUgYmVlbiBzZXQgdXAgeWV0LlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwXCIgZGF0YS1iaW5kPVwiZm9yZWFjaDogJHJvb3QuQ2F0ZWdvcmllc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3ggbGlzdC1ncm91cC1pdGVtXCIgc3R5bGU9XCJwYWRkaW5nLXRvcDogMnB4OyBwYWRkaW5nLWJvdHRvbTogMnB4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiAkcGFyZW50LkNhdGVnb3JpZXMsIGNoZWNrZWRWYWx1ZTogJGRhdGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IE5hbWVcIj48L3NwYW4+IDwhLS0gRGlzcGxheSBjYXRlZ29yeSBuYW1lIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5Eb25lPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcblxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImNhdGVnb3J5LW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIHRhYmluZGV4PVwiLTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIiByb2xlPVwiZG9jdW1lbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YiBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+TWFuYWdlIENhdGVnb3JpZXM8L2I+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICAgICAgWW91IGNhbiBvcmdhbml6ZSB0aGUgZGlzcGxheSBvZiB0YWJsZXMgaW4gdGhlIFJlcG9ydCBEZXNpZ25lciBieSBhc3NpZ25pbmcgY2F0ZWdvcmllcyBoZXJlLlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBUYWJsZSBmb3IgQ2F0ZWdvcmllcyAtLT5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLWJvcmRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+Q2F0ZWdvcnkgTmFtZTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkFjdGlvbnM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6ICRyb290LkNhdGVnb3JpZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBOYW1lLCB2aXNpYmxlOiAkcm9vdC5lZGl0aW5nQ2F0ZWdvcnlJbmRleCgpID09PSAkaW5kZXgoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cImNhdC1uYW1lXCIgZGF0YS1iaW5kPVwidGV4dDogTmFtZSwgdmlzaWJsZTogJHJvb3QuZWRpdGluZ0NhdGVnb3J5SW5kZXgoKSAhPT0gJGluZGV4KCksIGF0dHI6IHsgaWQ6IElkID8gJ2NhdC1uYW1lLScgKyBJZCA6dW5kZWZpbmVkIH1cIiBzdHlsZT1cImNvbG9yOiAjNmM3NTdkO1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZGF0YS1iaW5kPVwidmFsdWU6IERlc2NyaXB0aW9uLCB2aXNpYmxlOiAkcm9vdC5lZGl0aW5nQ2F0ZWdvcnlJbmRleCgpID09PSAkaW5kZXgoKVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpZD1cImNhdC1kZXNjXCIgZGF0YS1iaW5kPVwidGV4dDogRGVzY3JpcHRpb24sIHZpc2libGU6ICRyb290LmVkaXRpbmdDYXRlZ29yeUluZGV4KCkgIT09ICRpbmRleCgpLCBhdHRyOiB7IGlkOiBJZCA/ICdjYXQtZGVzYy0nICsgSWQgOnVuZGVmaW5lZCB9XCIgc3R5bGU9XCJjb2xvcjogIzZjNzU3ZDtcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiAkcm9vdC5lZGl0aW5nQ2F0ZWdvcnlJbmRleCgpICE9PSAkaW5kZXgoKSAmJiBJZCAhPT0gMCwgY2xpY2s6IGZ1bmN0aW9uKCkgeyAkcm9vdC50b2dnbGVFZGl0KCRpbmRleCgpKSB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzIGJ0bi1zbVwiIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmVkaXRpbmdDYXRlZ29yeUluZGV4KCkgPT09ICRpbmRleCgpICYmIElkICE9PSAwLCBjbGljazogZnVuY3Rpb24oKSB7ICRyb290LnNhdmVDYXRlZ29yeSgkaW5kZXgoKSkgfVwiIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDVweDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zYXZlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWRhbmdlciBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QucmVtb3ZlQ2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICA8dGZvb3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiAkcm9vdC5uZXdDYXRlZ29yeU5hbWVcIiBwbGFjZWhvbGRlcj1cIkNhdGVnb3J5IE5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInRleHRcIiBkYXRhLWJpbmQ9XCJ2YWx1ZTogJHJvb3QubmV3Q2F0ZWdvcnlEZXNjcmlwdGlvblwiIHBsYWNlaG9sZGVyPVwiRGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3QuYWRkQ2F0ZWdvcnlcIj5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90Zm9vdD5cclxuICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5zYXZlQ2F0ZWdvcmllc1wiPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkRvbmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiYWRkLWNvbm5lY3Rpb24tbW9kYWxcIiByb2xlPVwiZGlhbG9nXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCIgcm9sZT1cImRvY3VtZW50XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIiBkYXRhLWJpbmQ9XCJ3aXRoOiBuZXdEYXRhQ29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiPjxzcGFuIGRhdGEtYmluZD1cInRleHQ6ICRyb290LmVkaXRpbmdEYXRhQ29ubmVjdGlvbigpID8gJ0VkaXQnIDogJ0FkZCBhIG5ldydcIj48L3NwYW4+IERhdGEgQ29ubmVjdGlvbjwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPHA+Q2hvb3NlIFVzZXIgUm9sZXMgdGhhdCB3aWxsIGhhdmUgQWNjZXNzPC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiPk5vdGU6IEFsbCBVc2VycyB3aWxsIGhhdmUgYWNjZXNzIGlmIG5vIHJlc3RyaWN0ZWQgcm9sZXMgYXJlIHNldHVwPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbC1zbS0zIGNvbnRyb2wtbGFiZWxcIj5Db25uZWN0aW9uIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGV4dC1ib3hcIiBkYXRhLXZhbD1cInRydWVcIiBkYXRhLXZhbC1yZXF1aXJlZD1cIkNvbm5lY3Rpb24gTmFtZSBpcyByZXF1aXJlZC5cIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBOYW1lXCIgcGxhY2Vob2xkZXI9XCJcIiBpZD1cImFkZC1jb25uLW5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTMgY29udHJvbC1sYWJlbFwiPkNvbm5lY3Rpb24gS2V5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtYm94XCIgZGF0YS12YWw9XCJ0cnVlXCIgZGF0YS12YWwtcmVxdWlyZWQ9XCJDb25uZWN0aW9uIEtleSBpcyByZXF1aXJlZC5cIiB0eXBlPVwidGV4dFwiIGRhdGEtYmluZD1cInZhbHVlOiBDb25uZWN0aW9uS2V5XCIgcGxhY2Vob2xkZXI9XCJcIiBpZD1cImFkZC1jb25uLWtleVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVGhpcyBpcyB0aGUgQ29ubmVjdGlvbiBLZXkgaW4geW91ciBhcHBsaWNhdGlvbiBzZXR0aW5ncyBmb3IgeW91ciBTUUwgQ29ubmVjdGlvbiBTdHJpbmdcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6ICRyb290LmVkaXRpbmdEYXRhQ29ubmVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1ib3ggY29sLW1kLTkgY29sLXNtLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IFVzZVNjaGVtYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIFNjaGVtYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLWJzLXBsYWNlbWVudD1cInJpZ2h0XCIgY2xhc3M9XCJmYSBmYS1xdWVzdGlvbi1jaXJjbGUgaGVscHRpcFwiIHRpdGxlPVwiVXNlIFNjaGVtYSBpbiBTUUwgd2hlbiBidWlsZGluZyBxdWVyeVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCIgZGF0YS1iaW5kPVwiaGlkZGVuOiAkcm9vdC5lZGl0aW5nRGF0YUNvbm5lY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2stYm94IGNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgZGF0YS1iaW5kPVwiY2hlY2tlZDogY29weVNjaGVtYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29weSBTY2hlbWEgZnJvbSBleGlzdGluZyBDb25uZWN0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiIGRhdGEtYmluZD1cInZpc2libGU6IGNvcHlTY2hlbWFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb2wtc20tMyBjb250cm9sLWxhYmVsXCI+Q2hvb3NlIENvbm5lY3Rpb248L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBzdHlsZT1cIm1heC13aWR0aDogMzAwcHg7XCIgZGF0YS1iaW5kPVwib3B0aW9uczogJHJvb3QuRGF0YUNvbm5lY3Rpb25zLCBvcHRpb25zVGV4dDogJ0RhdGFDb25uZWN0TmFtZScsIG9wdGlvbnNWYWx1ZTogJ0RhdGFDb25uZWN0R3VpZCcsIHZhbHVlOiBjb3B5RnJvbVwiPjwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6ICRyb290LnVwZGF0ZURhdGFDb25uZWN0aW9uLCB2aXNpYmxlOiAkcm9vdC5lZGl0aW5nRGF0YUNvbm5lY3Rpb24oKVwiPlVwZGF0ZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5hZGREYXRhQ29ubmVjdGlvbiwgdmlzaWJsZTogISRyb290LmVkaXRpbmdEYXRhQ29ubmVjdGlvbigpXCI+Q3JlYXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGF0YS1wcmV2aWV3LW1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IHByZXZpZXdEYXRhXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+UHJldmlldyBUYWJsZTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZSBwdWxsLXJpZ2h0XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwib3ZlcmZsb3cteDogYXV0bzsgbWF4LWhlaWdodDogNTAwcHg7IG92ZXJmbG93LXk6IGF1dG87XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtc3RyaXBlZCB0YWJsZS1ob3ZlciB0YWJsZS1jb25kZW5zZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIHN0eWxlPVwicG9zaXRpb246IHN0aWNreTsgdG9wOiAtMXB4OyB6LWluZGV4OiAyOyBiYWNrZ3JvdW5kLWNvbG9yOiAjZjhmOWZhO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGRhdGEtYmluZD1cImZvcmVhY2g6IENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IENvbHVtbk5hbWUsIGF0dHI6IHsgdGl0bGU6IERhdGFUeXBlLnJlcGxhY2UoJ1N5c3RlbS4nLCAnJykgfVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGRhdGEtYmluZD1cImZvcmVhY2g6IFJvd3NcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBkYXRhLWJpbmQ9XCJmb3JlYWNoOiBJdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS1iaW5kPVwiaHRtbDogRm9ybWF0dGVkVmFsdWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiY3VzdG9tLXNxbC1tb2RhbFwiIHRhYmluZGV4PVwiLTFcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1sYWJlbGxlZGJ5PVwibXlNb2RhbExhYmVsXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgZGF0YS1iaW5kPVwid2l0aDogY3VzdG9tU3FsXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5FbnRlciBTZWxlY3QgU1FMIGZvciB5b3VyIERhdGE8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgZGF0YS1iaW5kPVwidmFsaWRhdGlvbkVsZW1lbnQ6IGN1c3RvbVRhYmxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20tdGFibGUtbmFtZVwiPkN1c3RvbSBUYWJsZSBOYW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJjdXN0b21UYWJsZU5hbWVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHRhYmxlIG5hbWVcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVRhYmxlTmFtZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+Q3VzdG9tIFRhYmxlIE5hbWUgaXMgcmVxdWlyZWQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogdXNlQWlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cCBpZD1cInF1ZXJ5LWlucHV0XCIgY2xhc3M9XCJxdWVyeS1pbnB1dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTaG93IG1lJm5ic3A7XHJcbiAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gZGF0YS1iaW5kPVwiY2xpY2s6IGJ1aWxkU3FsVXNpbmdBaVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPlByb2Nlc3Mgd2l0aCBDaGF0R1BUPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBkYXRhLWJpbmQ9XCJjbGljazogdGV4dFF1ZXJ5LnJlc2V0UXVlcnlcIiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1zbVwiPlN0YXJ0IG92ZXI8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aHIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgZGF0YS1iaW5kPVwidmFsaWRhdGlvbkVsZW1lbnQ6IGN1c3RvbVNxbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjdXN0b20tc3FsXCI+Q3VzdG9tIFNRTDwvbGFiZWw+IHxcclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBkYXRhLWJpbmQ9XCJjaGVja2VkOiBkeW5hbWljQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiB0aXRsZT1cIlNldHVwIGEgdGFibGUgdGhhdCByZXR1cm5zIGR5bmFtaWMgY29sdW1ucyB0byBwaWNrIGZyb21cIj5UYWJsZSB3aXRoIER5bmFtaWMgQ29sdW1uczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPiB8XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cIiNcIiBkYXRhLWJpbmQ9XCJjbGljazogYmVhdXRpZnlTcWxcIj5CZWF1dGlmeSBTcWw8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgc3R5bGU9XCJoZWlnaHQ6IDI0MHB4O1wiIG5hbWU9XCJjdXN0b21TcWxcIiBkYXRhLWJpbmQ9XCJ0ZXh0SW5wdXQ6IGN1c3RvbVNxbFwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIj5DdXN0b20gU1FMIGlzIHJlcXVpcmVkLjwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImlmOiBkeW5hbWljQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QWRkIFNRTCBjb2RlIHRvIHVzZSB0aGUgZHluYW1pYyBjb2x1bW48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBzdHlsZT1cImhlaWdodDogMjQwcHg7XCIgbmFtZT1cImNvbHVtblRyYW5zbGF0aW9uXCIgZGF0YS1iaW5kPVwidGV4dElucHV0OiBjb2x1bW5UcmFuc2xhdGlvblwiIHJlcXVpcmVkPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QaWNrIFZhbHVlcyBUYWJsZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdCBpbnB1dC1tZWRpdW1cIiBkYXRhLWJpbmQ9XCJvcHRpb25zOiAkcm9vdC5UYWJsZXMuYXZhaWxhYmxlVGFibGVzLCBvcHRpb25zVGV4dDogJ0Rpc3BsYXlOYW1lJywgb3B0aW9uc1ZhbHVlOiAnSWQnLCBvcHRpb25zQ2FwdGlvbjogJ0Nob29zZSBWYWx1ZXMgVGFibGUuLi4nLCB2YWx1ZTogZHluYW1pY1ZhbHVlc1RhYmxlSWRcIj48L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiBleGVjdXRlU3FsXCI+U2F2ZSBjaGFuZ2VzPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBJbXBvcnQgVGFibGVzL1ZpZXdzIEpzb24gRmlsZSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJ1cGxvYWRUYWJsZXNGaWxlTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwidXBsb2FkVGFibGVzRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZVRhYmxlc0pzb25GaWxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJ1cGxvYWRUYWJsZXNGaWxlTW9kYWxMYWJlbFwiPkltcG9ydCBUYWJsZXMvVmlld3MgKFByZXZpb3VzbHkgRXhwb3J0ZWQpPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZHJvcHpvbmVcIiBjbGFzcz1cImRyb3B6b25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiZXZlbnQ6IHtjbGljazogdHJpZ2dlclRhYmxlc0ZpbGVJbnB1dCB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJib3JkZXI6IDJweCBkYXNoZWQgIzAwN2JmZjsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAzMHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjMDA3YmZmOyBjdXJzb3I6IHBvaW50ZXI7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgY2xpY2sgdG8gc2VsZWN0IEpzb24gZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImZpbGVcIiBpZD1cInRhYmxlc0ZpbGVJbnB1dEpzb25cIiBhY2NlcHQ9XCIuanNvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJldmVudDogeyBjaGFuZ2U6IGhhbmRsZVRhYmxlc0ZpbGVTZWxlY3QgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmaWxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdGVkIFRhYmxlcy9WaWV3cyBGaWxlOiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWxlTmFtZVwiPjwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiB1cGxvYWRUYWJsZXNGaWxlXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBJbXBvcnQgSm9pbnMgSnNvbiBGaWxlIE1vZGFsIC0tPlxyXG48ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInVwbG9hZEpvaW5zRmlsZU1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cInVwbG9hZEpvaW5zRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZUpvaW5zSnNvbkZpbGVcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInVwbG9hZEpvaW5zRmlsZU1vZGFsTGFiZWxcIj5JbXBvcnQgSm9pbnMgKFByZXZpb3VzbHkgRXhwb3J0ZWQpPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiZHJvcHpvbmVcIiBjbGFzcz1cImRyb3B6b25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiZXZlbnQ6IHtjbGljazogdHJpZ2dlckpvaW5zRmlsZUlucHV0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IGRhc2hlZCAjMDA3YmZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDMwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMwMDdiZmY7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICBjbGljayB0byBzZWxlY3QgSnNvbiBmaWxlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwiam9pbnNGaWxlSW5wdXRKc29uXCIgYWNjZXB0PVwiLmpzb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgZGF0YS1iaW5kPVwiZXZlbnQ6IHsgY2hhbmdlOiBoYW5kbGVKb2luc0ZpbGVTZWxlY3QgfVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBkYXRhLWJpbmQ9XCJ2aXNpYmxlOiBmaWxlTmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPlNlbGVjdGVkIEpvaW5zIEZpbGU6IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpbGVOYW1lXCI+PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgZGF0YS1iaW5kPVwiY2xpY2s6IHVwbG9hZEpvaW5zRmlsZVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPCEtLSBJbXBvcnQgU3RvcmVkUHJvY2VkdXJlcyBKc29uIEZpbGUgTW9kYWwgLS0+XHJcbjxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwidXBsb2FkU3RvcmVkUHJvY2VkdXJlc0ZpbGVNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWxhYmVsbGVkYnk9XCJ1cGxvYWRTdG9yZWRQcm9jZWR1cmVzRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZVN0b3JlZFByb2NlZHVyZXNKc29uRmlsZVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwidXBsb2FkU3RvcmVkUHJvY2VkdXJlc0ZpbGVNb2RhbExhYmVsXCI+SW1wb3J0IFN0b3JlZCBQcm9jZWR1cmVzIChQcmV2aW91c2x5IEV4cG9ydGVkKTwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImRyb3B6b25lXCIgY2xhc3M9XCJkcm9wem9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImV2ZW50OiB7Y2xpY2s6IHRyaWdnZXJTdG9yZWRQcm9jZWR1cmVzRmlsZUlucHV0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IGRhc2hlZCAjMDA3YmZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDMwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMwMDdiZmY7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICBjbGljayB0byBzZWxlY3QgSnNvbiBmaWxlXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZmlsZVwiIGlkPVwic3RvcmVkUHJvY2VkdXJlc0ZpbGVJbnB1dEpzb25cIiBhY2NlcHQ9XCIuanNvblwiIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBkYXRhLWJpbmQ9XCJldmVudDogeyBjaGFuZ2U6IGhhbmRsZVN0b3JlZFByb2NlZHVyZXNGaWxlU2VsZWN0IH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidmlzaWJsZTogZmlsZU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5TZWxlY3RlZCBTdG9yZWQgUHJvY2VkdXJlcyBGaWxlOiA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmaWxlTmFtZVwiPjwvc3Bhbj48L3A+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiB1cGxvYWRTdG9yZWRQcm9jZWR1cmVzRmlsZVwiPlVwbG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJzZWFyY2hNb2RhbFwiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBkYXRhLWJpbmQ9XCJ3aXRoOiAkcm9vdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC14bCBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCI+QnVsayBNYW5hZ2UgUmVwb3J0cyBBY2Nlc3MgYW5kIEV4cG9ydDwvaDU+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBnYXAtMiBtYi00IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUmVwb3J0c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cInZhbHVlOiBzZWFyY2hRdWVyeSwgdmFsdWVVcGRhdGU6ICdpbnB1dCdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5IGZsZXgtc2hyaW5rLTBcIiB0aXRsZT1cIlNlbGVjdCBhbGwgRmlsdGVyZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS1iaW5kPVwiY2xpY2s6IHNlbGVjdEFsbEZpbHRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdCBBbGxcclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnkgZmxleC1zaHJpbmstMFwiIHRpdGxlPVwiRGVzZWxlY3QgYWxsIEZpbHRlcmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtYmluZD1cImNsaWNrOiBkZXNlbGVjdEFsbEZpbHRlcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIERlc2VsZWN0IEFsbFxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtYmluZD1cImZvcmVhY2g6IGZpbHRlcmVkUmVwb3J0c0FuZEZvbGRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmdy1ib2xkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctNTAgZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGFsbFJlcG9ydHNTZWxlY3RlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkYXRhLWJpbmQ9XCJ0ZXh0OiBmb2xkZXJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIj5WaWV3PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIj5NYW5hZ2U8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yNVwiPkRlbGV0ZTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTI1XCI+Q2xpZW50IElEPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUmVwb3J0cyBMaXN0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIiBkYXRhLWJpbmQ9XCJmb3JlYWNoOiByZXBvcnRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy01MCBmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGRhdGEtYmluZD1cImNoZWNrZWQ6IGlzU2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IHJlcG9ydE5hbWVcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSB0ZXh0LWJnLWluZm8gdGV4dC13aGl0ZVwiIGRhdGEtYmluZD1cInRleHQ6IHZpZXdPbmx5VXNlclJvbGUgPyB2aWV3T25seVVzZXJSb2xlOiAnQW55IFVzZXInXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMjVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgdGV4dC1iZy1pbmZvIHRleHQtd2hpdGVcIiBkYXRhLWJpbmQ9XCJ0ZXh0OiB1c2VyUm9sZSA/IHVzZXJSb2xlIDogJ0FueSBVc2VyJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogZGVsZXRlT25seVVzZXJSb2xlID8gZGVsZXRlT25seVVzZXJSb2xlIDogJ0FueSBVc2VyJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIHRleHQtYmctaW5mbyB0ZXh0LXdoaXRlXCIgZGF0YS1iaW5kPVwidGV4dDogY2xpZW50SWQgPyBjbGllbnRJZCA6ICdBbnkgVXNlcidcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtMiB0ZXh0LW11dGVkXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogcmVwb3J0cy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIG1hdGNoaW5nIHJlcG9ydHMgZm91bmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeVwiIGRhdGEtYnMtZGlzbWlzcz1cIm1vZGFsXCI+Q2xvc2U8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIiBkYXRhLWJpbmQ9XCJjbGljazogZXhwb3J0Rm9sZGVyc1JlcG9ydEpzb25cIj5FeHBvcnQgU2VsZWN0ZWQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJpbmQ9XCJjbGljazogJHJvb3Qub3BlbkFwcGx5U2VjdXJpdHlNb2RhbCwgZW5hYmxlOiAkcm9vdC5hbnlSZXBvcnRTZWxlY3RlZFwiPkFwcGx5IFNlY3VyaXR5IHRvIEFsbCBTZWxlY3RlZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5kZWxldGVTZWxlY3RlZEl0ZW1zLCBlbmFibGU6ICRyb290LmFueVJlcG9ydFNlbGVjdGVkXCI+RGVsZXRlIEFsbCBTZWxlY3RlZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJhcHBseVNlY3VyaXR5TW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWxnXCIgZGF0YS1iaW5kPVwiaWY6ICRyb290LmFueVJlcG9ydFNlbGVjdGVkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5BcHBseSBTZWN1cml0eSB0byBBbGwgU2VsZWN0ZWQ8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZGF0YS1iaW5kPVwidGVtcGxhdGU6IHsgbmFtZTogJ21hbmFnZS1hY2Nlc3MtdGVtcGxhdGUnLCBkYXRhOiAkcm9vdC5tYW5hZ2VBY2Nlc3MgfVwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIj5DbG9zZTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiAkcm9vdC5hcHBseVNlY3VyaXR5VG9BbGxcIj5BcHBseSB0byBBbGw8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbjwhLS0gSW1wb3J0IEpzb24gRmlsZSBNb2RhbCAtLT5cclxuPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJ1cGxvYWRGaWxlTW9kYWxcIiB0YWJpbmRleD1cIi0xXCIgYXJpYS1sYWJlbGxlZGJ5PVwidXBsb2FkRmlsZU1vZGFsTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiIGRhdGEtYmluZD1cIndpdGg6IE1hbmFnZUpzb25GaWxlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJ1cGxvYWRGaWxlTW9kYWxMYWJlbFwiPkltcG9ydCBwcmV2aW91c2x5IEV4cG9ydGVkIFJlcG9ydHM8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2VcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPjwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mbyBzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+SW5zdHJ1Y3Rpb25zOjwvc3Ryb25nPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIOKAoiBTZWxlY3QgYSA8Y29kZT4uanNvbjwvY29kZT4gZmlsZSBwcmV2aW91c2x5IGV4cG9ydGVkIGZyb20gRG90bmV0IFJlcG9ydC48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICDigKIgVGhlIGZpbGUgbWF5IGluY2x1ZGUgbXVsdGlwbGUgcmVwb3J0cyBhbmQgdGhlaXIgZm9sZGVycy48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICDigKIgQW55IG1pc3NpbmcgZm9sZGVycyB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseS48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICDigKIgSWYgYSByZXBvcnQgd2l0aCB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzLCB5b3Ugd2lsbCBiZSBwcm9tcHRlZCB0bzpcclxuICAgICAgICAgICAgICAgICAgICA8ZW0+U2tpcDwvZW0+LCA8ZW0+T3ZlcndyaXRlPC9lbT4sIG9yIDxlbT5NYWtlIGEgQ29weTwvZW0+LjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgIOKAoiBPbmNlIHVwbG9hZGVkLCBhbGwgaW1wb3J0ZWQgcmVwb3J0cyB3aWxsIGJlIGF2YWlsYWJsZSBpbW1lZGlhdGVseS5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJkcm9wem9uZVwiIGNsYXNzPVwiZHJvcHpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJldmVudDoge2NsaWNrOiB0cmlnZ2VyRmlsZUlucHV0IH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMnB4IGRhc2hlZCAjMDA3YmZmOyBib3JkZXItcmFkaXVzOiA1cHg7IHBhZGRpbmc6IDMwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICMwMDdiZmY7IGN1cnNvcjogcG9pbnRlcjtcIj5cclxuICAgICAgICAgICAgICAgICAgICBDbGljayBoZXJlIHRvIHNlbGVjdCBhIEpTT04gZmlsZVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJmaWxlXCIgaWQ9XCJmaWxlSW5wdXRKc29uXCIgYWNjZXB0PVwiLmpzb25cIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICBkYXRhLWJpbmQ9XCJldmVudDogeyBjaGFuZ2U6IGhhbmRsZUZpbGVTZWxlY3QgfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgZGF0YS1iaW5kPVwidmlzaWJsZTogZmlsZU5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPlNlbGVjdGVkIEZpbGU6PC9zdHJvbmc+IDxzcGFuIGRhdGEtYmluZD1cInRleHQ6IGZpbGVOYW1lXCI+PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIGRhdGEtYmluZD1cImNsaWNrOiB1cGxvYWRGaWxlXCI+VXBsb2FkPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+XHJcbjxkaXYgW2lubmVySHRtbF09XCJyZXBvcnRUZW1wbGF0ZXNcIj48L2Rpdj5cclxuPCEtLSBUZW1wbGF0ZXMgLS0+Il19