ezlibrary_v2 0.0.53 → 0.0.54
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.
- package/esm2020/lib/system-module/system/system.component.mjs +100 -8
- package/fesm2015/ezlibrary_v2.mjs +99 -7
- package/fesm2015/ezlibrary_v2.mjs.map +1 -1
- package/fesm2020/ezlibrary_v2.mjs +99 -7
- package/fesm2020/ezlibrary_v2.mjs.map +1 -1
- package/lib/system-module/system/system.component.d.ts +11 -2
- package/package.json +1 -1
|
@@ -63,6 +63,14 @@ export class SystemComponent {
|
|
|
63
63
|
this.applicationList = [];
|
|
64
64
|
this.app = '';
|
|
65
65
|
this.v = '';
|
|
66
|
+
this.v1 = '';
|
|
67
|
+
this.v2 = '';
|
|
68
|
+
this.v3 = '';
|
|
69
|
+
this.level = '';
|
|
70
|
+
this.mdllist = [];
|
|
71
|
+
this.menulvl1List = [];
|
|
72
|
+
this.menulvl2List = [];
|
|
73
|
+
this.menulvl3List = [];
|
|
66
74
|
//for set null to table cell
|
|
67
75
|
this.closeNull = () => this.tbCell = null;
|
|
68
76
|
//reseting form
|
|
@@ -965,18 +973,102 @@ export class SystemComponent {
|
|
|
965
973
|
});
|
|
966
974
|
}
|
|
967
975
|
fillModule(applId) {
|
|
976
|
+
if (applId == '') {
|
|
977
|
+
this.mdllist = [];
|
|
978
|
+
this.menulvl1List = [];
|
|
979
|
+
this.menulvl2List = [];
|
|
980
|
+
this.menulvl3List = [];
|
|
981
|
+
this.toastr.warning('Please Select Application');
|
|
982
|
+
}
|
|
983
|
+
else {
|
|
984
|
+
this.spinnerService.show();
|
|
985
|
+
const reqObj = {};
|
|
986
|
+
reqObj["formNme"] = this.route.snapshot.params['frmnme'];
|
|
987
|
+
reqObj["applcationIdn"] = applId;
|
|
988
|
+
this.header['method'] = 'loadModule';
|
|
989
|
+
const options = ({ headers: new HttpHeaders(this.header) });
|
|
990
|
+
this.as.getMenuRights(reqObj, options).then((response) => {
|
|
991
|
+
console.log(response);
|
|
992
|
+
if (response.status == 'SUCCESS') {
|
|
993
|
+
this.mdllist = response.moduleList;
|
|
994
|
+
this.spinnerService.hide();
|
|
995
|
+
}
|
|
996
|
+
else {
|
|
997
|
+
this.spinnerService.hide();
|
|
998
|
+
this.toastr.error(response.message);
|
|
999
|
+
}
|
|
1000
|
+
}).catch((err) => {
|
|
1001
|
+
this.spinnerService.hide();
|
|
1002
|
+
this.toastr.error(err.message);
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
fillLevel1(module_idn) {
|
|
968
1007
|
this.spinnerService.show();
|
|
1008
|
+
console.log(module_idn);
|
|
969
1009
|
const reqObj = {};
|
|
970
|
-
reqObj["formNme"] =
|
|
971
|
-
reqObj["
|
|
972
|
-
this.header['method'] = '
|
|
1010
|
+
reqObj["formNme"] = "menuRightsMaster";
|
|
1011
|
+
reqObj["moduleIdn"] = module_idn;
|
|
1012
|
+
this.header['method'] = 'loadMenulevel1';
|
|
1013
|
+
const options = ({ headers: new HttpHeaders(this.header) });
|
|
1014
|
+
this.as.getMenuRights(reqObj, options).then((response) => {
|
|
1015
|
+
console.log(response);
|
|
1016
|
+
if (response.status == 'SUCCESS') {
|
|
1017
|
+
this.menulvl2List = [];
|
|
1018
|
+
this.menulvl3List = [];
|
|
1019
|
+
this.menulvl1List = response.kv;
|
|
1020
|
+
this.spinnerService.hide();
|
|
1021
|
+
}
|
|
1022
|
+
else {
|
|
1023
|
+
this.spinnerService.hide();
|
|
1024
|
+
this.toastr.error(response.message);
|
|
1025
|
+
}
|
|
1026
|
+
}).catch((err) => {
|
|
1027
|
+
this.spinnerService.hide();
|
|
1028
|
+
this.toastr.error(err.message);
|
|
1029
|
+
});
|
|
1030
|
+
}
|
|
1031
|
+
fillLevel2(module_idn, menuIdn) {
|
|
1032
|
+
this.spinnerService.show();
|
|
1033
|
+
console.log(module_idn);
|
|
1034
|
+
console.log(menuIdn);
|
|
1035
|
+
const reqObj = {};
|
|
1036
|
+
reqObj["formNme"] = "menuRightsMaster";
|
|
1037
|
+
reqObj["moduleIdn"] = module_idn;
|
|
1038
|
+
reqObj["menuIdn"] = menuIdn;
|
|
1039
|
+
this.header['method'] = 'loadMenulevel2';
|
|
1040
|
+
const options = ({ headers: new HttpHeaders(this.header) });
|
|
1041
|
+
this.as.getMenuRights(reqObj, options).then((response) => {
|
|
1042
|
+
console.log(response);
|
|
1043
|
+
if (response.status == 'SUCCESS') {
|
|
1044
|
+
this.menulvl2List = response.kv;
|
|
1045
|
+
this.menulvl3List = [];
|
|
1046
|
+
this.spinnerService.hide();
|
|
1047
|
+
console.log(this.menulvl2List);
|
|
1048
|
+
}
|
|
1049
|
+
else {
|
|
1050
|
+
this.spinnerService.hide();
|
|
1051
|
+
this.toastr.error(response.message);
|
|
1052
|
+
}
|
|
1053
|
+
}).catch((err) => {
|
|
1054
|
+
this.spinnerService.hide();
|
|
1055
|
+
this.toastr.error(err.message);
|
|
1056
|
+
});
|
|
1057
|
+
}
|
|
1058
|
+
submenuChange(module_idn, submenuIdn) {
|
|
1059
|
+
this.spinnerService.show();
|
|
1060
|
+
const reqObj = {};
|
|
1061
|
+
reqObj["formNme"] = "menuRightsMaster";
|
|
1062
|
+
reqObj["moduleIdn"] = module_idn;
|
|
1063
|
+
reqObj["menuIdn"] = submenuIdn;
|
|
1064
|
+
this.header['method'] = 'loadMenulevel3';
|
|
973
1065
|
const options = ({ headers: new HttpHeaders(this.header) });
|
|
974
1066
|
this.as.getMenuRights(reqObj, options).then((response) => {
|
|
975
1067
|
console.log(response);
|
|
976
1068
|
if (response.status == 'SUCCESS') {
|
|
977
|
-
this.
|
|
978
|
-
this.mdllist = response.moduleList;
|
|
1069
|
+
this.menulvl3List = response.kv;
|
|
979
1070
|
this.spinnerService.hide();
|
|
1071
|
+
console.log(this.menulvl3List);
|
|
980
1072
|
}
|
|
981
1073
|
else {
|
|
982
1074
|
this.spinnerService.hide();
|
|
@@ -998,10 +1090,10 @@ export class SystemComponent {
|
|
|
998
1090
|
}
|
|
999
1091
|
}
|
|
1000
1092
|
/** @nocollapse */ SystemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SystemComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.ToastrService }, { token: i3.SystemServiceService }, { token: i4.NgxSpinnerService }, { token: i5.CommanServiceService }, { token: i6.AdminServiceService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1001
|
-
/** @nocollapse */ SystemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SystemComponent, selector: "app-system", viewQueries: [{ propertyName: "closebtn", first: true, predicate: ["closebtn"], descendants: true }, { propertyName: "deleteclsbtn", first: true, predicate: ["deleteclsbtn"], descendants: true }, { propertyName: "input", first: true, predicate: ["inputs"], descendants: true }, { propertyName: "popclosebtn", first: true, predicate: ["popclosebtn"], descendants: true }, { propertyName: "submitbtn", first: true, predicate: ["submitBtn"], descendants: true }, { propertyName: "productMapclsbtn", first: true, predicate: ["productMapclsbtn"], descendants: true }], ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div [ngClass]=\"isOpen == true ? 'col-md-4' : 'hidden'\">\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <!-- (change)=\"fillLevel1(v)\" -->\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" >\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n\r\n \r\n <select class=\"form-control\">\r\n <option value=\"l1\">Level 1</option>\r\n <option value=\"l2\">Level 2</option>\r\n <option value=\"l3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\r\n <form class=\"form-inline pull-left\"> -->\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </form>\r\n <!-- <label>{{datalist.length}}</label> -->\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"numberInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n #sfi=\"ngModel\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popdatamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFildsPopup | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\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\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of {{attMapModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\"\r\n [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { kind: "component", type: i10.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i11.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "directive", type: i12.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i13.OrderPipe, name: "orderBy" }, { kind: "pipe", type: i11.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i14.SearchPipePipe, name: "searchPipe" }, { kind: "pipe", type: i15.OrderByPipePipe, name: "orderByPipe" }] });
|
|
1093
|
+
/** @nocollapse */ SystemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SystemComponent, selector: "app-system", viewQueries: [{ propertyName: "closebtn", first: true, predicate: ["closebtn"], descendants: true }, { propertyName: "deleteclsbtn", first: true, predicate: ["deleteclsbtn"], descendants: true }, { propertyName: "input", first: true, predicate: ["inputs"], descendants: true }, { propertyName: "popclosebtn", first: true, predicate: ["popclosebtn"], descendants: true }, { propertyName: "submitbtn", first: true, predicate: ["submitBtn"], descendants: true }, { propertyName: "productMapclsbtn", first: true, predicate: ["productMapclsbtn"], descendants: true }], ngImport: i0, template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class='col-md-4'>\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" (change)=\"fillLevel1(v)\">\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"menulvl1List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Main Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v1\" name=\"v1\" (change)=\"fillLevel2(v,v1)\">\r\n <option *ngFor=\"let lov of menulvl1List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl2List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Sub Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v2\" name=\"v2\" (change)=\"submenuChange(v, v2)\">\r\n <option *ngFor=\"let lov of menulvl2List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row form-group\" *ngIf=\"menulvl3List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Page</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v3\" name=\"v3\">\r\n <option *ngFor=\"let lov of menulvl3List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"level\" name=\"level\">\r\n <option value=\"''\">Select</option>\r\n <option value=\"l1\">Level 1</option>\r\n <option value=\"l2\">Level 2</option>\r\n <option value=\"l3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\r\n <form class=\"form-inline pull-left\"> -->\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </form>\r\n <!-- <label>{{datalist.length}}</label> -->\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"numberInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n #sfi=\"ngModel\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popdatamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFildsPopup | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\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\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of {{attMapModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\"\r\n [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.SelectComponent, selector: "ng-select", inputs: ["options", "allowClear", "disabled", "multiple", "noFilter", "notFoundMsg", "placeholder", "filterPlaceholder", "label", "highlightColor", "highlightTextColor"], outputs: ["opened", "closed", "selected", "deselected", "focus", "blur", "noOptionsFound", "filterInputChanged"] }, { kind: "component", type: i10.TagInputComponent, selector: "tag-input", inputs: ["separatorKeys", "separatorKeyCodes", "placeholder", "secondaryPlaceholder", "maxItems", "validators", "asyncValidators", "onlyFromAutocomplete", "errorMessages", "theme", "onTextChangeDebounce", "inputId", "inputClass", "clearOnBlur", "hideForm", "addOnBlur", "addOnPaste", "pasteSplitPattern", "blinkIfDupe", "removable", "editable", "allowDupes", "modelAsStrings", "trimTags", "inputText", "ripple", "tabindex", "disable", "dragZone", "onRemoving", "onAdding", "animationDuration"], outputs: ["onAdd", "onRemove", "onSelect", "onFocus", "onBlur", "onTextChange", "onPaste", "onValidationError", "onTagEdited", "inputTextChange"] }, { kind: "component", type: i11.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "directive", type: i12.AppNoDblClickDirective, selector: "[appAppNoDblClick]" }, { kind: "pipe", type: i7.DatePipe, name: "date" }, { kind: "pipe", type: i13.OrderPipe, name: "orderBy" }, { kind: "pipe", type: i11.PaginatePipe, name: "paginate" }, { kind: "pipe", type: i14.SearchPipePipe, name: "searchPipe" }, { kind: "pipe", type: i15.OrderByPipePipe, name: "orderByPipe" }] });
|
|
1002
1094
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SystemComponent, decorators: [{
|
|
1003
1095
|
type: Component,
|
|
1004
|
-
args: [{ selector: 'app-system', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div [ngClass]=\"isOpen == true ? 'col-md-4' : 'hidden'\">\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <!-- (change)=\"fillLevel1(v)\" -->\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" >\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n\r\n \r\n <select class=\"form-control\">\r\n <option value=\"l1\">Level 1</option>\r\n <option value=\"l2\">Level 2</option>\r\n <option value=\"l3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\r\n <form class=\"form-inline pull-left\"> -->\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </form>\r\n <!-- <label>{{datalist.length}}</label> -->\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"numberInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n #sfi=\"ngModel\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popdatamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFildsPopup | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\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\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of {{attMapModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\"\r\n [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"] }]
|
|
1096
|
+
args: [{ selector: 'app-system', template: "<div class=\"mt\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-heading\">\r\n <h3 class=\"panel-title\">{{pageInfo?.title}}\r\n <span class=\"f-12\">({{cDt | date:'medium'}})</span>\r\n </h3>\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-info pull-right\" *ngIf=\"addNew?.is_compulsory == 1\"\r\n (click)=\"userAction(data, 'add', '');f.reset();\">{{addNew?.form_field_title}}</button>\r\n\r\n\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"router.url != curl\">\r\n <div class=\"col-md-2\" *ngIf=\"navigation.length > 0\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\">\r\n <div class=\"list-group border-bottom\">\r\n <a href=\"javascript:void(0)\" class=\"list-group-item\" [ngClass]=\"{'active' :i == cLink}\"\r\n *ngFor=\"let nav of navigation;let i=index\"\r\n (click)=\"navigationFun(nav,i);\">{{nav.form_field_title}} </a>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"isOpen == true ? 'col-md-4' : 'hidden'\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <div class=\"row form-group\">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Application</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"app\" name=\"app\" (change)=\"fillModule(app)\">\r\n <option *ngFor=\"let lov of applicationList\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class='col-md-4'>\r\n <label class=\"control-label\" style=\"text-align: right\">Module</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v\" name=\"v\" (change)=\"fillLevel1(v)\">\r\n <option *ngFor=\"let lov of mdllist\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row form-group\" *ngIf=\"menulvl1List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Main Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v1\" name=\"v1\" (change)=\"fillLevel2(v,v1)\">\r\n <option *ngFor=\"let lov of menulvl1List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"row form-group\" *ngIf=\"menulvl2List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Sub Menu</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v2\" name=\"v2\" (change)=\"submenuChange(v, v2)\">\r\n <option *ngFor=\"let lov of menulvl2List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row form-group\" *ngIf=\"menulvl3List?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Page</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"v3\" name=\"v3\">\r\n <option *ngFor=\"let lov of menulvl3List\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div> -->\r\n <div class=\"row form-group\" *ngIf=\"mdllist?.length > 1 \">\r\n <div class=\"col-md-4\">\r\n <label class=\"control-label\" style=\"text-align: right\">Level</label>\r\n </div>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control\" [(ngModel)]=\"level\" name=\"level\">\r\n <option value=\"''\">Select</option>\r\n <option value=\"l1\">Level 1</option>\r\n <option value=\"l2\">Level 2</option>\r\n <option value=\"l3\">Level 3</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"navigation.length > 0 ? 'col-md-10' : route.snapshot.params['frmnme'] == 'menuMaster' ? isOpen == false ? 'col-md-12' : 'col-md-8' : 'col-md-12'\">\r\n <div class=\"panel panel-default\">\r\n <div class=\"panel-body\" [style]=\"route.snapshot.params['frmnme'] == 'menuMaster' ? 'margin-bottom: 35px;' : ''\">\r\n <!-- <div class=\"row\">\r\n <div class=\"col-sm-8\"></div>\r\n <div class=\"col-sm-4\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\" [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div> -->\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-left\" > \r\n <button *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\" class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px; margin-right: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Filter results\" (click)=\"openTog();\">\r\n <span class=\"{{icon}}\" style=\"color:#3b5998;\"></span>\r\n </button>\r\n <!-- </form>\r\n <form class=\"form-inline pull-left\"> -->\r\n <div class=\"form-group\">\r\n <label for=\"ddlPagesize\">Page Size </label>\r\n <select class=\"form-control\" name=\"pageSize\" [(ngModel)]=\"pageSize\"\r\n (change)=\"onPageSizeChange(pageSize)\">\r\n <option value=\"All\">All</option>\r\n <option value=\"10\">10</option>\r\n <option value=\"25\">25</option>\r\n <option value=\"50\">50</option>\r\n <option value=\"100\">100</option>\r\n </select>\r\n </div>\r\n \r\n <button class=\"btn btn-default\" style=\"padding: 4px 15px 4px 20px;margin-left: 10px; margin-bottom: 15px;\"\r\n data-toggle=\"tooltip\" data-placement=\"right\" title=\"Refresh\" (click)=\"ngOnInit();\">\r\n <span class=\"fa fa-refresh\"></span>\r\n </button>\r\n </form>\r\n <!-- <label>{{datalist.length}}</label> -->\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <form class=\"form-inline pull-right\">\r\n <div class=\"form-group\">\r\n <label for=\"exampleInputName2\">Search </label>\r\n <input type=\"text\" class=\"form-control\" id=\"exampleInputName2\" name=\"schtxt\"\r\n [(ngModel)]=\"searchF\" />\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>SR No</th>\r\n <th>Action</th>\r\n <th *ngFor=\"let tbh of tblH; let i = index \" (click)=\"setOrder(tbh,i)\">\r\n {{tblDesc[tbh]}}\r\n <span [hidden]=\"reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-down\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span [hidden]=\"!reverse\" *ngIf=\"showarr === i\">\r\n <i class=\"fa fa-arrow-up\" aria-hidden=\"true\"></i>\r\n </span>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n *ngFor=\"let data of datalist | searchPipe:searchF | orderBy: order:reverse | paginate: { itemsPerPage: pageSize, currentPage: p }; let i = index;\">\r\n <td>{{i + 1}}</td>\r\n <td>\r\n <div class=\"btn-group\">\r\n <a href=\"#\" data-toggle=\"dropdown\"\r\n class=\"btn btn-info dropdown-toggle\">Action\r\n <span class=\"caret\"></span>\r\n </a>\r\n <ul class=\"dropdown-menu\" role=\"menu\">\r\n <li *ngFor=\"let action of actions\">\r\n <a href=\"javascript:void(0)\"\r\n (click)=\"userAction(data, action.form_field_typ, action);\">\r\n {{action.form_field_title}}\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n <td *ngFor=\"let tbh of tblH; let i=index\" on-mouseover=\"hoveredI=i\"\r\n on-mouseleave=\"hoveredI=-1\">\r\n {{data[tbh]}}\r\n <div class=\"onHoverDiv\" *ngIf=\"i==hoveredI\">\r\n <ul>\r\n <li (click)=\"editCell(data,tbh);\">\r\n <span class=\"fa fa-pencil\"></span>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <pagination-controls (pageChange)=\"p = $event\" class=\"pull-right\"></pagination-controls>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"actionFooter\" *ngIf=\"route.snapshot.params['frmnme'] == 'menuMaster'\">\r\n <button type=\"button\" id=\"addBtn\" class=\"btn btn-success ttip\" (click)=\"getPageDefination()\">Filter</button>\r\n </div>\r\n <div class=\"modal\" id=\"datamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #f=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #closebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFilds | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <!-- (change)=\"removeInvalid(fl)\" -->\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"textInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"textInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n <!-- <div *ngIf=\"numberInput.errors.minlength\">\r\n {{fl.form_field_title}} must be at least {{fl.form_field_min_length}} characters long.\r\n </div>\r\n <div *ngIf=\"numberInput.errors.maxlength\">\r\n {{fl.form_field_title}} Maxmimum limit {{fl.form_field_max_length}} characters long.\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <!-- (blur)=\"this[fl?.validations](fl.default_value)\" -->\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl?.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == 1\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == 1\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <!-- <div class=\"col-md-9\">\r\n <div class=\"btn-group\" data-toggle=\"buttons\">\r\n <label class=\"btn btn-default btn-on btn-xs\" *ngFor=\"let lov of sqlArray[fl.form_field];let i=index\">\r\n <input type=\"radio\" [value]=\"lov.k\" id=\"{{i}}\" name=\"{{fl?.form_field}}\" [value]=\"\" [(ngModel)]=\"fl.default_value\">{{lov.v}}</label>\r\n </div>\r\n </div> -->\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sb'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-8\">\r\n <div class=\"input-group w-100\">\r\n <ng-select style=\"z-index: 5;\" [options]=\"sqlArray[fl.form_field]\"\r\n #sfi=\"ngModel\" [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n (selected)=\"chkFun(fl,fl.default_value)\"\r\n (filterInputChanged)=\"loadSuggdata($event,fl.page_item_idn,fl.form_field)\">\r\n </ng-select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-1\" *ngIf=\"fl?.form_field_icon == 'add'\">\r\n <button type=\"button\" class=\"btn btn-success btn-rounded\"><span><i\r\n class=\"fa fa-plus\"></i></span></button>\r\n\r\n </div>\r\n </div>\r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" appAppNoDblClick class=\"btn btn-success\" (click)=\"onSubmit(f,submitBtn)\"\r\n #submitBtn>{{btnName}}</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\"\r\n *ngIf=\"btnName == 'Add'\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"modal\" id=\"deletemodal\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #deleteclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Warning</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n Are you sure want to delete?\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-danger\" data-dismiss=\"modal\"\r\n (click)=\"deleteDataList();\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popdatamodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" #fpop=\"ngForm\" name=\"appForm\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #popclosebtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"defModalHead\">{{btnName}} Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\" *ngFor=\"let fl of formFildsPopup | orderByPipe: 'srt': 'asc'\">\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='c' || fl?.dta_typ =='t'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"text\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textInput=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n </div>\r\n <div *ngIf=\"textInput.invalid && (textInput.dirty || textInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 't' && fl?.is_hidden == 0 && fl?.dta_typ =='n'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"number\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #numberInput=\"ngModel\" [required]=\"fl?.is_compulsory==1\">\r\n <!-- minlength={{fl?.form_field_min_length}} maxlength={{fl?.form_field_max_length}}/ -->\r\n </div>\r\n <div *ngIf=\"numberInput.invalid && (numberInput.dirty || numberInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"numberInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'pw' && fl?.is_hidden == 0 && fl?.dta_typ =='pw'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"{{inputtype}}\" class=\"form-control posrel\"\r\n name=\"{{fl?.form_field}}\" [value]=\"fl?.default_value\"\r\n [(ngModel)]=\"fl.default_value\" #passInput=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == '1'\" />\r\n <span class=\"fa {{eveC}} eye\" (click)=\"showHIdePass();\"></span>\r\n </div>\r\n <div *ngIf=\"passInput.invalid && (passInput.dirty || passInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"passInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='a'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <div class=\"input-group w-100\">\r\n <tag-input [(ngModel)]=\"fl.default_value\" name=\"{{fl?.form_field}}\"\r\n [modelAsStrings]=\"true\" [allowDupes]=\"true\" [editable]='true'>\r\n </tag-input>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 't' && fl?.dta_typ =='sa'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <ng-select [options]=\"sqlArray[fl?.form_field]\" style=\"z-index:9;\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\"\r\n [required]=\"fl?.is_compulsory == 1\" name=\"{{fl?.form_field}}\"\r\n [multiple]=\"true\" [allowClear]=\"true\">\r\n <ng-template #optionTemplate let-option=\"option\">\r\n <div class=\"famfamfam-flags {{option?.value.toLowerCase()}}\"></div>\r\n {{option?.label}}\r\n </ng-template>\r\n </ng-select>\r\n <!-- <ng-select [items]=\"sqlArray[fl.form_field]\" [addTag]=\"addTag\" bindValue=\"k\" multiple=\"true\" bindLabel=\"v\" name=\"{{fl?.form_field}}\"\r\n [(ngModel)]=\"fl.default_value\" #safield=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n </ng-select> -->\r\n </div>\r\n <div *ngIf=\"safield.invalid && (safield.dirty || safield.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"safield.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'ta' && fl?.is_hidden == 0 && fl?.dta_typ =='c'\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <textarea class=\"form-control\" rows=\"3\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #textArea=\"ngModel\" (blur)=\"chkFun(fl,fl.default_value);\"\r\n [ngClass]=\"{'uniqErrMsg': fl?.form_field == onErr}\"\r\n [required]=\"fl?.is_compulsory == '1'\"></textarea>\r\n </div>\r\n <div *ngIf=\"textArea.invalid && (textArea.dirty || textArea.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"textArea.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\"\r\n *ngIf=\"fl?.form_field_typ == 'hd' || fl?.form_field_typ == 'df' || fl?.form_field_typ == 'fk' && fl?.is_hidden == 0\"\r\n [ngClass]=\"{'mt0': fl?.form_field_typ == 'hd'}\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #hdf=\"ngModel\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'sq' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\"></label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <input type=\"hidden\" class=\"form-control\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'tb' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #tdf=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">\r\n {{dynamic.label}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"tdf.invalid && (tdf.dirty || tdf.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"tdf.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'l' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #lInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let lov of fl.kv\" value=\"{{lov.k}}\">{{lov.v}}</option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"lInput.invalid && (lInput.dirty || lInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"lInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 'ld' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n #ldInput=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.k}}\">{{dynamic.v}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"ldInput.invalid && (ldInput.dirty || ldInput.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"ldInput.errors.required\">\r\n {{fl.form_field_title}} is required.\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group\" *ngIf=\"fl?.form_field_typ == 's' && fl?.is_hidden == 0\">\r\n <label class=\"col-md-3 control-label\">{{fl?.form_field_title}}\r\n <span class=\"text-danger\" *ngIf=\"fl.is_compulsory == 1\">*</span>\r\n </label>\r\n <div class=\"col-md-9\">\r\n <div class=\"input-group w-100\">\r\n <select class=\"form-control select\" name=\"{{fl?.form_field}}\"\r\n [value]=\"fl?.default_value\" [(ngModel)]=\"fl.default_value\"\r\n (change)=\"chkFun(fl,fl.default_value)\" id=\"{{fl.column_key}}\"\r\n #sfi=\"ngModel\" [required]=\"fl?.is_compulsory == '1'\">\r\n <option *ngFor=\"let dynamic of sqlArray[fl.form_field]\"\r\n value=\"{{dynamic.value}}\">{{dynamic.label}}\r\n </option>\r\n </select>\r\n </div>\r\n <div *ngIf=\"sfi.invalid && (sfi.dirty || sfi.touched)\"\r\n class=\"alert alert-danger ca\">\r\n <div *ngIf=\"sfi.errors.required\">\r\n {{fl.form_field_title}} is required.\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\" appAppNoDblClick class=\"btn btn-success\"\r\n (click)=\"onPopupSubmit(fpop,popsubmitBtn)\" #popsubmitBtn>Add</button>\r\n <button type=\"reset\" class=\"btn btn-danger\" (click)=\"reset(f)\">Reset</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"modal\" id=\"popResmodal\" role=\"dialog\" aria-labelledby=\"defModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog\">\r\n <div class=\"modal-content\">\r\n <form class=\"form-horizontal\" name=\"appFormres\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\">\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"popModalHead\"> Record</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"row\">\r\n <p *ngFor=\"let res of Sysresult\">{{res}}</p>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div class=\"modal\" id=\"productMapMasMD\" role=\"dialog\" aria-labelledby=\"smallModalHead\" aria-hidden=\"true\"\r\n data-backdrop=\"static\" data-keyboard=\"false\">\r\n <div class=\"modal-dialog modal-sm mwidth\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header\">\r\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" (click)=\"closeNull();\" #productMapclsbtn>\r\n <span aria-hidden=\"true\">×</span>\r\n <span class=\"sr-only\">Close</span>\r\n </button>\r\n <h4 class=\"modal-title\" id=\"smallModalHead\">Product Mapping of {{attMapModelTitle}}</h4>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"table-responsive\">\r\n <table class=\"table table-bordered table-hover table-hover-cells\">\r\n <thead>\r\n <tr>\r\n <th>\r\n Name\r\n </th>\r\n <th>\r\n Value\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *ngFor=\"let key of attrDtl?.prpList\">\r\n <tr>\r\n <td>\r\n {{key.print}}\r\n </td>\r\n <td>\r\n <input type=\"text\" class=\"form-control\"\r\n [(ngModel)]=\"attrMappingDtl[key?.val]\" />\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n </div>\r\n <div class=\"modal-footer\">\r\n <button type=\"button\" class=\"btn btn-default\" data-dismiss=\"modal\">Close</button>\r\n <button type=\"button\" class=\"btn btn-success\" data-dismiss=\"modal\"\r\n (click)=\"saveProductMasterMapping();\" #productMapclsbtn>Save</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n\r\n \r\n\r\n\r\n <button id=\"deletebtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#deletemodal\"></button>\r\n <button id=\"datamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"clsMd\" [hidden]=\"true\" data-dismiss=\"modal\" data-target=\"#datamodal\"></button>\r\n <button id=\"popdatamdbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popdatamodal\"></button>\r\n <button id=\"popResmodalbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#popResmodal\"></button>\r\n <button id=\"productMapMasMDbtn\" [hidden]=\"true\" data-toggle=\"modal\" data-target=\"#productMapMasMD\"></button>", styles: [".btn-default.btn-on-1.active,.btn-default.btn-off-1.active{background-color:#3b5998;color:#fff}.btn.btn-xs,.btn-group-xs>.btn{font-size:12px;padding:5px 15px}.tbactive{background:#3B5998;color:#fff}input[type=radio]{display:none}.content-frame-left{background:transparent!important;width:250px!important}.mt0{margin-bottom:0!important}.headingCls{padding:10px;background:#f0efef;font-size:14px;font-weight:400;margin-bottom:20px}.tooltip{display:none!important}.mwidth{width:500px}.actionFooter{position:fixed;bottom:0;width:100%;text-align:left;padding:6px 6px 6px 65px;background:#1b1e24}\n"] }]
|
|
1005
1097
|
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.ToastrService }, { type: i3.SystemServiceService }, { type: i4.NgxSpinnerService }, { type: i5.CommanServiceService }, { type: i6.AdminServiceService }]; }, propDecorators: { closebtn: [{
|
|
1006
1098
|
type: ViewChild,
|
|
1007
1099
|
args: ['closebtn']
|
|
@@ -1021,4 +1113,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
1021
1113
|
type: ViewChild,
|
|
1022
1114
|
args: ['productMapclsbtn']
|
|
1023
1115
|
}] } });
|
|
1024
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFHLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQXlCLE1BQU0saUJBQWlCLENBQUM7QUFFaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNoRixNQUFNLE9BQU8sZUFBZTtJQStFMUIsWUFDUyxNQUFjLEVBQ2QsS0FBcUIsRUFDcEIsTUFBcUIsRUFDckIsRUFBd0IsRUFDeEIsY0FBaUMsRUFDbEMsRUFBd0IsRUFDdkIsRUFBdUI7UUFOeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsT0FBRSxHQUFG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SCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztTQUM1QjthQUFNO1lBQ0wsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7U0FDNUI7SUFDSCxDQUFDOzsrSEF0Z0NVLGVBQWU7bUhBQWYsZUFBZSxzbUJDbEI1Qiw0bzZEQXkxQmdIOzJGRHYwQm5HLGVBQWU7a0JBTjNCLFNBQVM7K0JBQ0UsWUFBWTs4UkFRQyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ00sWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNKLEtBQUs7c0JBQXpCLFNBQVM7dUJBQUMsUUFBUTtnQkFDTyxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ0EsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNTLGdCQUFnQjtzQkFBOUMsU0FBUzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBIZWFkZXJzICB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBDb29raWUgfSBmcm9tICduZzItY29va2llcy9uZzItY29va2llcyc7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbmltcG9ydCB7IFN5c3RlbVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vc3lzdGVtLXNlcnZpY2Uvc3lzdGVtLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1hblNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFkbWluU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hZG1pbi1zZXJ2aWNlL2FkbWluLXNlcnZpY2Uuc2VydmljZSc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc3lzdGVtJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc3lzdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zeXN0ZW0uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU3lzdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyBpdGVtcyA9IFsnUGl6emEnLCAnUGFzdGEnLCAnUGFybWVzYW4nXTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnY2xvc2VidG4nKSBjbG9zZWJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdkZWxldGVjbHNidG4nKSBkZWxldGVjbHNidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRzJykgaW5wdXQ6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncG9wY2xvc2VidG4nKSBwb3BjbG9zZWJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdzdWJtaXRCdG4nKSBzdWJtaXRidG46IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncHJvZHVjdE1hcGNsc2J0bicpIHByb2R1Y3RNYXBjbHNidG46IEVsZW1lbnRSZWY7XHJcbiAgY0R0ID0gbmV3IERhdGUoKTtcclxuXHJcbiAgZm9ybUZpbGRzID0gW107XHJcbiAgZm9ybUZpbGRzUG9wdXAgPSBbXTtcclxuICBkYXRhbGlzdCA9IFtdO1xyXG4gIGFjdGlvbnMgPSBbXTtcclxuICBsb3ZzID0gW107XHJcbiAgYWRkTmV3OiBhbnkgPSBbXTtcclxuICB0YmxIID0gW107XHJcbiAgdGJsRGVzYyA9IFtdO1xyXG4gIG5hdmlnYXRpb24gPSBbXTtcclxuICBTeXNyZXN1bHQgPSBbXTtcclxuICBkYXRhO1xyXG5cclxuICB3aGVyZU1hcCA9IHt9O1xyXG4gIHBhcmFPYmogPSB7fTtcclxuICBjdXJyT2JqID0ge307XHJcbiAgc3FsQXJyYXkgPSB7fTtcclxuICBnbGJPYmogPSB7fVxyXG5cclxuICBwYWdlU2l6ZSA9IDEwO1xyXG4gIGNMaW5rID0gMDtcclxuICBwID0gMTtcclxuXHJcbiAgZXZlQyA9ICdmYS1leWUtc2xhc2gnO1xyXG4gIGlucHV0dHlwZSA9ICdwYXNzd29yZCc7XHJcbiAgb3JkZXIgPSAnJztcclxuXHJcbiAgcmV2ZXJzZSA9IGZhbHNlO1xyXG4gIHN1YmZvcm0gPSBmYWxzZTtcclxuICBlc3RzdCA9IGZhbHNlO1xyXG5cclxuICBzaG93YXJyO1xyXG4gIHBhZ2VJbmZvO1xyXG4gIHBvcHVwcGFnZUluZm87XHJcbiAgaGVhZGVyO1xyXG4gIGJ0bk5hbWU7XHJcbiAgcGlkO1xyXG4gIHNlYXJjaEY7XHJcbiAgd2hySztcclxuICB3aHJWO1xyXG4gIHN1YkZybVdrO1xyXG4gIHN1YkZybVd2O1xyXG4gIG5hdmZvcm07XHJcbiAgb25FcnI7XHJcbiAgaG92ZXJlZEk7XHJcbiAgdGJDZWxsO1xyXG4gIHRpdGxlXHJcbiAgcGtmO1xyXG4gIGN1cmw7XHJcbiAgdWlHcnBMaXN0O1xyXG4gIHVpR3JwTGlzdER0bDtcclxuICBkYXRhRHRsXHJcbiAgYWRkRnJtTm1lO1xyXG4gIGNvaWRuO1xyXG4gIGN1cnJzdGF0O1xyXG4gIGNVcmw7XHJcbiAgYWN0aW9uO1xyXG4gIGF0dHJEdGw7XHJcbiAgYXR0ck1hcHBpbmdEdGw7XHJcbiAgcHJvZHVjdE1hc0F0dHJJZDtcclxuICBhdHRNYXBNb2RlbFRpdGxlO1xyXG4gIGNvbnRhY3ROYW1lID0gXCJcIjtcclxuICBpc09wZW49IHRydWVcclxuICBpY29uID0gJ2ZhIGZhLWRlZGVudCc7XHJcbiAgYXBwbGljYXRpb25MaXN0OiBhbnkgPSBbXTtcclxuICBhcHAgPSAnJztcclxuICB2PSAnJ1xyXG4gIHVzckxzdDogYW55W107XHJcbiAgbWRsbGlzdDogYW55O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzczogU3lzdGVtU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwdWJsaWMgY3M6IENvbW1hblNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhczogQWRtaW5TZXJ2aWNlU2VydmljZVxyXG5cclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICAvL2xvYWQgcGFnZSBkZWZpbmF0aW9uXHJcbiAgZ2V0UGFnZURlZmluYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhdGFsaXN0ID0gW107XHJcbiAgICB0aGlzLndoZXJlTWFwID0gW107XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuXHJcbiAgICBsZXQgYWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2FjdGlvbiddIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMud2hyViAhPSBudWxsICYmIHRoaXMuc3ViRnJtV2sgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gJycgKyB0aGlzLndoclY7XHJcbiAgICAgIHRoaXMud2hlcmVNYXBbdGhpcy53aHJLXSA9IHRoaXMud2hyVjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSAnMSc7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnMSc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZExpc3QnO1xyXG4gICAgaWYgKHRoaXMucGFnZUluZm8gIT0gbnVsbCkge1xyXG4gICAgICB2YXIgcGFnZVRQID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgICAgaWYgKHBhZ2VUUCA9PSAnanNvbkZvcm0nKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3Y29udGFjdCcpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IFwibm1lX2lkblwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gXCIwXCI7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3YWNjY29udGFjdCcpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IFwibm1lX2lkblwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gXCIwXCI7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3bGVkZ2VyJykge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gXCJsZWRnZXJfaWRuXCI7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSBcIjBcIjtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYU9iaikpO1xyXG4gICAgdGhpcy5zcy5nZXREYXRhKHRoaXMucGFyYU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRibEggPSByZXNwb25zZS5kYXRhSGVhZGVyO1xyXG4gICAgICAgIHRoaXMudGJsRGVzYyA9IHJlc3BvbnNlLmRhdGFIZWFkZXJQcmludDtcclxuICAgICAgICB0aGlzLmFkZE5ldyA9IHJlc3BvbnNlLmJ1dHRvbnNbMF0gfHwge307XHJcbiAgICAgICAgdGhpcy5wYWdlSW5mbyA9IHJlc3BvbnNlLnBhZ2VJbmZvO1xyXG4gICAgICAgIHRoaXMucGtmID0gcmVzcG9uc2UucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICAgICAgdGhpcy5kYXRhbGlzdCA9IHJlc3BvbnNlLmRhdGFMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pY29uID0gJ2ZhIGZhLWluZGVudCc7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucztcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSByZXNwb25zZS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PSAnbmV3Y29udGFjdCcgfHwgYWN0aW9uID09ICduZXdsZWRnZXInIHx8IGFjdGlvbiA9PSAnbmV3YWNjY29udGFjdCcpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzcG9uc2UubmF2aWdhdGlvblswXTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xyXG4gICAgICAgICAgICB0aGlzLmJ0bk5hbWUgPSAnQWRkJztcclxuICAgICAgICAgIH0sIDUwMClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9sb2FkIGZvcm0gZmllbGRzXHJcbiAgZ2V0Rm9ybUZpZWxkcygpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgaWYgKHRoaXMud2hyViAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocks7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoclY7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZEFkZEVkaXQnO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhT2JqKSlcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVyKSlcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0Rm9ybUYodGhpcy5wYXJhT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzID0gcmVzcG9uc2UuZm9ybUZpZWxkcztcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAndGInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAncycpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdoZCcpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aGVyZU1hcFtlbGVtZW50LmZvcm1fZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3NxJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL2xvYWQgZm9ybSBmaWVsZHNcclxuICBnZXRGb3JtRmllbGRzUG9wdXAoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmICh0aGlzLndoclYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gdGhpcy53aHJWO1xyXG5cclxuICAgICAgdGhpcy53aGVyZU1hcFt0aGlzLndocktdID0gdGhpcy53aHJWO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRBZGRFZGl0JztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0Rm9ybUYodGhpcy5wYXJhT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzUG9wdXAgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgIHRoaXMucG9wdXBwYWdlSW5mbyA9IHJlc3BvbnNlLnBhZ2VJbmZvO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzUG9wdXAuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3RiJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hlcmVNYXBbZWxlbWVudC5mb3JtX2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzcScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTZXF1ZW5jZShlbGVtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdmaycpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aHJWO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGludmFsaWQgY2hhcmFjdGVyc1xyXG4gIC8vIHJlbW92ZUludmFsaWQoZmwpIHtcclxuICAvLyAgIGlmIChmbC5mb3JtX2ZpZWxkID09IFwibm1lXCIgfHwgZmwuZm9ybV9maWVsZCA9PSBcInByaW50X25tZVwiKSB7XHJcbiAgLy8gICAgIGZsLmRlZmF1bHRfdmFsdWUgPSBmbC5kZWZhdWx0X3ZhbHVlLnJlcGxhY2UoL1teYS16IF0vZ2ksICcnKTtcclxuICAvLyAgIH1cclxuICAvLyB9O1xyXG5cclxuICAvL3VzZXJzIGFjdGlvbiBsaWtlICdhZGQnLCAnZWRpdCcsICdkZWxldGUnIGFuZCAnYWQgSXRlbSdcclxuICB1c2VyQWN0aW9uKHVhLCBjLCBhKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgY29uc29sZS5sb2codWEsIGMsIGEpO1xyXG4gICAgaWYgKGMgPT0gJ2FkZCcpIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgICAgdGhpcy5nZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgfSBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5nbGJPYmogPSB1YTtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBpZCA9IHVhW3RoaXMucGtmXTtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgIHRoaXMuZ2V0RWRpdERhdGEodWFbdGhpcy5wa2ZdKTtcclxuICAgICAgdGhpcy5idG5OYW1lID0gJ0VkaXQnO1xyXG4gICAgfSBlbHNlIGlmIChhLmZvcm1fZmllbGQgPT0gJ2FkZEF0dHInKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICB0aGlzLmN1cmwgPSBhLmxvdl9xcnk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthLmxvdl9xcnkudHJpbSgpLCB0aGlzLnBrZiwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICAgIHRoaXMud2hySyA9IHRoaXMucGtmO1xyXG4gICAgICB0aGlzLndoclYgPSB1YVt0aGlzLnBrZl07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSAnc3ViZm9ybScgJiYgYS5mb3JtX2ZpZWxkICE9IFwib3V0X21hcHBpbmdcIikge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJsID0gYS5sb3ZfcXJ5O1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LnRyaW0oKSwgdGhpcy5wa2YsIHVhW3RoaXMucGtmXV0pO1xyXG4gICAgICB0aGlzLndocksgPSB0aGlzLnBrZjtcclxuICAgICAgdGhpcy53aHJWID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgfSBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSAnZGVsZXRlJykge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgfSBlbHNlIGlmIChjLnRyaW0oKSA9PSAncG9wdXAnKSB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSBhLmxvdl9xcnkuc3BsaXQoJy8nKVsyXTtcclxuICAgICAgdGhpcy53aHJLID0gdGhpcy5wa2Y7XHJcbiAgICAgIHRoaXMud2hyViA9IHVhW3RoaXMucGtmXTtcclxuICAgICAgdGhpcy5nZXRGb3JtRmllbGRzUG9wdXAoKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgfSBlbHNlIGlmIChjLnRyaW0oKSA9PSAnZGVmaW5hdGlvbicpIHtcclxuICAgICAgY29uc29sZS5sb2coYS5sb3ZfcXJ5LnRyaW0oKSwgdWFbdGhpcy5wa2ZdKVxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LnRyaW0oKSwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjLnRyaW0oKSA9PSAnc3ViZm9ybScgJiYgYS5mb3JtX2ZpZWxkID09IFwib3V0X21hcHBpbmdcIikge1xyXG4gICAgICB0aGlzLmxvYWRQcm9kdWN0TWFzdGVyTWFwcGluZyh1YVsnYXR0cl9pZG4nXSk7XHJcbiAgICAgIHRoaXMuYXR0TWFwTW9kZWxUaXRsZSA9IHVhLmRpc3BsYXk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkUHJvZHVjdE1hc3Rlck1hcHBpbmcoYXR0cklkbikge1xyXG4gICAgdGhpcy5wcm9kdWN0TWFzQXR0cklkID0gYXR0cklkbjtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IG9iaiA9IHt9O1xyXG4gICAgb2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICBvYmpbJ2F0dHJfaWRuJ10gPSBhdHRySWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRQcmRNYXN0ZXJNYXBwaW5nJ1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5TYXZlKG9iaiwgb3B0aW9ucywgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICB0aGlzLmF0dHJEdGwgPSByZXN1bHQuYXR0ckR0bDtcclxuICAgICAgICB0aGlzLmF0dHJNYXBwaW5nRHRsID0gcmVzdWx0LmF0dHJNYXBwaW5nRHRsO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9kdWN0TWFwTWFzTURidG4nKS5jbGljaygpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9kdWN0TWFzdGVyTWFwcGluZygpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IG9iaiA9IHt9O1xyXG4gICAgb2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICBvYmpbJ2F0dHJfaWRuJ10gPSB0aGlzLnByb2R1Y3RNYXNBdHRySWQ7XHJcbiAgICBvYmpbJ2F0dHJEdGxNYXAnXSA9IHRoaXMuYXR0ck1hcHBpbmdEdGw7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAndXBkYXRlUHJvZHVjdEF0dHInXHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuU2F2ZShvYmosIG9wdGlvbnMsICdmaWxlVXBsb2FkL2xvYWQnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0TWFwY2xzYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9zaWRlIG5ldmlnYXRpb24gXHJcbiAgbmF2aWdhdGlvbkZ1bihuYXYsIGkpIHtcclxuICAgIHRoaXMuY0xpbmsgPSBpO1xyXG4gICAgdGhpcy53aHJLID0gbmF2LmNvbHVtbl9rZXkudHJpbSgpO1xyXG4gICAgdGhpcy53aHJWID0gbmF2LmZvcm1fZmllbGQudHJpbSgpO1xyXG4gICAgdGhpcy5uYXZmb3JtID0gbmF2Lmxvdl9xcnkudHJpbSgpO1xyXG4gICAgaWYgKHRoaXMuc3ViRnJtV3YgPT0gJycpIHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3ViRnJtV3YgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmF2Zm9ybSAhPSAnJykge1xyXG4gICAgICBpZiAodGhpcy5uYXZmb3JtID09ICdhZGR0aW9uYWxEdGxNYXN0ZXInKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5nZXROYW1lQXR0cih0aGlzLmFkZEZybU5tZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vbG9hZCBlZGl0IHRhYmxlIGRhdGEgd2l0aCBkZWZhdWx0IHZhbHVlXHJcbiAgZ2V0RWRpdERhdGEocGlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICB2YXIgcGFnZVRQID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnc2Vjb25kS2V5RmllbGQnXSA9IHRoaXMucGFnZUluZm8uc2Vjb25kX2tleV9maWVsZDtcclxuICAgIGlmICh0aGlzLnRiQ2VsbCAhPSBudWxsKSB7XHJcbiAgICAgIHJlcU9ialsnaW5MaW5lRWRpdENvbHVtbiddID0gdGhpcy50YkNlbGw7XHJcbiAgICB9XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gcGlkO1xyXG4gICAgaWYgKHBhZ2VUUCA9PSAnanNvbkZvcm0nKSB7XHJcbiAgICAgIHJlcU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLnBhZ2VJbmZvLndoZXJlX2NsYXVzZTtcclxuICAgICAgcmVxT2JqWyd3aGVyZVZsdXMnXSA9IHRoaXMud2hlcmVNYXBbdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2VdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZEFkZEVkaXQnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXRFZGl0RChyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJyAmJiByZXNwb25zZS5tZXNzYWdlICE9ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9O1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnRiQ2VsbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHMgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAndGInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAncycpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdoZCcpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aGVyZU1hcFtlbGVtZW50LmZvcm1fZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3NxJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VxdWVuY2UoZWxlbWVudCkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydzZXEnXSA9IGVsZW1lbnQubG92X3FyeTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdnZXRTZXEnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHZhciBzZXEgPSByZXNwb25zZS5zZXE7XHJcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gc2VxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9sb2FkIGxvdiBkYXRhIGJ5IHBhc3NpbmcgcXVlcnkgdG8gaXRcclxuICBnZXRMb3ZMaXN0KHRibEYsIHBhZ2VfaXRlbV9pZG4pIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsncGFnZV9pdGVtX2lkbiddID0gcGFnZV9pdGVtX2lkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdnZXREYXRhQnlJdGVtSWRuJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLmxvdnMgPSByZXNwb25zZS5rdi5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zcWxBcnJheVt0YmxGXSA9IHRoaXMubG92cztcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0YmxGLCBzcWwsIHRoaXMubG92cyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zcWxBcnJheVt0YmxGXSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vZGVsZXRlIHNwZWZpY2VmaWMgZGF0YSBsaXN0XHJcbiAgZGVsZXRlRGF0YUxpc3QoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSB0aGlzLnBpZDtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBhZ2VJbmZvLnRhYmxlX25hbWU7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSAnREVMRVRFJztcclxuXHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZSc7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZGVsZXRlRGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5kZWxldGVjbHNidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vZHlhbmFtaWMgZnVuY2F0aW9uXHJcbiAgY2hrRnVuKGZsLCBmRGF0YSkge1xyXG4gICAgaWYgKGZsLnZhbGlkYXRpb25zID09ICcnIHx8IGZsLnZhbGlkYXRpb25zID09IG51bGwpIHsgcmV0dXJuIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZmwudmFsaWRhdGlvbnMgPT0gJ3ZhbGlkYXRlUXVlcnknKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVF1ZXJ5KGZsLCBmRGF0YSlcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnaXNVbmlxdWUnKSB7XHJcbiAgICAgICAgdGhpcy5pc1VuaXF1ZShmbCwgZkRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKGZsLnZhbGlkYXRpb25zID09ICdzZXRuYW1lcHJpbnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRuYW1lcHJpbnQoZmwsIGZEYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnc2V0ZmFjdG9yJykge1xyXG4gICAgICAgIHRoaXMuc2V0ZmFjdG9yKGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwuZm9ybV9maWVsZF90eXAgPT0gJ3MnKSB7XHJcbiAgICAgICAgaWYgKGZsLnZhbGlkYXRpb25zID09IG51bGwpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgbGV0IHNxID0gZmwudmFsaWRhdGlvbnMucmVwbGFjZSgvI1FWQUwvZywgZkRhdGEpO1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0TG92TGlzdChmbC5jb2x1bW5fa2V5LCBzcSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vb24gc3VibWl0IGFjdGlvbiBjaGVja3MgdmFsaWRhdGlvblxyXG4gIG9uU3VibWl0KGZvcm1WYWwsIGJ0bikge1xyXG4gICAgZGVidWdnZXJcclxuICAgIHZhciB0ID0gT2JqZWN0LmtleXMoZm9ybVZhbC5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgZGVidWdnZXJcclxuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1WYWwuZm9ybS5nZXQoZmllbGQpO1xyXG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGZvcm1WYWwuZm9ybS52YWxpZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWRkZWRpdChmb3JtVmFsLnZhbHVlLCBidG4pO1xyXG4gICAgICAvLyAgdGhpcy5sb3dlcihmb3JtVmFsLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRuYW1lcHJpbnQoZmwsIGZEYXRhKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IG5tZUlkbiA9IGZEYXRhO1xyXG4gICAgbGV0IGxpc3QgPSB0aGlzLnNxbEFycmF5W2ZsLmZvcm1fZmllbGRdIHx8IFtdO1xyXG4gICAgbGV0IG5td0R0bCA9IGxpc3QuZmluZCh4ID0+IHgudmFsdWUgPT0gbm1lSWRuKSB8fCAnJztcclxuICAgIGlmIChubXdEdGwgIT0gJycpIHtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkID09ICdubWUnKVxyXG4gICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gbm13RHRsLmxhYmVsXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAncHJpbnRfbm1lJylcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IG5td0R0bC5sYWJlbFxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRmYWN0b3IoZmwsIGZEYXRhKSB7XHJcbiAgICBsZXQgZmN0ciA9IC0xO1xyXG4gICAgaWYgKGZEYXRhID09ICdpbmNvbWUnIHx8IGZEYXRhID09ICdhc3NldHMnKVxyXG4gICAgICBmY3RyID0gMTtcclxuICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ2ZjdHInKVxyXG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IGZjdHJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Qb3B1cFN1Ym1pdChmb3JtVmFsLCBidG4pIHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICB2YXIgdCA9IE9iamVjdC5rZXlzKGZvcm1WYWwuZm9ybS5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtVmFsLmZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChmb3JtVmFsLmZvcm0udmFsaWQgPT0gdHJ1ZSkge1xyXG4gICAgICBkZWJ1Z2dlclxyXG4gICAgICB0aGlzLmFkZFBvcHVwRnJtKGZvcm1WYWwudmFsdWUsIGJ0bik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG93ZXIodikge1xyXG4gICAgdmFyIGtleSwga2V5cyA9IE9iamVjdC5rZXlzKHYpO1xyXG4gICAgdmFyIG4gPSBrZXlzLmxlbmd0aDtcclxuICAgIHZhciBuZXdvYmogPSB7fVxyXG4gICAgd2hpbGUgKG4tLSkge1xyXG4gICAgICBrZXkgPSBrZXlzW25dO1xyXG4gICAgICBuZXdvYmpba2V5XSA9IHR5cGVvZiB2W2tleV0gPT0gXCJzdHJpbmdcIiA/IHZba2V5XS50b0xvd2VyQ2FzZSgpIDogdltrZXldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9zdWJtaXQgZGF0YVxyXG4gIGFkZGVkaXQodiwgYnRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwLnRyaW0oKTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnc2Vjb25kS2V5RmllbGQnXSA9IHRoaXMucGFnZUluZm8uc2Vjb25kX2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnJyA6IFwiXCIgKyB0aGlzLnBpZDtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBhZ2VJbmZvLnRhYmxlX25hbWU7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnQUREJyA6ICdFRElUJztcclxuICAgIHJlcU9ialsnZGF0YVRybnNEdGwnXSA9IHY7XHJcbiAgICBpZiAocGFnZVRQID09ICdqc29uRm9ybScpIHtcclxuICAgICAgcmVxT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbJ3doZXJlVmx1cyddID0gdGhpcy53aGVyZU1hcFt0aGlzLnBhZ2VJbmZvLndoZXJlX2NsYXVzZV07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVyKSk7XHJcbiAgICB0aGlzLnNzLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICBpZiAodGhpcy5hY3Rpb24gPT0gJ25ld2NvbnRhY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jb250YWN0L21hc3Rlci9uYW1lTWFzdGVyL25tZV9pZG4vJyArIHJlc3BvbnNlLl9pZF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb24gPT0gJ25ld2FjY2NvbnRhY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hY2NvdW50cy9jb250YWN0L21hc3Rlci9hY2NOYW1lTWFzdGVyL25tZV9pZG4vJyArIHJlc3BvbnNlLl9pZF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb24gPT0gJ25ld2xlZGdlcicpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FjY291bnRzL2FkbWluL21hc3Rlci9sZWRnZXJNYXN0ZXIvbGVkZ2VyX2lkbi8nICsgcmVzcG9uc2UuX2lkXSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7IHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgIGlmICh0aGlzLmFkZE5ldy5sb3ZfcXJ5ID09IG51bGwgfHwgdGhpcy5hZGROZXcubG92X3FyeSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJzdGF0ID09IFwicG9wdXBcIikge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc2V0U3lzU2V0dXAodGhpcy5jb2lkbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuYWRkTmV3Lmxvdl9xcnksIHJlc3BvbnNlLl9pZF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUG9wdXBGcm0odiwgYnRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGRlYnVnZ2VyO1xyXG5cclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBvcHVwcGFnZUluZm8ucGFnZV90eXAudHJpbSgpO1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLnBvcHVwcGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlLZXknXSA9IHRoaXMucG9wdXBwYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqWydzZWNvbmRLZXlGaWVsZCddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnNlY29uZF9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gJyc7Ly90aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnJyA6IFwiXCIgKyB0aGlzLnBpZDtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBvcHVwcGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialsndHJuc1R5cGUnXSA9ICdBREQnO1xyXG4gICAgcmVxT2JqWydkYXRhVHJuc0R0bCddID0gdjtcclxuICAgIGNvbnNvbGUubG9nKFwiYWRkXCIsIEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmUnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5hZGREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuc2V0U3lzU2V0dXAodGhpcy5waWQpO1xyXG4gICAgICAgIHRoaXMucG9wY2xvc2VidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTeXNTZXR1cChjb0lkbikge1xyXG4gICAgZGVidWdnZXI7XHJcblxyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydjb0lkbiddID0gY29JZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnY2xpZW50U2V0dXAnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsICdzeXN0ZW0vc2V0dXAnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcFJlc21vZGFsYnRuJykuY2xpY2soKTtcclxuICAgICAgICB0aGlzLlN5c3Jlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy92YWxpZGF0ZSBxdWVyeVxyXG4gIHZhbGlkYXRlUXVlcnkodGJsT2JqLCBmKSB7XHJcbiAgICBpZiAoZiA9PSAnJyB8fCBmID09IG51bGwpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnc3FsJ10gPSBmO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3ZhbGlkYXRlUXVlcnknO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgJ3N5c3RlbS9hcHBwYWdlcycpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm9uRXJyID0gJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkVyciA9IHRibE9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vdmFsaWRhdGUgdGhpcyBmaWVsZCB2YWx1ZSBpcyB1bmlxdWVcclxuICBpc1VuaXF1ZShkdGFPYmosIGlucHVWYWwpIHtcclxuICAgIGlmIChpbnB1VmFsID09ICcnIHx8IGlucHVWYWwgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWyd0YWJsZU5hbWUnXSA9IHRoaXMucGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialsnd2hlcmVLZXlzJ10gPSBkdGFPYmouZm9ybV9maWVsZDtcclxuICAgIHJlcU9ialsnd2hlcmVWbHVzJ10gPSBpbnB1VmFsO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5S2V5J10gPSB0aGlzLnBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5SWQnXSA9IHRoaXMuYnRuTmFtZSA9PSAnQWRkJyA/ICcnIDogdGhpcy5waWQ7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAndW5pcXVlQ29uUSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgJ3N5c3RlbS9hcHBwYWdlcycpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm9uRXJyID0gJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkVyciA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocCkge1xyXG4gICAgaWYgKHAgPT0gJ0FsbCcpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuZGF0YWxpc3QubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3NvcnRpbmdcclxuICBzZXRPcmRlcih2YWx1ZTogc3RyaW5nLCBpKSB7XHJcbiAgICB0aGlzLnNob3dhcnIgPSBpO1xyXG4gICAgaWYgKHRoaXMub3JkZXIgPT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMucmV2ZXJzZSA9ICF0aGlzLnJldmVyc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9yZGVyID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvL2ZvciBzZXQgbnVsbCB0byB0YWJsZSBjZWxsXHJcbiAgY2xvc2VOdWxsID0gKCkgPT4gdGhpcy50YkNlbGwgPSBudWxsO1xyXG5cclxuICAvL2VkaXQgY2VsbCBvcGVuIG1vZGVsXHJcbiAgZWRpdENlbGwoZCwgdGJoKSB7XHJcbiAgICB0aGlzLmdsYk9iaiA9IGQ7XHJcbiAgICB0aGlzLnRiQ2VsbCA9IHRiaDtcclxuICAgIHRoaXMudGl0bGUgPSBkLnRpdGxlO1xyXG4gICAgdGhpcy5idG5OYW1lID0gJ0VkaXQnO1xyXG4gICAgdGhpcy5waWQgPSBkW3RoaXMucGtmXTtcclxuICAgIHRoaXMuZ2V0RWRpdERhdGEoZFt0aGlzLnBrZl0pO1xyXG4gIH1cclxuXHJcbiAgLy9sb2FkIG5tZSBhdHRyIGRhdGFcclxuICBnZXROYW1lQXR0cihmcm1ubWUpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIGxldCBjdXN0T2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IGZybW5tZTtcclxuICAgIHJlcU9ialsnbm1lSWRuJ10gPSB0aGlzLndoclY7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE5tZUF0dHInO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsICdzeXN0ZW0vYXBwcGFnZXMnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy51aUdycExpc3QgPSByZXNwb25zZS51aUdycExpc3Q7XHJcbiAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGw7XHJcbiAgICAgICAgdGhpcy5kYXRhRHRsID0gcmVzcG9uc2UuZGF0YUR0bDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL3NhdmUgbm1lIGRhdGEgXHJcbiAgc2F2ZUZ1bihrLCB2KSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIGxldCBzdWJPYmogPSB7fTtcclxuICAgIHN1Yk9ialtrXSA9IHY7XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMuYWRkRnJtTm1lO1xyXG4gICAgcmVxT2JqWydubWVJZG4nXSA9IHRoaXMud2hyVjtcclxuICAgIHJlcU9ialsnZGF0YVRybnNEdGwnXSA9IHN1Yk9iajtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlTm1lQXR0cic7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU3VnZ2RhdGEoc3RyLCBwYWdlX2l0ZW1faWRuLCBmb3JtX2ZpZWxkKSB7XHJcbiAgICBpZiAoc3RyID09IHVuZGVmaW5lZCB8fCBzdHIgPT0gJycgfHwgc3RyLmxlbmd0aCA8IDMpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1tcImZybW5tZVwiXSB8fCAnbG9hZFN1Z2dlc3Rpb25EYXRhJztcclxuICAgIHJlcU9ialsncGFnZV9pdGVtX2lkbiddID0gcGFnZV9pdGVtX2lkbjtcclxuICAgIHJlcU9ialsnbGlrZVN0ciddID0gc3RyO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRTdWdnZXN0aW9uRGF0YUJ5SXRlbUlkbic7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaGVhZGVyKTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9yZWdpc3RlckRhdGFcIikudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgIGxldCBzdWdnZXN0aW9uRGF0YSA9IHJlc3VsdC5zdWdnZXN0aW9uRGF0YSB8fCBbXTtcclxuICAgICAgbGV0IGxpc3QgPSBzdWdnZXN0aW9uRGF0YS5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICB9KSk7XHJcbiAgICAgIHRoaXMuc3FsQXJyYXlbZm9ybV9maWVsZF0gPSBsaXN0O1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvLyBmbCA9IFwic2VsZWN0IHRhYmxlX2NhdGFsb2d8fCcgJ3x8dGFibGVfbmFtZSBrICwgdGFibGVfbmFtZSB2IGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgPSAncHVibGljJyBhbmQgdGFibGVfdHlwZSA9ICdCQVNFIFRBQkxFJyAgYW5kIHRhYmxlX25hbWUgbGlrZSAnI0lOUFVUJScgYW5kIHRhYmxlX25hbWU9Q09BTEVTQ0UobnVsbCx0YWJsZV9uYW1lKSBvcmRlciBieSAxO1wiXHJcblxyXG4gIC8vIHN1Z2dlc3REYXRhOmFueSA9IFtdO1xyXG5cclxuICAvLyBnZXRTdWdnZXRpb24oc2NUKSB7XHJcbiAgLy8gICBpZiAoc2NUID09ICcnIHx8IHNjVCA9PSBudWxsKSByZXR1cm47XHJcbiAgLy8gICBsZXQgc3EgPSB0aGlzLmZsLnJlcGxhY2UoLyNJTlBVVC9nLCBzY1QpO1xyXG4gIC8vICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gIC8vICAgcmVxT2JqWydzcWwnXSA9IHNxO1xyXG4gIC8vICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldERhdGEnO1xyXG4gIC8vICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gIC8vICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAvLyAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAvLyAgICAgICB0aGlzLnN1Z2dlc3REYXRhID0gcmVzcG9uc2Uua3Y7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgLy8gICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gIC8vICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbmEoKXtcclxuICAvLyAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIC8vICAgdGhpcy5zdWdnZXN0RGF0YSA9IFtdO1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIC8vaGlkZSBzaG93IHBhc3N3b3JkIGZpZWxkIHRleHRcclxuXHJcbiAgc2hvd0hJZGVQYXNzKCkge1xyXG4gICAgdGhpcy5lc3RzdCA9ICF0aGlzLmVzdHN0O1xyXG4gICAgaWYgKHRoaXMuZXN0c3QpIHtcclxuICAgICAgdGhpcy5ldmVDID0gJ2ZhLWV5ZSc7XHJcbiAgICAgIHRoaXMuaW5wdXR0eXBlID0gJ3RleHQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ldmVDID0gJ2ZhLWV5ZS1zbGFzaCc7XHJcbiAgICAgIHRoaXMuaW5wdXR0eXBlID0gJ3Bhc3N3b3JkJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vcmVzZXRpbmcgZm9ybVxyXG4gIHJlc2V0ID0gdiA9PiB2LmZvcm0ucmVzZXQoKTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvL2dsb2JsZSBoZWFkZXIgcGFyYW1ldGVyXHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21kbEtleScpKTtcclxuICAgIGxldCBtZGxLZXkgPSBPYmplY3Qua2V5cyhtZGxrKTtcclxuICAgIHRoaXMuY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIHRoaXMuaGVhZGVyID0ge1xyXG4gICAgICAnY2xpZW50a2V5JzogQ29va2llLmdldCgnX2NrJyksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdtb2R1bGVrZXknOiBtZGxrW3RoaXMuY1VybC5zcGxpdCgnLycpWzFdXSxcclxuICAgICAgJ2xvZ2luaWQnOiBDb29raWUuZ2V0KCdfbG9naWQnKSxcclxuICAgICAgJ3NvdXJjZSc6ICdxcydcclxuICAgIH07XHJcbiAgICBsZXQgY29tcGFueUR0bCA9IEpTT04ucGFyc2UoQ29va2llLmdldCgnX2FjY0NvbXBhbnknKSkgfHwge307XHJcbiAgICBsZXQgeWVhckR0bCA9IEpTT04ucGFyc2UoQ29va2llLmdldCgnX2FjY3llYXInKSkgfHwge307XHJcbiAgICBsZXQgc3ViX2NvX2lkbiA9IChjb21wYW55RHRsW1wic3ViX2NvX2lkblwiXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgIGxldCBmaW5feWVhcl9pZG4gPSAoeWVhckR0bFtcImZpbl95ZWFyX2lkblwiXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgIGlmIChzdWJfY29faWRuICE9ICcnKSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyWydzdWJjb21pZG4nXSA9IHN1Yl9jb19pZG47XHJcbiAgICAgIHRoaXMuaGVhZGVyWyd5ZWFyaWRuJ10gPSBmaW5feWVhcl9pZG47XHJcbiAgICB9XHJcbiAgICAvL29uIGZvcm0gbmFtZSBjaGFuZ2VcclxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMud2hySyA9IFwiMVwiO1xyXG4gICAgICB0aGlzLndoclYgPSBcIjFcIjtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSBwYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgICB0aGlzLnNlYXJjaEYgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpbGxBcHAoKVxyXG4gICAgICB0aGlzLmNMaW5rID0gMDtcclxuICAgICAgdGhpcy5wID0gMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsbEFwcCgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWQnO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5oZWFkZXJcIiwgdGhpcy5oZWFkZXIpO1xyXG4gICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkxpc3QgPSByZXNwb25zZS5hcHBsaWNhdGlvbkxpc3Q7XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsbE1vZHVsZShhcHBsSWQpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gIHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgIHJlcU9ialtcImFwcGxjYXRpb25JZG5cIl0gPSBhcHBsSWQ7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE1vZHVsZSc7XHJcbiAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy51c3JMc3QgPSBbXTtcclxuICAgICAgICB0aGlzLm1kbGxpc3QgPSByZXNwb25zZS5tb2R1bGVMaXN0O1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9wZW5Ub2coKSB7XHJcbiAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjtcclxuICAgIGlmICh0aGlzLmlzT3BlbiA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuaWNvbiA9ICdmYSBmYS1kZWRlbnQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pY29uID0gJ2ZhIGZhLWluZGVudCc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4vLyBpZiAodGhpcy53aHJWICE9IG51bGwgJiYgdGhpcy5zdWJGcm1XayAhPSBudWxsKSB7XHJcbi8vICAgaWYgKHRoaXMuc3ViRnJtV3YgIT0gJ0FMTCcpIHtcclxuLy8gICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocksgKyAnficgKyB0aGlzLnN1YkZybVdrO1xyXG4vLyAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9ICcnICsgdGhpcy53aHJWICsgJ34nICsgdGhpcy5zdWJGcm1XdjtcclxuLy8gICB9IGVsc2Uge1xyXG4vLyAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMud2hySztcclxuLy8gICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnJyArIHRoaXMud2hyVjtcclxuLy8gICB9XHJcbi8vICAgdGhpcy53aGVyZU1hcFt0aGlzLnN1YkZybVdrXSA9IHRoaXMuc3ViRnJtV3Y7XHJcbi8vIH0iLCI8ZGl2IGNsYXNzPVwibXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWhlYWRpbmdcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwicGFuZWwtdGl0bGVcIj57e3BhZ2VJbmZvPy50aXRsZX19XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImYtMTJcIj4oe3tjRHQgfCBkYXRlOidtZWRpdW0nfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImFkZEJ0blwiIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIHB1bGwtcmlnaHRcIiAqbmdJZj1cImFkZE5ldz8uaXNfY29tcHVsc29yeSA9PSAxXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VyQWN0aW9uKGRhdGEsICdhZGQnLCAnJyk7Zi5yZXNldCgpO1wiPnt7YWRkTmV3Py5mb3JtX2ZpZWxkX3RpdGxlfX08L2J1dHRvbj5cclxuXHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJyb3V0ZXIudXJsICE9IGN1cmxcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIiAqbmdJZj1cIm5hdmlnYXRpb24ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwgcGFuZWwtZGVmYXVsdFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1ncm91cCBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJyA6aSA9PSBjTGlua31cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG5hdiBvZiBuYXZpZ2F0aW9uO2xldCBpPWluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0aW9uRnVuKG5hdixpKTtcIj57e25hdi5mb3JtX2ZpZWxkX3RpdGxlfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiaXNPcGVuID09IHRydWUgPyAnY29sLW1kLTQnIDogJ2hpZGRlbidcIiAqbmdJZj1cInJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5BcHBsaWNhdGlvbjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cImFwcFwiIG5hbWU9XCJhcHBcIiAoY2hhbmdlKT1cImZpbGxNb2R1bGUoYXBwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIGFwcGxpY2F0aW9uTGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nSWY9XCJtZGxsaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpc09wZW4gPT0gdHJ1ZSA/ICdjb2wtbWQtNCcgOiAnaGlkZGVuJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+TW9kdWxlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoY2hhbmdlKT1cImZpbGxMZXZlbDEodilcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwidlwiIG5hbWU9XCJ2XCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1kbGxpc3RcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIiBzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0XCI+TGV2ZWw8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgIGNsYXNzPVwiZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibDFcIj5MZXZlbCAxPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibDJcIj5MZXZlbCAyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibDNcIj5MZXZlbCAzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uLmxlbmd0aCA+IDAgPyAnY29sLW1kLTEwJyA6IHJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInID8gaXNPcGVuID09IGZhbHNlID8gJ2NvbC1tZC0xMicgOiAnY29sLW1kLTgnIDogJ2NvbC1tZC0xMidcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgW3N0eWxlXT1cInJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInID8gJ21hcmdpbi1ib3R0b206IDM1cHg7JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1sZWZ0XCIgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXSA9PSAnbWVudU1hc3RlcidcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHN0eWxlPVwicGFkZGluZzogNHB4IDE1cHggNHB4IDIwcHg7IG1hcmdpbi1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJGaWx0ZXIgcmVzdWx0c1wiIChjbGljayk9XCJvcGVuVG9nKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3tpY29ufX1cIiBzdHlsZT1cImNvbG9yOiMzYjU5OTg7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1sZWZ0XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZGxQYWdlc2l6ZVwiPlBhZ2UgU2l6ZSAmbmJzcDsgJm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJwYWdlU2l6ZVwiIFsobmdNb2RlbCldPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBcIj41MDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHN0eWxlPVwicGFkZGluZzogNHB4IDE1cHggNHB4IDIwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDE1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsPnt7ZGF0YWxpc3QubGVuZ3RofX08L2xhYmVsPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4YW1wbGVJbnB1dE5hbWUyXCI+U2VhcmNoICZuYnNwOyZuYnNwOzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJleGFtcGxlSW5wdXROYW1lMlwiIG5hbWU9XCJzY2h0eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TUiBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IHRiaCBvZiB0YmxIOyBsZXQgaSA9IGluZGV4IFwiIChjbGljayk9XCJzZXRPcmRlcih0YmgsaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGJsRGVzY1t0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwicmV2ZXJzZVwiICpuZ0lmPVwic2hvd2FyciA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIXJldmVyc2VcIiAqbmdJZj1cInNob3dhcnIgPT09IGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkYXRhbGlzdCB8IHNlYXJjaFBpcGU6c2VhcmNoRiB8IG9yZGVyQnk6IG9yZGVyOnJldmVyc2UgfCBwYWdpbmF0ZTogeyBpdGVtc1BlclBhZ2U6IHBhZ2VTaXplLCBjdXJyZW50UGFnZTogcCB9OyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpICsgMX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIGRyb3Bkb3duLXRvZ2dsZVwiPkFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJBY3Rpb24oZGF0YSwgYWN0aW9uLmZvcm1fZmllbGRfdHlwLCBhY3Rpb24pO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCB0Ymggb2YgdGJsSDsgbGV0IGk9aW5kZXhcIiBvbi1tb3VzZW92ZXI9XCJob3ZlcmVkST1pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uLW1vdXNlbGVhdmU9XCJob3ZlcmVkST0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW3RiaF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9uSG92ZXJEaXZcIiAqbmdJZj1cImk9PWhvdmVyZWRJXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImVkaXRDZWxsKGRhdGEsdGJoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uRm9vdGVyXCIgKm5nSWY9XCJyb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddID09ICdtZW51TWFzdGVyJ1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgdHRpcFwiIChjbGljayk9XCJnZXRQYWdlRGVmaW5hdGlvbigpXCI+RmlsdGVyPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGF0YW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2Y9XCJuZ0Zvcm1cIiBuYW1lPVwiYXBwRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNjbG9zZWJ0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJkZWZNb2RhbEhlYWRcIj57e2J0bk5hbWV9fSBSZWNvcmQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdGb3I9XCJsZXQgZmwgb2YgZm9ybUZpbGRzIHwgb3JkZXJCeVBpcGU6ICdzcnQnOiAnYXNjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJyB8fCBmbD8uZHRhX3R5cCA9PSd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNoYW5nZSk9XCJyZW1vdmVJbnZhbGlkKGZsKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoYmx1cik9XCJ0aGlzW2ZsPy52YWxpZGF0aW9uc10oZmwuZGVmYXVsdF92YWx1ZSlcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlcklucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBtaW5sZW5ndGg9e3tmbD8uZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gbWF4bGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWF4X2xlbmd0aH19LyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm51bWJlcklucHV0LmludmFsaWQgJiYgKG51bWJlcklucHV0LmRpcnR5IHx8IG51bWJlcklucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLm1heGxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IE1heG1pbXVtIGxpbWl0IHt7ZmwuZm9ybV9maWVsZF9tYXhfbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncHcnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdwdydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInt7aW5wdXR0eXBlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBwb3NyZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3Bhc3NJbnB1dD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSB7e2V2ZUN9fSBleWVcIiAoY2xpY2spPVwic2hvd0hJZGVQYXNzKCk7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChibHVyKT1cInRoaXNbZmw/LnZhbGlkYXRpb25zXShmbC5kZWZhdWx0X3ZhbHVlKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5pbnZhbGlkICYmIChwYXNzSW5wdXQuZGlydHkgfHwgcGFzc0lucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsQXNTdHJpbmdzXT1cInRydWVcIiBbYWxsb3dEdXBlc109XCJ0cnVlXCIgW2VkaXRhYmxlXT0ndHJ1ZSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWctaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J3NhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW29wdGlvbnNdPVwic3FsQXJyYXlbZmw/LmZvcm1fZmllbGRdXCIgc3R5bGU9XCJ6LWluZGV4Ojk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIiBbYWxsb3dDbGVhcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3B0aW9uVGVtcGxhdGUgbGV0LW9wdGlvbj1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbWZhbWZhbS1mbGFncyB7e29wdGlvbj8udmFsdWV9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIFthZGRUYWddPVwiYWRkVGFnXCIgYmluZFZhbHVlPVwia1wiIG11bHRpcGxlPVwidHJ1ZVwiIGJpbmRMYWJlbD1cInZcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuaW52YWxpZCAmJiAoc2FmaWVsZC5kaXJ0eSB8fCBzYWZpZWxkLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRBcmVhPVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VuaXFFcnJNc2cnOiBmbD8uZm9ybV9maWVsZCA9PSBvbkVycn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J210MCc6IGZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoZGY9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzcScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZGF0YS10b2dnbGU9XCJidXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb24gYnRuLXhzXCIgKm5nRm9yPVwibGV0IGxvdiBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwibG92LmtcIiBpZD1cInt7aX19XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIj57e2xvdi52fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZGY9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuaW52YWxpZCAmJiAodGRmLmRpcnR5IHx8IHRkZi50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGRmLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdsJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbElucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIGZsLmt2XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5pbnZhbGlkICYmIChsSW5wdXQuZGlydHkgfHwgbElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2xkJyAgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xkSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLmt9fVwiPnt7ZHluYW1pYy52fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmludmFsaWQgJiYgKGxkSW5wdXQuZGlydHkgfHwgbGRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIiBpZD1cInt7ZmwuY29sdW1uX2tleX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NmaT1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkeW5hbWljLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5pbnZhbGlkICYmIChzZmkuZGlydHkgfHwgc2ZpLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzYidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZmk9XCJuZ01vZGVsXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRTdWdnZGF0YSgkZXZlbnQsZmwucGFnZV9pdGVtX2lkbixmbC5mb3JtX2ZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmludmFsaWQgJiYgKHNmaS5kaXJ0eSB8fCBzZmkudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfaWNvbiA9PSAnYWRkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXJvdW5kZWRcIj48c3Bhbj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPjwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcHBBcHBOb0RibENsaWNrIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cIm9uU3VibWl0KGYsc3VibWl0QnRuKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3VibWl0QnRuPnt7YnRuTmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJyZXNldChmKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bk5hbWUgPT0gJ0FkZCdcIj5SZXNldDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc21cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI2RlbGV0ZWNsc2J0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+V2FybmluZzwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInBvcGRhdGFtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJkZWZNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiICNmcG9wPVwibmdGb3JtXCIgbmFtZT1cImFwcEZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjcG9wY2xvc2VidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZGVmTW9kYWxIZWFkXCI+e3tidG5OYW1lfX0gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IGZsIG9mIGZvcm1GaWxkc1BvcHVwIHwgb3JkZXJCeVBpcGU6ICdzcnQnOiAnYXNjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJyB8fCBmbD8uZHRhX3R5cCA9PSd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlcklucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeT09MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbWlubGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWluX2xlbmd0aH19IG1heGxlbmd0aD17e2ZsPy5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fS8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3B3JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0ncHcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e2lucHV0dHlwZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNwYXNzSW5wdXQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSB7e2V2ZUN9fSBleWVcIiAoY2xpY2spPVwic2hvd0hJZGVQYXNzKCk7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFzc0lucHV0LmludmFsaWQgJiYgKHBhc3NJbnB1dC5kaXJ0eSB8fCBwYXNzSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmR0YV90eXAgPT0nYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbEFzU3RyaW5nc109XCJ0cnVlXCIgW2FsbG93RHVwZXNdPVwidHJ1ZVwiIFtlZGl0YWJsZV09J3RydWUnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhZy1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdzYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtvcHRpb25zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIHN0eWxlPVwiei1pbmRleDo5O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNzYWZpZWxkPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCIgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvblRlbXBsYXRlIGxldC1vcHRpb249XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlLnRvTG93ZXJDYXNlKCl9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCIgW2FkZFRhZ109XCJhZGRUYWdcIiBiaW5kVmFsdWU9XCJrXCIgbXVsdGlwbGU9XCJ0cnVlXCIgYmluZExhYmVsPVwidlwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmludmFsaWQgJiYgKHNhZmllbGQuZGlydHkgfHwgc2FmaWVsZC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FmaWVsZC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndGEnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0QXJlYT1cIm5nTW9kZWxcIiAoYmx1cik9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd1bmlxRXJyTXNnJzogZmw/LmZvcm1fZmllbGQgPT0gb25FcnJ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J210MCc6IGZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoZGY9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzcScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RkZj1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkeW5hbWljLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5pbnZhbGlkICYmICh0ZGYuZGlydHkgfHwgdGRmLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2wnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgZmwua3ZcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmludmFsaWQgJiYgKGxJbnB1dC5kaXJ0eSB8fCBsSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnbGQnICAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGRJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMua319XCI+e3tkeW5hbWljLnZ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxkSW5wdXQuaW52YWxpZCAmJiAobGRJbnB1dC5kaXJ0eSB8fCBsZElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKVwiIGlkPVwie3tmbC5jb2x1bW5fa2V5fX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2ZpPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7ZHluYW1pYy52YWx1ZX19XCI+e3tkeW5hbWljLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuaW52YWxpZCAmJiAoc2ZpLmRpcnR5IHx8IHNmaS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFwcEFwcE5vRGJsQ2xpY2sgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUG9wdXBTdWJtaXQoZnBvcCxwb3BzdWJtaXRCdG4pXCIgI3BvcHN1Ym1pdEJ0bj5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwicmVzZXRcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cInJlc2V0KGYpXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInBvcFJlc21vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgbmFtZT1cImFwcEZvcm1yZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJwb3BNb2RhbEhlYWRcIj4gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgcmVzIG9mIFN5c3Jlc3VsdFwiPnt7cmVzfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInByb2R1Y3RNYXBNYXNNRFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc20gbXdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5Qcm9kdWN0IE1hcHBpbmcgb2YmbmJzcDt7e2F0dE1hcE1vZGVsVGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgYXR0ckR0bD8ucHJwTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3trZXkucHJpbnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXR0ck1hcHBpbmdEdGxba2V5Py52YWxdXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQcm9kdWN0TWFzdGVyTWFwcGluZygpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcblxyXG5cclxuICAgIFxyXG5cclxuXHJcbiAgICA8YnV0dG9uIGlkPVwiZGVsZXRlYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RlbGV0ZW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImNsc01kXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJwb3BkYXRhbWRidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwicG9wUmVzbW9kYWxidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wUmVzbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJwcm9kdWN0TWFwTWFzTURidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcHJvZHVjdE1hcE1hc01EXCI+PC9idXR0b24+Il19
|
|
1116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvc3lzdGVtLW1vZHVsZS9zeXN0ZW0vc3lzdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsV0FBVyxFQUFHLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQXlCLE1BQU0saUJBQWlCLENBQUM7QUFFaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQVNoRixNQUFNLE9BQU8sZUFBZTtJQXFGMUIsWUFDUyxNQUFjLEVBQ2QsS0FBcUIsRUFDcEIsTUFBcUIsRUFDckIsRUFBd0IsRUFDeEIsY0FBaUMsRUFDbEMsRUFBd0IsRUFDdkIsRUFBdUI7UUFOeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3BCLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsT0FBRSxHQUFG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QUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsY0FBYyxDQUFDO1NBQzVCO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxHQUFHLGNBQWMsQ0FBQztTQUM1QjtJQUNILENBQUM7OytIQWxtQ1UsZUFBZTttSEFBZixlQUFlLHNtQkNsQjVCLGt1K0RBNjNCZ0g7MkZEMzJCbkcsZUFBZTtrQkFOM0IsU0FBUzsrQkFDRSxZQUFZOzhSQVFDLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDTSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0osS0FBSztzQkFBekIsU0FBUzt1QkFBQyxRQUFRO2dCQUNPLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDQSxTQUFTO3NCQUFoQyxTQUFTO3VCQUFDLFdBQVc7Z0JBQ1MsZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIE5hdmlnYXRpb25FbmQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgU3lzdGVtU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi9zeXN0ZW0tc2VydmljZS9zeXN0ZW0tc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWFuU2VydmljZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21tYW4tc2VydmljZS9jb21tYW4tc2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uL2FkbWluLXNlcnZpY2UvYWRtaW4tc2VydmljZS5zZXJ2aWNlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1zeXN0ZW0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9zeXN0ZW0uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3N5c3RlbS5jb21wb25lbnQuY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTeXN0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vIGl0ZW1zID0gWydQaXp6YScsICdQYXN0YScsICdQYXJtZXNhbiddO1xyXG5cclxuICBAVmlld0NoaWxkKCdjbG9zZWJ0bicpIGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RlbGV0ZWNsc2J0bicpIGRlbGV0ZWNsc2J0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdpbnB1dHMnKSBpbnB1dDogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwb3BjbG9zZWJ0bicpIHBvcGNsb3NlYnRuOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ0bicpIHN1Ym1pdGJ0bjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwcm9kdWN0TWFwY2xzYnRuJykgcHJvZHVjdE1hcGNsc2J0bjogRWxlbWVudFJlZjtcclxuICBjRHQgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICBmb3JtRmlsZHMgPSBbXTtcclxuICBmb3JtRmlsZHNQb3B1cCA9IFtdO1xyXG4gIGRhdGFsaXN0ID0gW107XHJcbiAgYWN0aW9ucyA9IFtdO1xyXG4gIGxvdnMgPSBbXTtcclxuICBhZGROZXc6IGFueSA9IFtdO1xyXG4gIHRibEggPSBbXTtcclxuICB0YmxEZXNjID0gW107XHJcbiAgbmF2aWdhdGlvbiA9IFtdO1xyXG4gIFN5c3Jlc3VsdCA9IFtdO1xyXG4gIGRhdGE7XHJcblxyXG4gIHdoZXJlTWFwID0ge307XHJcbiAgcGFyYU9iaiA9IHt9O1xyXG4gIGN1cnJPYmogPSB7fTtcclxuICBzcWxBcnJheSA9IHt9O1xyXG4gIGdsYk9iaiA9IHt9XHJcblxyXG4gIHBhZ2VTaXplID0gMTA7XHJcbiAgY0xpbmsgPSAwO1xyXG4gIHAgPSAxO1xyXG5cclxuICBldmVDID0gJ2ZhLWV5ZS1zbGFzaCc7XHJcbiAgaW5wdXR0eXBlID0gJ3Bhc3N3b3JkJztcclxuICBvcmRlciA9ICcnO1xyXG5cclxuICByZXZlcnNlID0gZmFsc2U7XHJcbiAgc3ViZm9ybSA9IGZhbHNlO1xyXG4gIGVzdHN0ID0gZmFsc2U7XHJcblxyXG4gIHNob3dhcnI7XHJcbiAgcGFnZUluZm87XHJcbiAgcG9wdXBwYWdlSW5mbztcclxuICBoZWFkZXI7XHJcbiAgYnRuTmFtZTtcclxuICBwaWQ7XHJcbiAgc2VhcmNoRjtcclxuICB3aHJLO1xyXG4gIHdoclY7XHJcbiAgc3ViRnJtV2s7XHJcbiAgc3ViRnJtV3Y7XHJcbiAgbmF2Zm9ybTtcclxuICBvbkVycjtcclxuICBob3ZlcmVkSTtcclxuICB0YkNlbGw7XHJcbiAgdGl0bGVcclxuICBwa2Y7XHJcbiAgY3VybDtcclxuICB1aUdycExpc3Q7XHJcbiAgdWlHcnBMaXN0RHRsO1xyXG4gIGRhdGFEdGxcclxuICBhZGRGcm1ObWU7XHJcbiAgY29pZG47XHJcbiAgY3VycnN0YXQ7XHJcbiAgY1VybDtcclxuICBhY3Rpb247XHJcbiAgYXR0ckR0bDtcclxuICBhdHRyTWFwcGluZ0R0bDtcclxuICBwcm9kdWN0TWFzQXR0cklkO1xyXG4gIGF0dE1hcE1vZGVsVGl0bGU7XHJcbiAgY29udGFjdE5hbWUgPSBcIlwiO1xyXG4gIGlzT3Blbj0gdHJ1ZVxyXG4gIGljb24gPSAnZmEgZmEtZGVkZW50JztcclxuICBhcHBsaWNhdGlvbkxpc3Q6IGFueSA9IFtdO1xyXG4gIGFwcCA9ICcnO1xyXG4gIHY9ICcnO1xyXG4gIHYxID0gJyc7XHJcbiAgdjIgPSAnJztcclxuICB2MyA9ICcnO1xyXG4gIGxldmVsID0gJyc7XHJcbiAgbWRsbGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwxTGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwyTGlzdCA9IFtdO1xyXG4gIG1lbnVsdmwzTGlzdCA9IFtdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHVibGljIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBzczogU3lzdGVtU2VydmljZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwdWJsaWMgY3M6IENvbW1hblNlcnZpY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhczogQWRtaW5TZXJ2aWNlU2VydmljZVxyXG5cclxuICApIHtcclxuXHJcbiAgfVxyXG5cclxuICAvL2xvYWQgcGFnZSBkZWZpbmF0aW9uXHJcbiAgZ2V0UGFnZURlZmluYXRpb24oKSB7XHJcbiAgICB0aGlzLmRhdGFsaXN0ID0gW107XHJcbiAgICB0aGlzLndoZXJlTWFwID0gW107XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuXHJcbiAgICBsZXQgYWN0aW9uID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2FjdGlvbiddIHx8ICcnO1xyXG4gICAgaWYgKHRoaXMud2hyViAhPSBudWxsICYmIHRoaXMuc3ViRnJtV2sgPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gJycgKyB0aGlzLndoclY7XHJcbiAgICAgIHRoaXMud2hlcmVNYXBbdGhpcy53aHJLXSA9IHRoaXMud2hyVjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSAnMSc7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSAnMSc7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZExpc3QnO1xyXG4gICAgaWYgKHRoaXMucGFnZUluZm8gIT0gbnVsbCkge1xyXG4gICAgICB2YXIgcGFnZVRQID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgICAgaWYgKHBhZ2VUUCA9PSAnanNvbkZvcm0nKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoZXJlTWFwW3RoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3Y29udGFjdCcpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IFwibm1lX2lkblwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gXCIwXCI7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3YWNjY29udGFjdCcpIHtcclxuICAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IFwibm1lX2lkblwiO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gXCIwXCI7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKGFjdGlvbiA9PSAnbmV3bGVkZ2VyJykge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gXCJsZWRnZXJfaWRuXCI7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSBcIjBcIjtcclxuXHJcbiAgICB9XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhvcHRpb25zKTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYU9iaikpO1xyXG4gICAgdGhpcy5zcy5nZXREYXRhKHRoaXMucGFyYU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRibEggPSByZXNwb25zZS5kYXRhSGVhZGVyO1xyXG4gICAgICAgIHRoaXMudGJsRGVzYyA9IHJlc3BvbnNlLmRhdGFIZWFkZXJQcmludDtcclxuICAgICAgICB0aGlzLmFkZE5ldyA9IHJlc3BvbnNlLmJ1dHRvbnNbMF0gfHwge307XHJcbiAgICAgICAgdGhpcy5wYWdlSW5mbyA9IHJlc3BvbnNlLnBhZ2VJbmZvO1xyXG4gICAgICAgIHRoaXMucGtmID0gcmVzcG9uc2UucGFnZUluZm8ucHJpbWFyeV9rZXlfZmllbGQ7XHJcbiAgICAgICAgdGhpcy5kYXRhbGlzdCA9IHJlc3BvbnNlLmRhdGFMaXN0IHx8IFtdO1xyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pY29uID0gJ2ZhIGZhLWluZGVudCc7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25zID0gcmVzcG9uc2UuYWN0aW9ucztcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb24gPSByZXNwb25zZS5uYXZpZ2F0aW9uO1xyXG4gICAgICAgIGRlYnVnZ2VyXHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKGFjdGlvbiA9PSAnbmV3Y29udGFjdCcgfHwgYWN0aW9uID09ICduZXdsZWRnZXInIHx8IGFjdGlvbiA9PSAnbmV3YWNjY29udGFjdCcpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gcmVzcG9uc2UubmF2aWdhdGlvblswXTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Rm9ybUZpZWxkcygpO1xyXG4gICAgICAgICAgICB0aGlzLmJ0bk5hbWUgPSAnQWRkJztcclxuICAgICAgICAgIH0sIDUwMClcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9sb2FkIGZvcm0gZmllbGRzXHJcbiAgZ2V0Rm9ybUZpZWxkcygpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgaWYgKHRoaXMud2hyViAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLndocks7XHJcbiAgICAgIHRoaXMucGFyYU9ialsnd2hlcmVWbHVzJ10gPSB0aGlzLndoclY7XHJcbiAgICB9XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZEFkZEVkaXQnO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhT2JqKSlcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVyKSlcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0Rm9ybUYodGhpcy5wYXJhT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzID0gcmVzcG9uc2UuZm9ybUZpZWxkcztcclxuICAgICAgICBkZWJ1Z2dlclxyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAndGInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAncycpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdoZCcpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aGVyZU1hcFtlbGVtZW50LmZvcm1fZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3NxJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuICAvL2xvYWQgZm9ybSBmaWVsZHNcclxuICBnZXRGb3JtRmllbGRzUG9wdXAoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGlmICh0aGlzLndoclYgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gdGhpcy53aHJWO1xyXG5cclxuICAgICAgdGhpcy53aGVyZU1hcFt0aGlzLndocktdID0gdGhpcy53aHJWO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRBZGRFZGl0JztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0Rm9ybUYodGhpcy5wYXJhT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzUG9wdXAgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgIHRoaXMucG9wdXBwYWdlSW5mbyA9IHJlc3BvbnNlLnBhZ2VJbmZvO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzUG9wdXAuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3RiJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldExvdkxpc3QoZWxlbWVudC5mb3JtX2ZpZWxkLCBlbGVtZW50LnBhZ2VfaXRlbV9pZG4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3MnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IHRoaXMud2hlcmVNYXBbZWxlbWVudC5mb3JtX2ZpZWxkXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdzcScpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRTZXF1ZW5jZShlbGVtZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdmaycpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aHJWO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIGludmFsaWQgY2hhcmFjdGVyc1xyXG4gIC8vIHJlbW92ZUludmFsaWQoZmwpIHtcclxuICAvLyAgIGlmIChmbC5mb3JtX2ZpZWxkID09IFwibm1lXCIgfHwgZmwuZm9ybV9maWVsZCA9PSBcInByaW50X25tZVwiKSB7XHJcbiAgLy8gICAgIGZsLmRlZmF1bHRfdmFsdWUgPSBmbC5kZWZhdWx0X3ZhbHVlLnJlcGxhY2UoL1teYS16IF0vZ2ksICcnKTtcclxuICAvLyAgIH1cclxuICAvLyB9O1xyXG5cclxuICAvL3VzZXJzIGFjdGlvbiBsaWtlICdhZGQnLCAnZWRpdCcsICdkZWxldGUnIGFuZCAnYWQgSXRlbSdcclxuICB1c2VyQWN0aW9uKHVhLCBjLCBhKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgY29uc29sZS5sb2codWEsIGMsIGEpO1xyXG4gICAgaWYgKGMgPT0gJ2FkZCcpIHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBhcmFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMucm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXTtcclxuICAgICAgdGhpcy5nZXRGb3JtRmllbGRzKCk7XHJcbiAgICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgfSBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSAnZWRpdCcpIHtcclxuICAgICAgdGhpcy5nbGJPYmogPSB1YTtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkYXRhbWRidG4nKS5jbGljaygpO1xyXG4gICAgICB0aGlzLnBpZCA9IHVhW3RoaXMucGtmXTtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgIHRoaXMuZ2V0RWRpdERhdGEodWFbdGhpcy5wa2ZdKTtcclxuICAgICAgdGhpcy5idG5OYW1lID0gJ0VkaXQnO1xyXG4gICAgfSBlbHNlIGlmIChhLmZvcm1fZmllbGQgPT0gJ2FkZEF0dHInKSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICB0aGlzLmZvcm1GaWxkcyA9IFtdO1xyXG4gICAgICB0aGlzLmN1cmwgPSBhLmxvdl9xcnk7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFthLmxvdl9xcnkudHJpbSgpLCB0aGlzLnBrZiwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICAgIHRoaXMud2hySyA9IHRoaXMucGtmO1xyXG4gICAgICB0aGlzLndoclYgPSB1YVt0aGlzLnBrZl07XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSAnc3ViZm9ybScgJiYgYS5mb3JtX2ZpZWxkICE9IFwib3V0X21hcHBpbmdcIikge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMgPSBbXTtcclxuICAgICAgdGhpcy5jdXJsID0gYS5sb3ZfcXJ5O1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LnRyaW0oKSwgdGhpcy5wa2YsIHVhW3RoaXMucGtmXV0pO1xyXG4gICAgICB0aGlzLndocksgPSB0aGlzLnBrZjtcclxuICAgICAgdGhpcy53aHJWID0gdWFbdGhpcy5wa2ZdO1xyXG4gICAgfSBlbHNlIGlmICh1YSAmJiBjLnRyaW0oKSA9PSAnZGVsZXRlJykge1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVsZXRlYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMucGFyYU9ialsnZm9ybU5tZSddID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgfSBlbHNlIGlmIChjLnRyaW0oKSA9PSAncG9wdXAnKSB7XHJcbiAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncG9wZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSBhLmxvdl9xcnkuc3BsaXQoJy8nKVsyXTtcclxuICAgICAgdGhpcy53aHJLID0gdGhpcy5wa2Y7XHJcbiAgICAgIHRoaXMud2hyViA9IHVhW3RoaXMucGtmXTtcclxuICAgICAgdGhpcy5nZXRGb3JtRmllbGRzUG9wdXAoKTtcclxuICAgICAgdGhpcy5waWQgPSB1YVt0aGlzLnBrZl07XHJcbiAgICAgIHRoaXMuYnRuTmFtZSA9ICdBZGQnO1xyXG4gICAgfSBlbHNlIGlmIChjLnRyaW0oKSA9PSAnZGVmaW5hdGlvbicpIHtcclxuICAgICAgY29uc29sZS5sb2coYS5sb3ZfcXJ5LnRyaW0oKSwgdWFbdGhpcy5wa2ZdKVxyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5sb3ZfcXJ5LnRyaW0oKSwgdWFbdGhpcy5wa2ZdXSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChjLnRyaW0oKSA9PSAnc3ViZm9ybScgJiYgYS5mb3JtX2ZpZWxkID09IFwib3V0X21hcHBpbmdcIikge1xyXG4gICAgICB0aGlzLmxvYWRQcm9kdWN0TWFzdGVyTWFwcGluZyh1YVsnYXR0cl9pZG4nXSk7XHJcbiAgICAgIHRoaXMuYXR0TWFwTW9kZWxUaXRsZSA9IHVhLmRpc3BsYXk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkUHJvZHVjdE1hc3Rlck1hcHBpbmcoYXR0cklkbikge1xyXG4gICAgdGhpcy5wcm9kdWN0TWFzQXR0cklkID0gYXR0cklkbjtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IG9iaiA9IHt9O1xyXG4gICAgb2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICBvYmpbJ2F0dHJfaWRuJ10gPSBhdHRySWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRQcmRNYXN0ZXJNYXBwaW5nJ1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5TYXZlKG9iaiwgb3B0aW9ucywgJ2ZpbGVVcGxvYWQvbG9hZCcpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgICB0aGlzLmF0dHJEdGwgPSByZXN1bHQuYXR0ckR0bDtcclxuICAgICAgICB0aGlzLmF0dHJNYXBwaW5nRHRsID0gcmVzdWx0LmF0dHJNYXBwaW5nRHRsO1xyXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcm9kdWN0TWFwTWFzTURidG4nKS5jbGljaygpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVQcm9kdWN0TWFzdGVyTWFwcGluZygpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgbGV0IG9iaiA9IHt9O1xyXG4gICAgb2JqWydmb3JtTm1lJ10gPSAnZmlsZVVwbG9hZCc7XHJcbiAgICBvYmpbJ2F0dHJfaWRuJ10gPSB0aGlzLnByb2R1Y3RNYXNBdHRySWQ7XHJcbiAgICBvYmpbJ2F0dHJEdGxNYXAnXSA9IHRoaXMuYXR0ck1hcHBpbmdEdGw7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAndXBkYXRlUHJvZHVjdEF0dHInXHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShvYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuU2F2ZShvYmosIG9wdGlvbnMsICdmaWxlVXBsb2FkL2xvYWQnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0TWFwY2xzYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy9zaWRlIG5ldmlnYXRpb24gXHJcbiAgbmF2aWdhdGlvbkZ1bihuYXYsIGkpIHtcclxuICAgIHRoaXMuY0xpbmsgPSBpO1xyXG4gICAgdGhpcy53aHJLID0gbmF2LmNvbHVtbl9rZXkudHJpbSgpO1xyXG4gICAgdGhpcy53aHJWID0gbmF2LmZvcm1fZmllbGQudHJpbSgpO1xyXG4gICAgdGhpcy5uYXZmb3JtID0gbmF2Lmxvdl9xcnkudHJpbSgpO1xyXG4gICAgaWYgKHRoaXMuc3ViRnJtV3YgPT0gJycpIHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3ViRnJtV3YgPSBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubmF2Zm9ybSAhPSAnJykge1xyXG4gICAgICBpZiAodGhpcy5uYXZmb3JtID09ICdhZGR0aW9uYWxEdGxNYXN0ZXInKSB7XHJcbiAgICAgICAgdGhpcy5hZGRGcm1ObWUgPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5nZXROYW1lQXR0cih0aGlzLmFkZEZybU5tZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSB0aGlzLm5hdmZvcm07XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vbG9hZCBlZGl0IHRhYmxlIGRhdGEgd2l0aCBkZWZhdWx0IHZhbHVlXHJcbiAgZ2V0RWRpdERhdGEocGlkKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIHRoaXMuZm9ybUZpbGRzID0gW107XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICB2YXIgcGFnZVRQID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnc2Vjb25kS2V5RmllbGQnXSA9IHRoaXMucGFnZUluZm8uc2Vjb25kX2tleV9maWVsZDtcclxuICAgIGlmICh0aGlzLnRiQ2VsbCAhPSBudWxsKSB7XHJcbiAgICAgIHJlcU9ialsnaW5MaW5lRWRpdENvbHVtbiddID0gdGhpcy50YkNlbGw7XHJcbiAgICB9XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gcGlkO1xyXG4gICAgaWYgKHBhZ2VUUCA9PSAnanNvbkZvcm0nKSB7XHJcbiAgICAgIHJlcU9ialsnd2hlcmVLZXlzJ10gPSB0aGlzLnBhZ2VJbmZvLndoZXJlX2NsYXVzZTtcclxuICAgICAgcmVxT2JqWyd3aGVyZVZsdXMnXSA9IHRoaXMud2hlcmVNYXBbdGhpcy5wYWdlSW5mby53aGVyZV9jbGF1c2VdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZEFkZEVkaXQnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXRFZGl0RChyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJyAmJiByZXNwb25zZS5tZXNzYWdlICE9ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9O1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGlmICh0aGlzLnRiQ2VsbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGF0YW1kYnRuJykuY2xpY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5mb3JtRmlsZHMgPSByZXNwb25zZS5mb3JtRmllbGRzO1xyXG4gICAgICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAndGInKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkX3R5cCA9PSAncycpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRMb3ZMaXN0KGVsZW1lbnQuZm9ybV9maWVsZCwgZWxlbWVudC5wYWdlX2l0ZW1faWRuKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGRfdHlwID09ICdoZCcpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gdGhpcy53aGVyZU1hcFtlbGVtZW50LmZvcm1fZmllbGRdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZF90eXAgPT0gJ3NxJykge1xyXG4gICAgICAgICAgICB0aGlzLmdldFNlcXVlbmNlKGVsZW1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZHRhX3R5cCA9PSAnc2EnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0TG92TGlzdChlbGVtZW50LmZvcm1fZmllbGQsIGVsZW1lbnQucGFnZV9pdGVtX2lkbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VxdWVuY2UoZWxlbWVudCkge1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydzZXEnXSA9IGVsZW1lbnQubG92X3FyeTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdnZXRTZXEnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5nZXREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHZhciBzZXEgPSByZXNwb25zZS5zZXE7XHJcbiAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gc2VxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9sb2FkIGxvdiBkYXRhIGJ5IHBhc3NpbmcgcXVlcnkgdG8gaXRcclxuICBnZXRMb3ZMaXN0KHRibEYsIHBhZ2VfaXRlbV9pZG4pIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsncGFnZV9pdGVtX2lkbiddID0gcGFnZV9pdGVtX2lkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdnZXREYXRhQnlJdGVtSWRuJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZ2V0RGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICB0aGlzLmxvdnMgPSByZXNwb25zZS5rdi5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgICB2YWx1ZTogb3B0aW9uLmssXHJcbiAgICAgICAgICBsYWJlbDogb3B0aW9uLnZcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5zcWxBcnJheVt0YmxGXSA9IHRoaXMubG92cztcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh0YmxGLCBzcWwsIHRoaXMubG92cyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5zcWxBcnJheVt0YmxGXSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vZGVsZXRlIHNwZWZpY2VmaWMgZGF0YSBsaXN0XHJcbiAgZGVsZXRlRGF0YUxpc3QoKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSB0aGlzLnBpZDtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBhZ2VJbmZvLnRhYmxlX25hbWU7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSAnREVMRVRFJztcclxuXHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnc2F2ZSc7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuc3MuZGVsZXRlRGF0YShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLmdldFBhZ2VEZWZpbmF0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5kZWxldGVjbHNidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vZHlhbmFtaWMgZnVuY2F0aW9uXHJcbiAgY2hrRnVuKGZsLCBmRGF0YSkge1xyXG4gICAgaWYgKGZsLnZhbGlkYXRpb25zID09ICcnIHx8IGZsLnZhbGlkYXRpb25zID09IG51bGwpIHsgcmV0dXJuIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoZmwudmFsaWRhdGlvbnMgPT0gJ3ZhbGlkYXRlUXVlcnknKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZVF1ZXJ5KGZsLCBmRGF0YSlcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnaXNVbmlxdWUnKSB7XHJcbiAgICAgICAgdGhpcy5pc1VuaXF1ZShmbCwgZkRhdGEpO1xyXG4gICAgICB9IGVsc2UgaWYgKGZsLnZhbGlkYXRpb25zID09ICdzZXRuYW1lcHJpbnQnKSB7XHJcbiAgICAgICAgdGhpcy5zZXRuYW1lcHJpbnQoZmwsIGZEYXRhKTtcclxuICAgICAgfSBlbHNlIGlmIChmbC52YWxpZGF0aW9ucyA9PSAnc2V0ZmFjdG9yJykge1xyXG4gICAgICAgIHRoaXMuc2V0ZmFjdG9yKGZsLCBmRGF0YSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmwuZm9ybV9maWVsZF90eXAgPT0gJ3MnKSB7XHJcbiAgICAgICAgaWYgKGZsLnZhbGlkYXRpb25zID09IG51bGwpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgbGV0IHNxID0gZmwudmFsaWRhdGlvbnMucmVwbGFjZSgvI1FWQUwvZywgZkRhdGEpO1xyXG4gICAgICAgIC8vIHRoaXMuZ2V0TG92TGlzdChmbC5jb2x1bW5fa2V5LCBzcSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vb24gc3VibWl0IGFjdGlvbiBjaGVja3MgdmFsaWRhdGlvblxyXG4gIG9uU3VibWl0KGZvcm1WYWwsIGJ0bikge1xyXG4gICAgZGVidWdnZXJcclxuICAgIHZhciB0ID0gT2JqZWN0LmtleXMoZm9ybVZhbC5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgZGVidWdnZXJcclxuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1WYWwuZm9ybS5nZXQoZmllbGQpO1xyXG4gICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoeyBvbmx5U2VsZjogdHJ1ZSB9KTtcclxuICAgIH0pO1xyXG4gICAgaWYgKGZvcm1WYWwuZm9ybS52YWxpZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuYWRkZWRpdChmb3JtVmFsLnZhbHVlLCBidG4pO1xyXG4gICAgICAvLyAgdGhpcy5sb3dlcihmb3JtVmFsLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRuYW1lcHJpbnQoZmwsIGZEYXRhKSB7XHJcbiAgICBkZWJ1Z2dlclxyXG4gICAgbGV0IG5tZUlkbiA9IGZEYXRhO1xyXG4gICAgbGV0IGxpc3QgPSB0aGlzLnNxbEFycmF5W2ZsLmZvcm1fZmllbGRdIHx8IFtdO1xyXG4gICAgbGV0IG5td0R0bCA9IGxpc3QuZmluZCh4ID0+IHgudmFsdWUgPT0gbm1lSWRuKSB8fCAnJztcclxuICAgIGlmIChubXdEdGwgIT0gJycpIHtcclxuICAgICAgdGhpcy5mb3JtRmlsZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudC5mb3JtX2ZpZWxkID09ICdubWUnKVxyXG4gICAgICAgICAgZWxlbWVudC5kZWZhdWx0X3ZhbHVlID0gbm13RHRsLmxhYmVsXHJcbiAgICAgICAgaWYgKGVsZW1lbnQuZm9ybV9maWVsZCA9PSAncHJpbnRfbm1lJylcclxuICAgICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IG5td0R0bC5sYWJlbFxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRmYWN0b3IoZmwsIGZEYXRhKSB7XHJcbiAgICBsZXQgZmN0ciA9IC0xO1xyXG4gICAgaWYgKGZEYXRhID09ICdpbmNvbWUnIHx8IGZEYXRhID09ICdhc3NldHMnKVxyXG4gICAgICBmY3RyID0gMTtcclxuICAgIHRoaXMuZm9ybUZpbGRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgIGlmIChlbGVtZW50LmZvcm1fZmllbGQgPT0gJ2ZjdHInKVxyXG4gICAgICAgIGVsZW1lbnQuZGVmYXVsdF92YWx1ZSA9IGZjdHJcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25Qb3B1cFN1Ym1pdChmb3JtVmFsLCBidG4pIHtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICB2YXIgdCA9IE9iamVjdC5rZXlzKGZvcm1WYWwuZm9ybS5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtVmFsLmZvcm0uZ2V0KGZpZWxkKTtcclxuICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9KTtcclxuICAgIGlmIChmb3JtVmFsLmZvcm0udmFsaWQgPT0gdHJ1ZSkge1xyXG4gICAgICBkZWJ1Z2dlclxyXG4gICAgICB0aGlzLmFkZFBvcHVwRnJtKGZvcm1WYWwudmFsdWUsIGJ0bik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG93ZXIodikge1xyXG4gICAgdmFyIGtleSwga2V5cyA9IE9iamVjdC5rZXlzKHYpO1xyXG4gICAgdmFyIG4gPSBrZXlzLmxlbmd0aDtcclxuICAgIHZhciBuZXdvYmogPSB7fVxyXG4gICAgd2hpbGUgKG4tLSkge1xyXG4gICAgICBrZXkgPSBrZXlzW25dO1xyXG4gICAgICBuZXdvYmpba2V5XSA9IHR5cGVvZiB2W2tleV0gPT0gXCJzdHJpbmdcIiA/IHZba2V5XS50b0xvd2VyQ2FzZSgpIDogdltrZXldO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9zdWJtaXQgZGF0YVxyXG4gIGFkZGVkaXQodiwgYnRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBhZ2VJbmZvLnBhZ2VfdHlwLnRyaW0oKTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gdGhpcy5wYWdlSW5mby5mb3JtX25tZTtcclxuICAgIHJlcU9ialsncHJpbWFyeUtleSddID0gdGhpcy5wYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wYWdlSW5mby5wYWdlX3R5cDtcclxuICAgIHJlcU9ialsnc2Vjb25kS2V5RmllbGQnXSA9IHRoaXMucGFnZUluZm8uc2Vjb25kX2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncHJpbWFyeUlkJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnJyA6IFwiXCIgKyB0aGlzLnBpZDtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBhZ2VJbmZvLnRhYmxlX25hbWU7XHJcbiAgICByZXFPYmpbJ3RybnNUeXBlJ10gPSB0aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnQUREJyA6ICdFRElUJztcclxuICAgIHJlcU9ialsnZGF0YVRybnNEdGwnXSA9IHY7XHJcbiAgICBpZiAocGFnZVRQID09ICdqc29uRm9ybScpIHtcclxuICAgICAgcmVxT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMucGFnZUluZm8ud2hlcmVfY2xhdXNlO1xyXG4gICAgICByZXFPYmpbJ3doZXJlVmx1cyddID0gdGhpcy53aGVyZU1hcFt0aGlzLnBhZ2VJbmZvLndoZXJlX2NsYXVzZV07XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlJztcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMuaGVhZGVyKSk7XHJcbiAgICB0aGlzLnNzLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICBkZWJ1Z2dlcjtcclxuICAgICAgICBpZiAodGhpcy5hY3Rpb24gPT0gJ25ld2NvbnRhY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9jb250YWN0L21hc3Rlci9uYW1lTWFzdGVyL25tZV9pZG4vJyArIHJlc3BvbnNlLl9pZF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb24gPT0gJ25ld2FjY2NvbnRhY3QnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9hY2NvdW50cy9jb250YWN0L21hc3Rlci9hY2NOYW1lTWFzdGVyL25tZV9pZG4vJyArIHJlc3BvbnNlLl9pZF0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5hY3Rpb24gPT0gJ25ld2xlZGdlcicpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FjY291bnRzL2FkbWluL21hc3Rlci9sZWRnZXJNYXN0ZXIvbGVkZ2VyX2lkbi8nICsgcmVzcG9uc2UuX2lkXSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7IHRoaXMuc2VhcmNoRiA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlYnRuLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcclxuICAgICAgICAgIGlmICh0aGlzLmFkZE5ldy5sb3ZfcXJ5ID09IG51bGwgfHwgdGhpcy5hZGROZXcubG92X3FyeSA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJzdGF0ID09IFwicG9wdXBcIikge1xyXG4gICAgICAgICAgICAgIC8vIHRoaXMuc2V0U3lzU2V0dXAodGhpcy5jb2lkbik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9hc3RyLnN1Y2Nlc3MocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuYWRkTmV3Lmxvdl9xcnksIHJlc3BvbnNlLl9pZF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnRiQ2VsbCA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkUG9wdXBGcm0odiwgYnRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGRlYnVnZ2VyO1xyXG5cclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHZhciBwYWdlVFAgPSB0aGlzLnBvcHVwcGFnZUluZm8ucGFnZV90eXAudHJpbSgpO1xyXG4gICAgcmVxT2JqWydmb3JtTm1lJ10gPSB0aGlzLnBvcHVwcGFnZUluZm8uZm9ybV9ubWU7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlLZXknXSA9IHRoaXMucG9wdXBwYWdlSW5mby5wcmltYXJ5X2tleV9maWVsZDtcclxuICAgIHJlcU9ialsncGFnZVR5cCddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnBhZ2VfdHlwO1xyXG4gICAgcmVxT2JqWydzZWNvbmRLZXlGaWVsZCddID0gdGhpcy5wb3B1cHBhZ2VJbmZvLnNlY29uZF9rZXlfZmllbGQ7XHJcbiAgICByZXFPYmpbJ3ByaW1hcnlJZCddID0gJyc7Ly90aGlzLmJ0bk5hbWUgPT0gJ0FkZCcgPyAnJyA6IFwiXCIgKyB0aGlzLnBpZDtcclxuICAgIHJlcU9ialsndGFibGVOYW1lJ10gPSB0aGlzLnBvcHVwcGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialsndHJuc1R5cGUnXSA9ICdBREQnO1xyXG4gICAgcmVxT2JqWydkYXRhVHJuc0R0bCddID0gdjtcclxuICAgIGNvbnNvbGUubG9nKFwiYWRkXCIsIEpTT04uc3RyaW5naWZ5KHJlcU9iaikpO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3NhdmUnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy5hZGREYXRhKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuc2V0U3lzU2V0dXAodGhpcy5waWQpO1xyXG4gICAgICAgIHRoaXMucG9wY2xvc2VidG4ubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICBidG4uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTeXNTZXR1cChjb0lkbikge1xyXG4gICAgZGVidWdnZXI7XHJcblxyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWydjb0lkbiddID0gY29JZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnY2xpZW50U2V0dXAnO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsICdzeXN0ZW0vc2V0dXAnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcFJlc21vZGFsYnRuJykuY2xpY2soKTtcclxuICAgICAgICB0aGlzLlN5c3Jlc3VsdCA9IHJlc3BvbnNlLnJlc3VsdDtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy92YWxpZGF0ZSBxdWVyeVxyXG4gIHZhbGlkYXRlUXVlcnkodGJsT2JqLCBmKSB7XHJcbiAgICBpZiAoZiA9PSAnJyB8fCBmID09IG51bGwpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnc3FsJ10gPSBmO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ3ZhbGlkYXRlUXVlcnknO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkocmVxT2JqKSk7XHJcbiAgICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgJ3N5c3RlbS9hcHBwYWdlcycpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm9uRXJyID0gJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkVyciA9IHRibE9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vdmFsaWRhdGUgdGhpcyBmaWVsZCB2YWx1ZSBpcyB1bmlxdWVcclxuICBpc1VuaXF1ZShkdGFPYmosIGlucHVWYWwpIHtcclxuICAgIGlmIChpbnB1VmFsID09ICcnIHx8IGlucHVWYWwgPT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqWyd0YWJsZU5hbWUnXSA9IHRoaXMucGFnZUluZm8udGFibGVfbmFtZTtcclxuICAgIHJlcU9ialsnd2hlcmVLZXlzJ10gPSBkdGFPYmouZm9ybV9maWVsZDtcclxuICAgIHJlcU9ialsnd2hlcmVWbHVzJ10gPSBpbnB1VmFsO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5S2V5J10gPSB0aGlzLnBhZ2VJbmZvLnByaW1hcnlfa2V5X2ZpZWxkO1xyXG4gICAgcmVxT2JqWydwcmltYXJ5SWQnXSA9IHRoaXMuYnRuTmFtZSA9PSAnQWRkJyA/ICcnIDogdGhpcy5waWQ7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAndW5pcXVlQ29uUSc7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLnZhbGlkYXRlKHJlcU9iaiwgb3B0aW9ucywgJ3N5c3RlbS9hcHBwYWdlcycpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLm9uRXJyID0gJyc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy5vbkVyciA9IGR0YU9iai5mb3JtX2ZpZWxkO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpXHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocCkge1xyXG4gICAgaWYgKHAgPT0gJ0FsbCcpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuZGF0YWxpc3QubGVuZ3RoO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL3NvcnRpbmdcclxuICBzZXRPcmRlcih2YWx1ZTogc3RyaW5nLCBpKSB7XHJcbiAgICB0aGlzLnNob3dhcnIgPSBpO1xyXG4gICAgaWYgKHRoaXMub3JkZXIgPT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMucmV2ZXJzZSA9ICF0aGlzLnJldmVyc2U7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9yZGVyID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvL2ZvciBzZXQgbnVsbCB0byB0YWJsZSBjZWxsXHJcbiAgY2xvc2VOdWxsID0gKCkgPT4gdGhpcy50YkNlbGwgPSBudWxsO1xyXG5cclxuICAvL2VkaXQgY2VsbCBvcGVuIG1vZGVsXHJcbiAgZWRpdENlbGwoZCwgdGJoKSB7XHJcbiAgICB0aGlzLmdsYk9iaiA9IGQ7XHJcbiAgICB0aGlzLnRiQ2VsbCA9IHRiaDtcclxuICAgIHRoaXMudGl0bGUgPSBkLnRpdGxlO1xyXG4gICAgdGhpcy5idG5OYW1lID0gJ0VkaXQnO1xyXG4gICAgdGhpcy5waWQgPSBkW3RoaXMucGtmXTtcclxuICAgIHRoaXMuZ2V0RWRpdERhdGEoZFt0aGlzLnBrZl0pO1xyXG4gIH1cclxuXHJcbiAgLy9sb2FkIG5tZSBhdHRyIGRhdGFcclxuICBnZXROYW1lQXR0cihmcm1ubWUpIHtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIGxldCBjdXN0T2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IGZybW5tZTtcclxuICAgIHJlcU9ialsnbm1lSWRuJ10gPSB0aGlzLndoclY7XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE5tZUF0dHInO1xyXG4gICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMsICdzeXN0ZW0vYXBwcGFnZXMnKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy51aUdycExpc3QgPSByZXNwb25zZS51aUdycExpc3Q7XHJcbiAgICAgICAgdGhpcy51aUdycExpc3REdGwgPSByZXNwb25zZS51aUdycExpc3REdGw7XHJcbiAgICAgICAgdGhpcy5kYXRhRHRsID0gcmVzcG9uc2UuZGF0YUR0bDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvL3NhdmUgbm1lIGRhdGEgXHJcbiAgc2F2ZUZ1bihrLCB2KSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIGxldCBzdWJPYmogPSB7fTtcclxuICAgIHN1Yk9ialtrXSA9IHY7XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IHRoaXMuYWRkRnJtTm1lO1xyXG4gICAgcmVxT2JqWydubWVJZG4nXSA9IHRoaXMud2hyVjtcclxuICAgIHJlcU9ialsnZGF0YVRybnNEdGwnXSA9IHN1Yk9iajtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdzYXZlTm1lQXR0cic7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICB0aGlzLnNzLmFkZERhdGEocmVxT2JqLCBvcHRpb25zKS50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkU3VnZ2RhdGEoc3RyLCBwYWdlX2l0ZW1faWRuLCBmb3JtX2ZpZWxkKSB7XHJcbiAgICBpZiAoc3RyID09IHVuZGVmaW5lZCB8fCBzdHIgPT0gJycgfHwgc3RyLmxlbmd0aCA8IDMpIHJldHVybjtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialtcImZvcm1ObWVcIl0gPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1tcImZybW5tZVwiXSB8fCAnbG9hZFN1Z2dlc3Rpb25EYXRhJztcclxuICAgIHJlcU9ialsncGFnZV9pdGVtX2lkbiddID0gcGFnZV9pdGVtX2lkbjtcclxuICAgIHJlcU9ialsnbGlrZVN0ciddID0gc3RyO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRTdWdnZXN0aW9uRGF0YUJ5SXRlbUlkbic7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmhlYWRlcik7XHJcbiAgICBsZXQgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShyZXFPYmopKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaGVhZGVyKTtcclxuICAgIHRoaXMuY3MubG9hZChyZXFPYmosIG9wdGlvbnMsIFwiY29udGFjdC9yZWdpc3RlckRhdGFcIikudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGxldCByZXN1bHQgPSByZXNwb25zZS5yZXN1bHQ7XHJcbiAgICAgIGxldCBzdWdnZXN0aW9uRGF0YSA9IHJlc3VsdC5zdWdnZXN0aW9uRGF0YSB8fCBbXTtcclxuICAgICAgbGV0IGxpc3QgPSBzdWdnZXN0aW9uRGF0YS5tYXAob3B0aW9uID0+ICh7XHJcbiAgICAgICAgdmFsdWU6IG9wdGlvbi5rLFxyXG4gICAgICAgIGxhYmVsOiBvcHRpb24udlxyXG4gICAgICB9KSk7XHJcbiAgICAgIHRoaXMuc3FsQXJyYXlbZm9ybV9maWVsZF0gPSBsaXN0O1xyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICAvLyBmbCA9IFwic2VsZWN0IHRhYmxlX2NhdGFsb2d8fCcgJ3x8dGFibGVfbmFtZSBrICwgdGFibGVfbmFtZSB2IGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyB3aGVyZSB0YWJsZV9zY2hlbWEgPSAncHVibGljJyBhbmQgdGFibGVfdHlwZSA9ICdCQVNFIFRBQkxFJyAgYW5kIHRhYmxlX25hbWUgbGlrZSAnI0lOUFVUJScgYW5kIHRhYmxlX25hbWU9Q09BTEVTQ0UobnVsbCx0YWJsZV9uYW1lKSBvcmRlciBieSAxO1wiXHJcblxyXG4gIC8vIHN1Z2dlc3REYXRhOmFueSA9IFtdO1xyXG5cclxuICAvLyBnZXRTdWdnZXRpb24oc2NUKSB7XHJcbiAgLy8gICBpZiAoc2NUID09ICcnIHx8IHNjVCA9PSBudWxsKSByZXR1cm47XHJcbiAgLy8gICBsZXQgc3EgPSB0aGlzLmZsLnJlcGxhY2UoLyNJTlBVVC9nLCBzY1QpO1xyXG4gIC8vICAgbGV0IHJlcU9iaiA9IHt9O1xyXG4gIC8vICAgcmVxT2JqWydzcWwnXSA9IHNxO1xyXG4gIC8vICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2dldERhdGEnO1xyXG4gIC8vICAgbGV0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gIC8vICAgdGhpcy5zcy52YWxpZGF0ZShyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAvLyAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAvLyAgICAgICB0aGlzLnN1Z2dlc3REYXRhID0gcmVzcG9uc2Uua3Y7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgLy8gICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSlcclxuICAvLyAgICAgfVxyXG4gIC8vICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgLy8gICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gIC8vICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcclxuICAvLyAgIH0pO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8gbmEoKXtcclxuICAvLyAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIC8vICAgdGhpcy5zdWdnZXN0RGF0YSA9IFtdO1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIC8vaGlkZSBzaG93IHBhc3N3b3JkIGZpZWxkIHRleHRcclxuXHJcbiAgc2hvd0hJZGVQYXNzKCkge1xyXG4gICAgdGhpcy5lc3RzdCA9ICF0aGlzLmVzdHN0O1xyXG4gICAgaWYgKHRoaXMuZXN0c3QpIHtcclxuICAgICAgdGhpcy5ldmVDID0gJ2ZhLWV5ZSc7XHJcbiAgICAgIHRoaXMuaW5wdXR0eXBlID0gJ3RleHQnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ldmVDID0gJ2ZhLWV5ZS1zbGFzaCc7XHJcbiAgICAgIHRoaXMuaW5wdXR0eXBlID0gJ3Bhc3N3b3JkJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vcmVzZXRpbmcgZm9ybVxyXG4gIHJlc2V0ID0gdiA9PiB2LmZvcm0ucmVzZXQoKTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvL2dsb2JsZSBoZWFkZXIgcGFyYW1ldGVyXHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21kbEtleScpKTtcclxuICAgIGxldCBtZGxLZXkgPSBPYmplY3Qua2V5cyhtZGxrKTtcclxuICAgIHRoaXMuY1VybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgIHRoaXMuaGVhZGVyID0ge1xyXG4gICAgICAnY2xpZW50a2V5JzogQ29va2llLmdldCgnX2NrJyksXHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdtb2R1bGVrZXknOiBtZGxrW3RoaXMuY1VybC5zcGxpdCgnLycpWzFdXSxcclxuICAgICAgJ2xvZ2luaWQnOiBDb29raWUuZ2V0KCdfbG9naWQnKSxcclxuICAgICAgJ3NvdXJjZSc6ICdxcydcclxuICAgIH07XHJcbiAgICBsZXQgY29tcGFueUR0bCA9IEpTT04ucGFyc2UoQ29va2llLmdldCgnX2FjY0NvbXBhbnknKSkgfHwge307XHJcbiAgICBsZXQgeWVhckR0bCA9IEpTT04ucGFyc2UoQ29va2llLmdldCgnX2FjY3llYXInKSkgfHwge307XHJcbiAgICBsZXQgc3ViX2NvX2lkbiA9IChjb21wYW55RHRsW1wic3ViX2NvX2lkblwiXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgIGxldCBmaW5feWVhcl9pZG4gPSAoeWVhckR0bFtcImZpbl95ZWFyX2lkblwiXSB8fCAnJykudG9TdHJpbmcoKTtcclxuICAgIGlmIChzdWJfY29faWRuICE9ICcnKSB7XHJcbiAgICAgIHRoaXMuaGVhZGVyWydzdWJjb21pZG4nXSA9IHN1Yl9jb19pZG47XHJcbiAgICAgIHRoaXMuaGVhZGVyWyd5ZWFyaWRuJ10gPSBmaW5feWVhcl9pZG47XHJcbiAgICB9XHJcbiAgICAvL29uIGZvcm0gbmFtZSBjaGFuZ2VcclxuICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcclxuICAgICAgdGhpcy5zdWJGcm1XayA9IG51bGw7XHJcbiAgICAgIHRoaXMud2hySyA9IFwiMVwiO1xyXG4gICAgICB0aGlzLndoclYgPSBcIjFcIjtcclxuICAgICAgdGhpcy5wYXJhT2JqWydmb3JtTm1lJ10gPSBwYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgICB0aGlzLnNlYXJjaEYgPSBudWxsO1xyXG4gICAgICB0aGlzLmZpbGxBcHAoKVxyXG4gICAgICB0aGlzLmNMaW5rID0gMDtcclxuICAgICAgdGhpcy5wID0gMTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsbEFwcCgpIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWQnO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5oZWFkZXJcIiwgdGhpcy5oZWFkZXIpO1xyXG4gICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbkxpc3QgPSByZXNwb25zZS5hcHBsaWNhdGlvbkxpc3Q7XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlRGVmaW5hdGlvbigpO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmlsbE1vZHVsZShhcHBsSWQpIHtcclxuICAgIGlmKGFwcGxJZCA9PSAnJykge1xyXG4gICAgICB0aGlzLm1kbGxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5tZW51bHZsMUxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5tZW51bHZsMkxpc3QgPSBbXTtcclxuICAgICAgdGhpcy5tZW51bHZsM0xpc3QgPSBbXTtcclxuICAgICAgdGhpcy50b2FzdHIud2FybmluZygnUGxlYXNlIFNlbGVjdCBBcHBsaWNhdGlvbicpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgICBjb25zdCByZXFPYmogPSB7fTtcclxuICAgICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9ICB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ107XHJcbiAgICAgIHJlcU9ialtcImFwcGxjYXRpb25JZG5cIl0gPSBhcHBsSWQ7XHJcbiAgICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkTW9kdWxlJztcclxuICAgICAgY29uc3Qgb3B0aW9ucyA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh0aGlzLmhlYWRlcikgfSk7XHJcbiAgICAgIHRoaXMuYXMuZ2V0TWVudVJpZ2h0cyhyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICAgIHRoaXMubWRsbGlzdCA9IHJlc3BvbnNlLm1vZHVsZUxpc3Q7XHJcbiAgICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWxsTGV2ZWwxKG1vZHVsZV9pZG4pIHtcclxuICAgIHRoaXMuc3Bpbm5lclNlcnZpY2Uuc2hvdygpO1xyXG4gICAgY29uc29sZS5sb2cobW9kdWxlX2lkbilcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwibWVudVJpZ2h0c01hc3RlclwiO1xyXG4gICAgcmVxT2JqW1wibW9kdWxlSWRuXCJdID0gbW9kdWxlX2lkbjtcclxuICAgIHRoaXMuaGVhZGVyWydtZXRob2QnXSA9ICdsb2FkTWVudWxldmVsMSc7XHJcbiAgICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuYXMuZ2V0TWVudVJpZ2h0cyhyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMubWVudWx2bDJMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5tZW51bHZsM0xpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLm1lbnVsdmwxTGlzdCA9IHJlc3BvbnNlLmt2O1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSkuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZpbGxMZXZlbDIobW9kdWxlX2lkbiwgbWVudUlkbikge1xyXG4gICAgdGhpcy5zcGlubmVyU2VydmljZS5zaG93KCk7XHJcbiAgICBjb25zb2xlLmxvZyhtb2R1bGVfaWRuKTtcclxuICAgIGNvbnNvbGUubG9nKG1lbnVJZG4pO1xyXG4gICAgY29uc3QgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbXCJmb3JtTm1lXCJdID0gXCJtZW51UmlnaHRzTWFzdGVyXCI7XHJcbiAgICByZXFPYmpbXCJtb2R1bGVJZG5cIl0gPSBtb2R1bGVfaWRuO1xyXG4gICAgcmVxT2JqW1wibWVudUlkblwiXSA9IG1lbnVJZG47XHJcbiAgICB0aGlzLmhlYWRlclsnbWV0aG9kJ10gPSAnbG9hZE1lbnVsZXZlbDInO1xyXG4gICBjb25zdCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMuYXMuZ2V0TWVudVJpZ2h0cyhyZXFPYmosIG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09ICdTVUNDRVNTJykge1xyXG4gICAgICAgIHRoaXMubWVudWx2bDJMaXN0ID0gcmVzcG9uc2Uua3Y7XHJcbiAgICAgICAgdGhpcy5tZW51bHZsM0xpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVsdmwyTGlzdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgc3VibWVudUNoYW5nZShtb2R1bGVfaWRuLCBzdWJtZW51SWRuKSB7XHJcbiAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLnNob3coKTtcclxuICAgIGNvbnN0IHJlcU9iaiA9IHt9O1xyXG4gICAgcmVxT2JqW1wiZm9ybU5tZVwiXSA9IFwibWVudVJpZ2h0c01hc3RlclwiO1xyXG4gICAgcmVxT2JqW1wibW9kdWxlSWRuXCJdID0gbW9kdWxlX2lkbjtcclxuICAgIHJlcU9ialtcIm1lbnVJZG5cIl0gPSBzdWJtZW51SWRuO1xyXG4gICAgdGhpcy5oZWFkZXJbJ21ldGhvZCddID0gJ2xvYWRNZW51bGV2ZWwzJztcclxuICAgIGNvbnN0IG9wdGlvbnMgPSAoeyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnModGhpcy5oZWFkZXIpIH0pO1xyXG4gICAgdGhpcy5hcy5nZXRNZW51UmlnaHRzKHJlcU9iaiwgb3B0aW9ucykudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gJ1NVQ0NFU1MnKSB7XHJcbiAgICAgICAgdGhpcy5tZW51bHZsM0xpc3QgPSByZXNwb25zZS5rdjtcclxuICAgICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyh0aGlzLm1lbnVsdmwzTGlzdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zcGlubmVyU2VydmljZS5oaWRlKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNwaW5uZXJTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpO1xyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgb3BlblRvZygpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gIXRoaXMuaXNPcGVuO1xyXG4gICAgaWYgKHRoaXMuaXNPcGVuID09IHRydWUpIHtcclxuICAgICAgdGhpcy5pY29uID0gJ2ZhIGZhLWRlZGVudCc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmljb24gPSAnZmEgZmEtaW5kZW50JztcclxuICAgIH1cclxuICB9XHJcblxyXG59XHJcbi8vIGlmICh0aGlzLndoclYgIT0gbnVsbCAmJiB0aGlzLnN1YkZybVdrICE9IG51bGwpIHtcclxuLy8gICBpZiAodGhpcy5zdWJGcm1XdiAhPSAnQUxMJykge1xyXG4vLyAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZUtleXMnXSA9IHRoaXMud2hySyArICd+JyArIHRoaXMuc3ViRnJtV2s7XHJcbi8vICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlVmx1cyddID0gJycgKyB0aGlzLndoclYgKyAnficgKyB0aGlzLnN1YkZybVd2O1xyXG4vLyAgIH0gZWxzZSB7XHJcbi8vICAgICB0aGlzLnBhcmFPYmpbJ3doZXJlS2V5cyddID0gdGhpcy53aHJLO1xyXG4vLyAgICAgdGhpcy5wYXJhT2JqWyd3aGVyZVZsdXMnXSA9ICcnICsgdGhpcy53aHJWO1xyXG4vLyAgIH1cclxuLy8gICB0aGlzLndoZXJlTWFwW3RoaXMuc3ViRnJtV2tdID0gdGhpcy5zdWJGcm1XdjtcclxuLy8gfSIsIjxkaXYgY2xhc3M9XCJtdFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtaGVhZGluZ1wiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJwYW5lbC10aXRsZVwiPnt7cGFnZUluZm8/LnRpdGxlfX1cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi0xMlwiPih7e2NEdCB8IGRhdGU6J21lZGl1bSd9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLWluZm8gcHVsbC1yaWdodFwiICpuZ0lmPVwiYWRkTmV3Py5pc19jb21wdWxzb3J5ID09IDFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJBY3Rpb24oZGF0YSwgJ2FkZCcsICcnKTtmLnJlc2V0KCk7XCI+e3thZGROZXc/LmZvcm1fZmllbGRfdGl0bGV9fTwvYnV0dG9uPlxyXG5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInJvdXRlci51cmwgIT0gY3VybFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMlwiICpuZ0lmPVwibmF2aWdhdGlvbi5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbCBwYW5lbC1kZWZhdWx0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFuZWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsaXN0LWdyb3VwIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtXCIgW25nQ2xhc3NdPVwieydhY3RpdmUnIDppID09IGNMaW5rfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbmF2IG9mIG5hdmlnYXRpb247bGV0IGk9aW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRpb25GdW4obmF2LGkpO1wiPnt7bmF2LmZvcm1fZmllbGRfdGl0bGV9fSA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJpc09wZW4gPT0gdHJ1ZSA/ICdjb2wtbWQtNCcgOiAnaGlkZGVuJ1wiICpuZ0lmPVwicm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXSA9PSAnbWVudU1hc3RlcidcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb250cm9sLWxhYmVsXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodFwiPkFwcGxpY2F0aW9uPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwiYXBwXCIgbmFtZT1cImFwcFwiIChjaGFuZ2UpPVwiZmlsbE1vZHVsZShhcHApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgYXBwbGljYXRpb25MaXN0XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGZvcm0tZ3JvdXBcIiAqbmdJZj1cIm1kbGxpc3Q/Lmxlbmd0aCA+IDEgXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtNCc+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5Nb2R1bGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJ2XCIgbmFtZT1cInZcIiAgKGNoYW5nZSk9XCJmaWxsTGV2ZWwxKHYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgbWRsbGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwibWVudWx2bDFMaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5NYWluIE1lbnU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJ2MVwiIG5hbWU9XCJ2MVwiIChjaGFuZ2UpPVwiZmlsbExldmVsMih2LHYxKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1lbnVsdmwxTGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwibWVudWx2bDJMaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5TdWIgTWVudTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBbKG5nTW9kZWwpXT1cInYyXCIgbmFtZT1cInYyXCIgKGNoYW5nZSk9XCJzdWJtZW51Q2hhbmdlKHYsIHYyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIG1lbnVsdmwyTGlzdFwiIHZhbHVlPVwie3tsb3Yua319XCI+e3tsb3Yudn19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZm9ybS1ncm91cFwiICpuZ0lmPVwibWVudWx2bDNMaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5QYWdlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwidjNcIiBuYW1lPVwidjNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGxvdiBvZiBtZW51bHZsM0xpc3RcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBmb3JtLWdyb3VwXCIgKm5nSWY9XCJtZGxsaXN0Py5sZW5ndGggPiAxIFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiIHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHRcIj5MZXZlbDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgWyhuZ01vZGVsKV09XCJsZXZlbFwiIG5hbWU9XCJsZXZlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIicnXCI+U2VsZWN0PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibDFcIj5MZXZlbCAxPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibDJcIj5MZXZlbCAyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwibDNcIj5MZXZlbCAzPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uLmxlbmd0aCA+IDAgPyAnY29sLW1kLTEwJyA6IHJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInID8gaXNPcGVuID09IGZhbHNlID8gJ2NvbC1tZC0xMicgOiAnY29sLW1kLTgnIDogJ2NvbC1tZC0xMidcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhbmVsIHBhbmVsLWRlZmF1bHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYW5lbC1ib2R5XCIgW3N0eWxlXT1cInJvdXRlLnNuYXBzaG90LnBhcmFtc1snZnJtbm1lJ10gPT0gJ21lbnVNYXN0ZXInID8gJ21hcmdpbi1ib3R0b206IDM1cHg7JyA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cclxuICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taW5saW5lIHB1bGwtcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJleGFtcGxlSW5wdXROYW1lMlwiPlNlYXJjaCAmbmJzcDsmbmJzcDs8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiZXhhbXBsZUlucHV0TmFtZTJcIiBuYW1lPVwic2NodHh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1sZWZ0XCIgPiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwicm91dGUuc25hcHNob3QucGFyYW1zWydmcm1ubWUnXSA9PSAnbWVudU1hc3RlcidcIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHN0eWxlPVwicGFkZGluZzogNHB4IDE1cHggNHB4IDIwcHg7IG1hcmdpbi1yaWdodDogMTBweDsgbWFyZ2luLWJvdHRvbTogMTVweDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJGaWx0ZXIgcmVzdWx0c1wiIChjbGljayk9XCJvcGVuVG9nKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwie3tpY29ufX1cIiBzdHlsZT1cImNvbG9yOiMzYjU5OTg7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1pbmxpbmUgcHVsbC1sZWZ0XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZGxQYWdlc2l6ZVwiPlBhZ2UgU2l6ZSAmbmJzcDsgJm5ic3A7PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbFwiIG5hbWU9XCJwYWdlU2l6ZVwiIFsobmdNb2RlbCldPVwicGFnZVNpemVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFsbFwiPkFsbDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwXCI+MTA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCIyNVwiPjI1PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiNTBcIj41MDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIjEwMFwiPjEwMDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHN0eWxlPVwicGFkZGluZzogNHB4IDE1cHggNHB4IDIwcHg7bWFyZ2luLWxlZnQ6IDEwcHg7IG1hcmdpbi1ib3R0b206IDE1cHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cInRvb2x0aXBcIiBkYXRhLXBsYWNlbWVudD1cInJpZ2h0XCIgdGl0bGU9XCJSZWZyZXNoXCIgKGNsaWNrKT1cIm5nT25Jbml0KCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1yZWZyZXNoXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsPnt7ZGF0YWxpc3QubGVuZ3RofX08L2xhYmVsPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtLWlubGluZSBwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImV4YW1wbGVJbnB1dE5hbWUyXCI+U2VhcmNoICZuYnNwOyZuYnNwOzwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJleGFtcGxlSW5wdXROYW1lMlwiIG5hbWU9XCJzY2h0eHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5TUiBObzwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5BY3Rpb248L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IHRiaCBvZiB0YmxIOyBsZXQgaSA9IGluZGV4IFwiIChjbGljayk9XCJzZXRPcmRlcih0YmgsaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGJsRGVzY1t0YmhdfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwicmV2ZXJzZVwiICpuZ0lmPVwic2hvd2FyciA9PT0gaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYXJyb3ctZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtoaWRkZW5dPVwiIXJldmVyc2VcIiAqbmdJZj1cInNob3dhcnIgPT09IGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LXVwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YSBvZiBkYXRhbGlzdCB8IHNlYXJjaFBpcGU6c2VhcmNoRiB8IG9yZGVyQnk6IG9yZGVyOnJldmVyc2UgfCBwYWdpbmF0ZTogeyBpdGVtc1BlclBhZ2U6IHBhZ2VTaXplLCBjdXJyZW50UGFnZTogcCB9OyBsZXQgaSA9IGluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tpICsgMX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCIjXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pbmZvIGRyb3Bkb3duLXRvZ2dsZVwiPkFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcmV0XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgcm9sZT1cIm1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVzZXJBY3Rpb24oZGF0YSwgYWN0aW9uLmZvcm1fZmllbGRfdHlwLCBhY3Rpb24pO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7YWN0aW9uLmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0Zvcj1cImxldCB0Ymggb2YgdGJsSDsgbGV0IGk9aW5kZXhcIiBvbi1tb3VzZW92ZXI9XCJob3ZlcmVkST1pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uLW1vdXNlbGVhdmU9XCJob3ZlcmVkST0tMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkYXRhW3RiaF19fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9uSG92ZXJEaXZcIiAqbmdJZj1cImk9PWhvdmVyZWRJXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgKGNsaWNrKT1cImVkaXRDZWxsKGRhdGEsdGJoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGVuY2lsXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8cGFnaW5hdGlvbi1jb250cm9scyAocGFnZUNoYW5nZSk9XCJwID0gJGV2ZW50XCIgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uRm9vdGVyXCIgKm5nSWY9XCJyb3V0ZS5zbmFwc2hvdC5wYXJhbXNbJ2ZybW5tZSddID09ICdtZW51TWFzdGVyJ1wiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlkPVwiYWRkQnRuXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgdHRpcFwiIChjbGljayk9XCJnZXRQYWdlRGVmaW5hdGlvbigpXCI+RmlsdGVyPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbFwiIGlkPVwiZGF0YW1vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgI2Y9XCJuZ0Zvcm1cIiBuYW1lPVwiYXBwRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNjbG9zZWJ0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJkZWZNb2RhbEhlYWRcIj57e2J0bk5hbWV9fSBSZWNvcmQ8L2g0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdGb3I9XCJsZXQgZmwgb2YgZm9ybUZpbGRzIHwgb3JkZXJCeVBpcGU6ICdzcnQnOiAnYXNjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJyB8fCBmbD8uZHRhX3R5cCA9PSd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gKGNoYW5nZSk9XCJyZW1vdmVJbnZhbGlkKGZsKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAoYmx1cik9XCJ0aGlzW2ZsPy52YWxpZGF0aW9uc10oZmwuZGVmYXVsdF92YWx1ZSlcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuaW52YWxpZCAmJiAodGV4dElucHV0LmRpcnR5IHx8IHRleHRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJ0ZXh0SW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmVycm9ycy5tYXhsZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBNYXhtaW11bSBsaW1pdCB7e2ZsLmZvcm1fZmllbGRfbWF4X2xlbmd0aH19IGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlcklucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBtaW5sZW5ndGg9e3tmbD8uZm9ybV9maWVsZF9taW5fbGVuZ3RofX0gbWF4bGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWF4X2xlbmd0aH19LyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm51bWJlcklucHV0LmludmFsaWQgJiYgKG51bWJlcklucHV0LmRpcnR5IHx8IG51bWJlcklucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLm1pbmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IG11c3QgYmUgYXQgbGVhc3Qge3tmbC5mb3JtX2ZpZWxkX21pbl9sZW5ndGh9fSBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLm1heGxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IE1heG1pbXVtIGxpbWl0IHt7ZmwuZm9ybV9maWVsZF9tYXhfbGVuZ3RofX0gY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncHcnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdwdydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInt7aW5wdXR0eXBlfX1cIiBjbGFzcz1cImZvcm0tY29udHJvbCBwb3NyZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCIgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3Bhc3NJbnB1dD1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSB7e2V2ZUN9fSBleWVcIiAoY2xpY2spPVwic2hvd0hJZGVQYXNzKCk7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIChibHVyKT1cInRoaXNbZmw/LnZhbGlkYXRpb25zXShmbC5kZWZhdWx0X3ZhbHVlKVwiIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5pbnZhbGlkICYmIChwYXNzSW5wdXQuZGlydHkgfHwgcGFzc0lucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwYXNzSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J2EnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21vZGVsQXNTdHJpbmdzXT1cInRydWVcIiBbYWxsb3dEdXBlc109XCJ0cnVlXCIgW2VkaXRhYmxlXT0ndHJ1ZSc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWctaW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5kdGFfdHlwID09J3NhJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW29wdGlvbnNdPVwic3FsQXJyYXlbZmw/LmZvcm1fZmllbGRdXCIgc3R5bGU9XCJ6LWluZGV4Ojk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cInRydWVcIiBbYWxsb3dDbGVhcl09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjb3B0aW9uVGVtcGxhdGUgbGV0LW9wdGlvbj1cIm9wdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZhbWZhbWZhbS1mbGFncyB7e29wdGlvbj8udmFsdWV9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIFthZGRUYWddPVwiYWRkVGFnXCIgYmluZFZhbHVlPVwia1wiIG11bHRpcGxlPVwidHJ1ZVwiIGJpbmRMYWJlbD1cInZcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgI3NhZmllbGQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNhZmllbGQuaW52YWxpZCAmJiAoc2FmaWVsZC5kaXJ0eSB8fCBzYWZpZWxkLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwICYmIGZsPy5kdGFfdHlwID09J2MnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcm93cz1cIjNcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRBcmVhPVwibmdNb2RlbFwiIChibHVyKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3VuaXFFcnJNc2cnOiBmbD8uZm9ybV9maWVsZCA9PSBvbkVycn1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gMVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J210MCc6IGZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoZGY9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzcScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgZGF0YS10b2dnbGU9XCJidXR0b25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tb24gYnRuLXhzXCIgKm5nRm9yPVwibGV0IGxvdiBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXTtsZXQgaT1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBbdmFsdWVdPVwibG92LmtcIiBpZD1cInt7aX19XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIj57e2xvdi52fX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZGY9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLnZhbHVlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZHluYW1pYy5sYWJlbH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuaW52YWxpZCAmJiAodGRmLmRpcnR5IHx8IHRkZi50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGRmLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdsJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbElucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgbG92IG9mIGZsLmt2XCIgdmFsdWU9XCJ7e2xvdi5rfX1cIj57e2xvdi52fX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5pbnZhbGlkICYmIChsSW5wdXQuZGlydHkgfHwgbElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsSW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2xkJyAgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2xkSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBkeW5hbWljIG9mIHNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwie3tkeW5hbWljLmt9fVwiPnt7ZHluYW1pYy52fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmludmFsaWQgJiYgKGxkSW5wdXQuZGlydHkgfHwgbGRJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibGRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAncycgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIiBpZD1cInt7ZmwuY29sdW1uX2tleX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3NmaT1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkeW5hbWljLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5pbnZhbGlkICYmIChzZmkuZGlydHkgfHwgc2ZpLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzYidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IHN0eWxlPVwiei1pbmRleDogNTtcIiBbb3B0aW9uc109XCJzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNzZmk9XCJuZ01vZGVsXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVySW5wdXRDaGFuZ2VkKT1cImxvYWRTdWdnZGF0YSgkZXZlbnQsZmwucGFnZV9pdGVtX2lkbixmbC5mb3JtX2ZpZWxkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmludmFsaWQgJiYgKHNmaS5kaXJ0eSB8fCBzZmkudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNmaS5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMVwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfaWNvbiA9PSAnYWRkJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3MgYnRuLXJvdW5kZWRcIj48c3Bhbj48aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS1wbHVzXCI+PC9pPjwvc3Bhbj48L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBhcHBBcHBOb0RibENsaWNrIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cIm9uU3VibWl0KGYsc3VibWl0QnRuKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc3VibWl0QnRuPnt7YnRuTmFtZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInJlc2V0XCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIChjbGljayk9XCJyZXNldChmKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJ0bk5hbWUgPT0gJ0FkZCdcIj5SZXNldDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCIgaWQ9XCJkZWxldGVtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc21cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiAoY2xpY2spPVwiY2xvc2VOdWxsKCk7XCIgI2RlbGV0ZWNsc2J0bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cInNtYWxsTW9kYWxIZWFkXCI+V2FybmluZzwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQXJlIHlvdSBzdXJlIHdhbnQgdG8gZGVsZXRlP1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRhbmdlclwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZURhdGFMaXN0KCk7XCI+RGVsZXRlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInBvcGRhdGFtb2RhbFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJkZWZNb2RhbEhlYWRcIiBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgIGRhdGEtYmFja2Ryb3A9XCJzdGF0aWNcIiBkYXRhLWtleWJvYXJkPVwiZmFsc2VcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Zm9ybSBjbGFzcz1cImZvcm0taG9yaXpvbnRhbFwiICNmcG9wPVwibmdGb3JtXCIgbmFtZT1cImFwcEZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIiAjcG9wY2xvc2VidG4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+Q2xvc2U8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZGVmTW9kYWxIZWFkXCI+e3tidG5OYW1lfX0gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nRm9yPVwibGV0IGZsIG9mIGZvcm1GaWxkc1BvcHVwIHwgb3JkZXJCeVBpcGU6ICdzcnQnOiAnYXNjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJyB8fCBmbD8uZHRhX3R5cCA9PSd0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0SW5wdXQ9XCJuZ01vZGVsXCIgKGJsdXIpPVwiY2hrRnVuKGZsLGZsLmRlZmF1bHRfdmFsdWUpO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndW5pcUVyck1zZyc6IGZsPy5mb3JtX2ZpZWxkID09IG9uRXJyfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dElucHV0LmludmFsaWQgJiYgKHRleHRJbnB1dC5kaXJ0eSB8fCB0ZXh0SW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRleHRJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3QnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSduJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI251bWJlcklucHV0PVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeT09MVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gbWlubGVuZ3RoPXt7Zmw/LmZvcm1fZmllbGRfbWluX2xlbmd0aH19IG1heGxlbmd0aD17e2ZsPy5mb3JtX2ZpZWxkX21heF9sZW5ndGh9fS8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJudW1iZXJJbnB1dC5pbnZhbGlkICYmIChudW1iZXJJbnB1dC5kaXJ0eSB8fCBudW1iZXJJbnB1dC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibnVtYmVySW5wdXQuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ3B3JyAmJiBmbD8uaXNfaGlkZGVuID09IDAgJiYgZmw/LmR0YV90eXAgPT0ncHcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ7e2lucHV0dHlwZX19XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgcG9zcmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNwYXNzSW5wdXQ9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSB7e2V2ZUN9fSBleWVcIiAoY2xpY2spPVwic2hvd0hJZGVQYXNzKCk7XCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicGFzc0lucHV0LmludmFsaWQgJiYgKHBhc3NJbnB1dC5kaXJ0eSB8fCBwYXNzSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInBhc3NJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndCcgJiYgZmw/LmR0YV90eXAgPT0nYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZy1pbnB1dCBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbEFzU3RyaW5nc109XCJ0cnVlXCIgW2FsbG93RHVwZXNdPVwidHJ1ZVwiIFtlZGl0YWJsZV09J3RydWUnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhZy1pbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0JyAmJiBmbD8uZHRhX3R5cCA9PSdzYSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtvcHRpb25zXT1cInNxbEFycmF5W2ZsPy5mb3JtX2ZpZWxkXVwiIHN0eWxlPVwiei1pbmRleDo5O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiICNzYWZpZWxkPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAxXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJ0cnVlXCIgW2FsbG93Q2xlYXJdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI29wdGlvblRlbXBsYXRlIGxldC1vcHRpb249XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmYW1mYW1mYW0tZmxhZ3Mge3tvcHRpb24/LnZhbHVlLnRvTG93ZXJDYXNlKCl9fVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24/LmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInNxbEFycmF5W2ZsLmZvcm1fZmllbGRdXCIgW2FkZFRhZ109XCJhZGRUYWdcIiBiaW5kVmFsdWU9XCJrXCIgbXVsdGlwbGU9XCJ0cnVlXCIgYmluZExhYmVsPVwidlwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIiAjc2FmaWVsZD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzYWZpZWxkLmludmFsaWQgJiYgKHNhZmllbGQuZGlydHkgfHwgc2FmaWVsZC50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2FmaWVsZC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAndGEnICYmIGZsPy5pc19oaWRkZW4gPT0gMCAmJiBmbD8uZHRhX3R5cCA9PSdjJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJvd3M9XCIzXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0QXJlYT1cIm5nTW9kZWxcIiAoYmx1cik9XCJjaGtGdW4oZmwsZmwuZGVmYXVsdF92YWx1ZSk7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd1bmlxRXJyTXNnJzogZmw/LmZvcm1fZmllbGQgPT0gb25FcnJ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZXh0QXJlYS5pbnZhbGlkICYmICh0ZXh0QXJlYS5kaXJ0eSB8fCB0ZXh0QXJlYS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwidGV4dEFyZWEuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2hkJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2RmJyB8fCBmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2ZrJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J210MCc6IGZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnaGQnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNoZGY9XCJuZ01vZGVsXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzcScgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICd0YicgJiYgZmw/LmlzX2hpZGRlbiA9PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1tZC0zIGNvbnRyb2wtbGFiZWxcIj57e2ZsPy5mb3JtX2ZpZWxkX3RpdGxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cImZsLmlzX2NvbXB1bHNvcnkgPT0gMVwiPio8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIHctMTAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tY29udHJvbCBzZWxlY3RcIiBuYW1lPVwie3tmbD8uZm9ybV9maWVsZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZsPy5kZWZhdWx0X3ZhbHVlXCIgWyhuZ01vZGVsKV09XCJmbC5kZWZhdWx0X3ZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RkZj1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMudmFsdWV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tkeW5hbWljLmxhYmVsfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRkZi5pbnZhbGlkICYmICh0ZGYuZGlydHkgfHwgdGRmLnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0ZGYuZXJyb3JzLnJlcXVpcmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZmwuZm9ybV9maWVsZF90aXRsZX19IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCIgKm5nSWY9XCJmbD8uZm9ybV9maWVsZF90eXAgPT0gJ2wnICYmIGZsPy5pc19oaWRkZW4gPT0gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbWQtMyBjb250cm9sLWxhYmVsXCI+e3tmbD8uZm9ybV9maWVsZF90aXRsZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCIgKm5nSWY9XCJmbC5pc19jb21wdWxzb3J5ID09IDFcIj4qPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCB3LTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2wgc2VsZWN0XCIgbmFtZT1cInt7Zmw/LmZvcm1fZmllbGR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmbD8uZGVmYXVsdF92YWx1ZVwiIFsobmdNb2RlbCldPVwiZmwuZGVmYXVsdF92YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNsSW5wdXQ9XCJuZ01vZGVsXCIgW3JlcXVpcmVkXT1cImZsPy5pc19jb21wdWxzb3J5ID09ICcxJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBsb3Ygb2YgZmwua3ZcIiB2YWx1ZT1cInt7bG92Lmt9fVwiPnt7bG92LnZ9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibElucHV0LmludmFsaWQgJiYgKGxJbnB1dC5kaXJ0eSB8fCBsSW5wdXQudG91Y2hlZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyIGNhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxJbnB1dC5lcnJvcnMucmVxdWlyZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tmbC5mb3JtX2ZpZWxkX3RpdGxlfX0gaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIiAqbmdJZj1cImZsPy5mb3JtX2ZpZWxkX3R5cCA9PSAnbGQnICAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbGRJbnB1dD1cIm5nTW9kZWxcIiBbcmVxdWlyZWRdPVwiZmw/LmlzX2NvbXB1bHNvcnkgPT0gJzEnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IGR5bmFtaWMgb2Ygc3FsQXJyYXlbZmwuZm9ybV9maWVsZF1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJ7e2R5bmFtaWMua319XCI+e3tkeW5hbWljLnZ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImxkSW5wdXQuaW52YWxpZCAmJiAobGRJbnB1dC5kaXJ0eSB8fCBsZElucHV0LnRvdWNoZWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBjYVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJsZElucHV0LmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiICpuZ0lmPVwiZmw/LmZvcm1fZmllbGRfdHlwID09ICdzJyAmJiBmbD8uaXNfaGlkZGVuID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLW1kLTMgY29udHJvbC1sYWJlbFwiPnt7Zmw/LmZvcm1fZmllbGRfdGl0bGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiICpuZ0lmPVwiZmwuaXNfY29tcHVsc29yeSA9PSAxXCI+Kjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgdy0xMDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sIHNlbGVjdFwiIG5hbWU9XCJ7e2ZsPy5mb3JtX2ZpZWxkfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmw/LmRlZmF1bHRfdmFsdWVcIiBbKG5nTW9kZWwpXT1cImZsLmRlZmF1bHRfdmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImNoa0Z1bihmbCxmbC5kZWZhdWx0X3ZhbHVlKVwiIGlkPVwie3tmbC5jb2x1bW5fa2V5fX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2ZpPVwibmdNb2RlbFwiIFtyZXF1aXJlZF09XCJmbD8uaXNfY29tcHVsc29yeSA9PSAnMSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgZHluYW1pYyBvZiBzcWxBcnJheVtmbC5mb3JtX2ZpZWxkXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7ZHluYW1pYy52YWx1ZX19XCI+e3tkeW5hbWljLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZmkuaW52YWxpZCAmJiAoc2ZpLmRpcnR5IHx8IHNmaS50b3VjaGVkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgY2FcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2ZpLmVycm9ycy5yZXF1aXJlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2ZsLmZvcm1fZmllbGRfdGl0bGV9fSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGFwcEFwcE5vRGJsQ2xpY2sgY2xhc3M9XCJidG4gYnRuLXN1Y2Nlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUG9wdXBTdWJtaXQoZnBvcCxwb3BzdWJtaXRCdG4pXCIgI3BvcHN1Ym1pdEJ0bj5BZGQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwicmVzZXRcIiBjbGFzcz1cImJ0biBidG4tZGFuZ2VyXCIgKGNsaWNrKT1cInJlc2V0KGYpXCI+UmVzZXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInBvcFJlc21vZGFsXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbGFiZWxsZWRieT1cImRlZk1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2dcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybS1ob3Jpem9udGFsXCIgbmFtZT1cImFwcEZvcm1yZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2VcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJjbG9zZU51bGwoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1vZGFsLXRpdGxlXCIgaWQ9XCJwb3BNb2RhbEhlYWRcIj4gUmVjb3JkPC9oND5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCAqbmdGb3I9XCJsZXQgcmVzIG9mIFN5c3Jlc3VsdFwiPnt7cmVzfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cInByb2R1Y3RNYXBNYXNNRFwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWxhYmVsbGVkYnk9XCJzbWFsbE1vZGFsSGVhZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgZGF0YS1iYWNrZHJvcD1cInN0YXRpY1wiIGRhdGEta2V5Ym9hcmQ9XCJmYWxzZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtc20gbXdpZHRoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZVwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgKGNsaWNrKT1cImNsb3NlTnVsbCgpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5DbG9zZTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwic21hbGxNb2RhbEhlYWRcIj5Qcm9kdWN0IE1hcHBpbmcgb2YmbmJzcDt7e2F0dE1hcE1vZGVsVGl0bGV9fTwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgdGFibGUtYm9yZGVyZWQgdGFibGUtaG92ZXIgdGFibGUtaG92ZXItY2VsbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgYXR0ckR0bD8ucHJwTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3trZXkucHJpbnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXR0ck1hcHBpbmdEdGxba2V5Py52YWxdXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiPkNsb3NlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zdWNjZXNzXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQcm9kdWN0TWFzdGVyTWFwcGluZygpO1wiICNwcm9kdWN0TWFwY2xzYnRuPlNhdmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgXHJcblxyXG5cclxuICAgIFxyXG5cclxuXHJcbiAgICA8YnV0dG9uIGlkPVwiZGVsZXRlYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RlbGV0ZW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiZGF0YW1kYnRuXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS10b2dnbGU9XCJtb2RhbFwiIGRhdGEtdGFyZ2V0PVwiI2RhdGFtb2RhbFwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImNsc01kXCIgW2hpZGRlbl09XCJ0cnVlXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBkYXRhLXRhcmdldD1cIiNkYXRhbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJwb3BkYXRhbWRidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wZGF0YW1vZGFsXCI+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwicG9wUmVzbW9kYWxidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcG9wUmVzbW9kYWxcIj48L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJwcm9kdWN0TWFwTWFzTURidG5cIiBbaGlkZGVuXT1cInRydWVcIiBkYXRhLXRvZ2dsZT1cIm1vZGFsXCIgZGF0YS10YXJnZXQ9XCIjcHJvZHVjdE1hcE1hc01EXCI+PC9idXR0b24+Il19
|