ezlibrary_v2 0.0.1
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/ezlibrary_v2.mjs +5 -0
- package/esm2020/lib/admin-service/admin-service.service.mjs +36 -0
- package/esm2020/lib/analysis-search/analysis-search.component.mjs +1083 -0
- package/esm2020/lib/assort-service/assort-service.service.mjs +31 -0
- package/esm2020/lib/attribute-definition/attribute-definition.component.mjs +231 -0
- package/esm2020/lib/auth/auth.guard.mjs +40 -0
- package/esm2020/lib/bi-service/bi.service.mjs +58 -0
- package/esm2020/lib/call-info/callinfo.component.mjs +126 -0
- package/esm2020/lib/comman-service/comman-service.service.mjs +679 -0
- package/esm2020/lib/comman-service/share-data-service.service.mjs +23 -0
- package/esm2020/lib/contact-search/contact-search.component.mjs +679 -0
- package/esm2020/lib/contact-service/contact-service.service.mjs +47 -0
- package/esm2020/lib/ezheader/header.component.mjs +383 -0
- package/esm2020/lib/ezlib.module.mjs +220 -0
- package/esm2020/lib/file-upload/fileupload.component.mjs +920 -0
- package/esm2020/lib/file-upload-log/file-upload-log.component.mjs +175 -0
- package/esm2020/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.mjs +14 -0
- package/esm2020/lib/fileupload-module/fileupload-routing.module.mjs +28 -0
- package/esm2020/lib/footer/footer.component.mjs +18 -0
- package/esm2020/lib/globle/common-pdf.service.mjs +28 -0
- package/esm2020/lib/globle/globle-env.service.mjs +45 -0
- package/esm2020/lib/globle/memo-report.service.mjs +2800 -0
- package/esm2020/lib/globle/pdf-service.service.mjs +18848 -0
- package/esm2020/lib/globle/shared-services.service.mjs +27 -0
- package/esm2020/lib/globle/upload-service.service.mjs +69 -0
- package/esm2020/lib/header/header.component.mjs +179 -0
- package/esm2020/lib/invalid/invalid.component.mjs +71 -0
- package/esm2020/lib/logout/logout.component.mjs +107 -0
- package/esm2020/lib/menu-right/menu-right.component.mjs +252 -0
- package/esm2020/lib/pipes/number-with-commas.pipe.mjs +24 -0
- package/esm2020/lib/pipes/order-by-pipe.pipe.mjs +17 -0
- package/esm2020/lib/pipes/selectedCount.mjs +19 -0
- package/esm2020/lib/pipes/sum.pipe.mjs +16 -0
- package/esm2020/lib/pkt-data/pkt-data.component.mjs +1107 -0
- package/esm2020/lib/pricing-service/pricing.service.mjs +58 -0
- package/esm2020/lib/qa-analysis/qa-analysis.component.mjs +1035 -0
- package/esm2020/lib/report-format/report-format.component.mjs +400 -0
- package/esm2020/lib/sessionend/session-end.guard.mjs +28 -0
- package/esm2020/lib/stock-service/lazyload.service.mjs +21 -0
- package/esm2020/lib/stock-service/stock-service.service.mjs +62 -0
- package/esm2020/lib/system-module/subform/subform.component.mjs +2481 -0
- package/esm2020/lib/system-module/system/system.component.mjs +959 -0
- package/esm2020/lib/system-module/system-service/system-service.service.mjs +85 -0
- package/esm2020/lib/system-module/system-service/upload-file.service.mjs +86 -0
- package/esm2020/lib/utility/app-no-dbl-click.directive.mjs +23 -0
- package/esm2020/lib/utility/constants.mjs +5 -0
- package/esm2020/lib/utility/contact-table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/formate-num-field.pipe.mjs +19 -0
- package/esm2020/lib/utility/search-pipe.pipe.mjs +26 -0
- package/esm2020/lib/utility/selective-preloading-strategy.mjs +23 -0
- package/esm2020/lib/utility/table-search.pipe.mjs +25 -0
- package/esm2020/lib/utility/tranform.directive.mjs +27 -0
- package/esm2020/lib/websearch-history/websearch-history.component.mjs +273 -0
- package/esm2020/public_api.mjs +57 -0
- package/ezlibrary_v2.d.ts +5 -0
- package/fesm2015/ezlibrary_v2.mjs +33543 -0
- package/fesm2015/ezlibrary_v2.mjs.map +1 -0
- package/fesm2020/ezlibrary_v2.mjs +33533 -0
- package/fesm2020/ezlibrary_v2.mjs.map +1 -0
- package/lib/admin-service/admin-service.service.d.ts +13 -0
- package/lib/analysis-search/analysis-search.component.d.ts +122 -0
- package/lib/assort-service/assort-service.service.d.ts +12 -0
- package/lib/attribute-definition/attribute-definition.component.d.ts +47 -0
- package/lib/auth/auth.guard.d.ts +16 -0
- package/lib/bi-service/bi.service.d.ts +20 -0
- package/lib/call-info/callinfo.component.d.ts +30 -0
- package/lib/comman-service/comman-service.service.d.ts +111 -0
- package/lib/comman-service/share-data-service.service.d.ts +10 -0
- package/lib/contact-search/contact-search.component.d.ts +115 -0
- package/lib/contact-service/contact-service.service.d.ts +15 -0
- package/lib/ezheader/header.component.d.ts +61 -0
- package/lib/ezlib.module.d.ts +47 -0
- package/lib/file-upload/fileupload.component.d.ts +131 -0
- package/lib/file-upload-log/file-upload-log.component.d.ts +53 -0
- package/lib/fileupload-module/fileupload-dashboard/fileupload-dashboard.component.d.ts +8 -0
- package/lib/fileupload-module/fileupload-routing.module.d.ts +7 -0
- package/lib/footer/footer.component.d.ts +9 -0
- package/lib/globle/common-pdf.service.d.ts +9 -0
- package/lib/globle/globle-env.service.d.ts +16 -0
- package/lib/globle/memo-report.service.d.ts +107 -0
- package/lib/globle/pdf-service.service.d.ts +459 -0
- package/lib/globle/shared-services.service.d.ts +12 -0
- package/lib/globle/upload-service.service.d.ts +20 -0
- package/lib/header/header.component.d.ts +45 -0
- package/lib/invalid/invalid.component.d.ts +12 -0
- package/lib/logout/logout.component.d.ts +21 -0
- package/lib/menu-right/menu-right.component.d.ts +47 -0
- package/lib/pipes/number-with-commas.pipe.d.ts +7 -0
- package/lib/pipes/order-by-pipe.pipe.d.ts +7 -0
- package/lib/pipes/selectedCount.d.ts +7 -0
- package/lib/pipes/sum.pipe.d.ts +7 -0
- package/lib/pkt-data/pkt-data.component.d.ts +189 -0
- package/lib/pricing-service/pricing.service.d.ts +20 -0
- package/lib/qa-analysis/qa-analysis.component.d.ts +99 -0
- package/lib/report-format/report-format.component.d.ts +74 -0
- package/lib/sessionend/session-end.guard.d.ts +10 -0
- package/lib/stock-service/lazyload.service.d.ts +7 -0
- package/lib/stock-service/stock-service.service.d.ts +19 -0
- package/lib/system-module/subform/subform.component.d.ts +227 -0
- package/lib/system-module/system/system.component.d.ts +113 -0
- package/lib/system-module/system-service/system-service.service.d.ts +23 -0
- package/lib/system-module/system-service/upload-file.service.d.ts +12 -0
- package/lib/utility/app-no-dbl-click.directive.d.ts +7 -0
- package/lib/utility/constants.d.ts +4 -0
- package/lib/utility/contact-table-search.pipe.d.ts +7 -0
- package/lib/utility/formate-num-field.pipe.d.ts +7 -0
- package/lib/utility/search-pipe.pipe.d.ts +7 -0
- package/lib/utility/selective-preloading-strategy.d.ts +9 -0
- package/lib/utility/table-search.pipe.d.ts +7 -0
- package/lib/utility/tranform.directive.d.ts +10 -0
- package/lib/websearch-history/websearch-history.component.d.ts +62 -0
- package/package.json +48 -0
- package/public_api.d.ts +52 -0
|
@@ -0,0 +1,679 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { HttpClient } from '@angular/common/http';
|
|
3
|
+
import { GlobleEnvService } from '../globle/globle-env.service';
|
|
4
|
+
import { Cookie } from 'ng2-cookies/ng2-cookies';
|
|
5
|
+
import { Router } from '@angular/router';
|
|
6
|
+
import { NgxSpinnerService } from "ngx-spinner";
|
|
7
|
+
import { ToastrService } from 'ngx-toastr';
|
|
8
|
+
import { HttpHeaders } from '@angular/common/http';
|
|
9
|
+
import { DatePipe } from '@angular/common';
|
|
10
|
+
import { map } from 'rxjs/operators';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/router";
|
|
13
|
+
import * as i2 from "@angular/common/http";
|
|
14
|
+
import * as i3 from "../globle/globle-env.service";
|
|
15
|
+
import * as i4 from "ngx-toastr";
|
|
16
|
+
import * as i5 from "ngx-spinner";
|
|
17
|
+
import * as i6 from "@angular/common";
|
|
18
|
+
export class CommanServiceService {
|
|
19
|
+
constructor(router, http, glbEnv, toastr, spinnerService, datePipe) {
|
|
20
|
+
this.router = router;
|
|
21
|
+
this.http = http;
|
|
22
|
+
this.glbEnv = glbEnv;
|
|
23
|
+
this.toastr = toastr;
|
|
24
|
+
this.spinnerService = spinnerService;
|
|
25
|
+
this.datePipe = datePipe;
|
|
26
|
+
this.cDate = new Date();
|
|
27
|
+
this.a = ['', 'one ', 'two ', 'three ', 'four ', 'five ', 'six ', 'seven ', 'eight ', 'nine ', 'ten ', 'eleven ', 'twelve ', 'thirteen ', 'fourteen ', 'fifteen ', 'sixteen ', 'seventeen ', 'eighteen ', 'nineteen '];
|
|
28
|
+
this.b = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
|
|
29
|
+
this.pageBck = () => window.history.back();
|
|
30
|
+
this.editorConfig = {
|
|
31
|
+
"editable": true,
|
|
32
|
+
"spellcheck": true,
|
|
33
|
+
"height": "110px",
|
|
34
|
+
"minHeight": "110px",
|
|
35
|
+
"width": "auto",
|
|
36
|
+
"minWidth": "0",
|
|
37
|
+
"translate": "yes",
|
|
38
|
+
"enableToolbar": true,
|
|
39
|
+
"showToolbar": true,
|
|
40
|
+
"placeholder": "Enter text here...",
|
|
41
|
+
"imageEndPoint": "",
|
|
42
|
+
"toolbar": [
|
|
43
|
+
["bold", "italic", "underline", "strikeThrough", "superscript", "subscript"],
|
|
44
|
+
["fontName", "fontSize", "color"],
|
|
45
|
+
["justifyLeft", "justifyCenter", "justifyRight", "justifyFull", "indent", "outdent"],
|
|
46
|
+
["cut", "copy", "delete", "removeFormat", "undo", "redo"],
|
|
47
|
+
["paragraph", "blockquote", "removeBlockquote", "horizontalLine", "orderedList", "unorderedList"],
|
|
48
|
+
["link", "unlink", "image", "video"]
|
|
49
|
+
]
|
|
50
|
+
};
|
|
51
|
+
this.config = {
|
|
52
|
+
editable: true,
|
|
53
|
+
spellcheck: true,
|
|
54
|
+
height: '15rem',
|
|
55
|
+
minHeight: '5rem',
|
|
56
|
+
placeholder: 'Enter text here...',
|
|
57
|
+
translate: 'no',
|
|
58
|
+
defaultParagraphSeparator: 'p',
|
|
59
|
+
defaultFontName: 'Arial',
|
|
60
|
+
customClasses: [
|
|
61
|
+
{
|
|
62
|
+
name: "quote",
|
|
63
|
+
class: "quote",
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
name: 'redText',
|
|
67
|
+
class: 'redText'
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
name: "titleText",
|
|
71
|
+
class: "titleText",
|
|
72
|
+
tag: "h1",
|
|
73
|
+
},
|
|
74
|
+
]
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
loadList(reqObj, headers) {
|
|
78
|
+
return this.http.post(this.glbEnv.baseUrl + 'dashbord/module', JSON.stringify(reqObj), headers)
|
|
79
|
+
.toPromise()
|
|
80
|
+
.then((response) => response);
|
|
81
|
+
}
|
|
82
|
+
menuList(reqObj, headers) {
|
|
83
|
+
JSON.stringify(reqObj);
|
|
84
|
+
return this.http.post(this.glbEnv.baseUrl + 'login/loadMenu', JSON.stringify(reqObj), headers)
|
|
85
|
+
.toPromise()
|
|
86
|
+
.then((response) => response);
|
|
87
|
+
}
|
|
88
|
+
loadmenuList(reqObj, headers) {
|
|
89
|
+
JSON.stringify(reqObj);
|
|
90
|
+
return this.http.post(this.glbEnv.baseUrl + 'login/getMenu', JSON.stringify(reqObj), headers)
|
|
91
|
+
.toPromise()
|
|
92
|
+
.then((response) => response);
|
|
93
|
+
}
|
|
94
|
+
logout(reqObj, headers) {
|
|
95
|
+
return this.http.post(this.glbEnv.baseUrl + 'login/authentication', JSON.stringify(reqObj), headers)
|
|
96
|
+
.toPromise()
|
|
97
|
+
.then((response) => response);
|
|
98
|
+
}
|
|
99
|
+
authLogout(reqObj, headers) {
|
|
100
|
+
return this.http.post(this.glbEnv.baseUrl + 'login/authLogout', JSON.stringify(reqObj), headers)
|
|
101
|
+
.toPromise()
|
|
102
|
+
.then((response) => response);
|
|
103
|
+
}
|
|
104
|
+
async getVnmseq(reqObj, headers) {
|
|
105
|
+
console.log("headers", headers);
|
|
106
|
+
return await this.http.post(this.glbEnv.baseUrl + 'accounts/masterdata', JSON.stringify(reqObj), headers)
|
|
107
|
+
.toPromise()
|
|
108
|
+
.then((response) => response);
|
|
109
|
+
}
|
|
110
|
+
CSVConvertor(JSONData, ReportTitle, ShowLabel) {
|
|
111
|
+
let arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
|
|
112
|
+
console.log("arrData", arrData);
|
|
113
|
+
let CSV = '';
|
|
114
|
+
if (ShowLabel) {
|
|
115
|
+
let row = "";
|
|
116
|
+
for (let index in arrData[0]) {
|
|
117
|
+
row += index + ',';
|
|
118
|
+
}
|
|
119
|
+
row = row.slice(0, -1);
|
|
120
|
+
CSV += row + '\r\n';
|
|
121
|
+
}
|
|
122
|
+
for (let i = 0; i < arrData.length; i++) {
|
|
123
|
+
let row = "";
|
|
124
|
+
if (arrData[i] != 'br') {
|
|
125
|
+
for (let index in arrData[i]) {
|
|
126
|
+
row += '"' + arrData[i][index] + '",';
|
|
127
|
+
}
|
|
128
|
+
row.slice(0, row.length - 1);
|
|
129
|
+
}
|
|
130
|
+
CSV += row + '\r\n';
|
|
131
|
+
}
|
|
132
|
+
if (CSV == '') {
|
|
133
|
+
alert("Invalid data");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// console.log("arrData", arrData);
|
|
137
|
+
let fileName = "Report_";
|
|
138
|
+
let cTime = new Date().toISOString().substring(0, 19);
|
|
139
|
+
fileName += ReportTitle.replace(/ /g, "_") + cTime + ".csv";
|
|
140
|
+
var blob = new Blob([CSV], {
|
|
141
|
+
type: "application/csv;charset=utf-8;"
|
|
142
|
+
});
|
|
143
|
+
var link = document.createElement("a");
|
|
144
|
+
var csvUrl = URL.createObjectURL(blob);
|
|
145
|
+
link.href = csvUrl;
|
|
146
|
+
link.download = fileName;
|
|
147
|
+
document.body.appendChild(link);
|
|
148
|
+
link.click();
|
|
149
|
+
document.body.removeChild(link);
|
|
150
|
+
//let uri = 'data:text/csv;charset=utf-8,' + escape(CSV);
|
|
151
|
+
// let link = document.createElement("a");
|
|
152
|
+
//link.href = uri;
|
|
153
|
+
// link.style = "visibility:hidden";
|
|
154
|
+
// link.download = fileName + ".csv";
|
|
155
|
+
// document.body.appendChild(link);
|
|
156
|
+
// link.click();
|
|
157
|
+
// document.body.removeChild(link);
|
|
158
|
+
}
|
|
159
|
+
COmparisionCSVConvertor(Headers, HdrDtl, JSONData, ReportTitle, ShowLabel) {
|
|
160
|
+
let arrData = typeof JSONData != 'object' ? JSON.parse(JSONData) : JSONData;
|
|
161
|
+
let CSV = '';
|
|
162
|
+
if (ShowLabel) {
|
|
163
|
+
let row = "";
|
|
164
|
+
row += 'Sr' + ',';
|
|
165
|
+
row += 'Employee' + ',';
|
|
166
|
+
row += 'Trans Id' + ',';
|
|
167
|
+
row += 'Process Name' + ',';
|
|
168
|
+
row += 'Status' + ',';
|
|
169
|
+
row += 'Packet Code' + ',';
|
|
170
|
+
row += 'Date' + ',';
|
|
171
|
+
Headers.forEach(element => {
|
|
172
|
+
row += HdrDtl[element] + ',';
|
|
173
|
+
});
|
|
174
|
+
row = row.slice(0, -1);
|
|
175
|
+
CSV += row + '\r\n';
|
|
176
|
+
}
|
|
177
|
+
for (let i = 0; i < arrData.length; i++) {
|
|
178
|
+
let row = "";
|
|
179
|
+
row += '"' + arrData[i]['sr'] + '",';
|
|
180
|
+
row += '"' + arrData[i]['employee'] + '",';
|
|
181
|
+
row += '"' + arrData[i]['transaction_qc_idn'] + '",';
|
|
182
|
+
row += '"' + arrData[i]['processNme'] + '",';
|
|
183
|
+
row += '"' + arrData[i]['status'] + '",';
|
|
184
|
+
row += '"' + arrData[i]['pkt_code'] + '",';
|
|
185
|
+
row += '"' + arrData[i]['issue_ts'] + '\n' + arrData[i]['modified_ts'] + '",';
|
|
186
|
+
Headers.forEach(element => {
|
|
187
|
+
let issval = "";
|
|
188
|
+
let rtval = "";
|
|
189
|
+
issval = arrData[i]['issval'][element] == undefined ? '' : arrData[i]['issval'][element];
|
|
190
|
+
rtval = arrData[i]['rtnval'][element] == undefined ? '' : arrData[i]['rtnval'][element];
|
|
191
|
+
row += '"' + issval + '\n' + rtval + '",';
|
|
192
|
+
});
|
|
193
|
+
row.slice(0, row.length - 1);
|
|
194
|
+
CSV += row + '\r\n';
|
|
195
|
+
}
|
|
196
|
+
if (CSV == '') {
|
|
197
|
+
alert("Invalid data");
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
let fileName = "Report_";
|
|
201
|
+
let cTime = new Date().toISOString().substring(0, 19);
|
|
202
|
+
fileName += ReportTitle.replace(/ /g, "_") + cTime + ".csv";
|
|
203
|
+
var blob = new Blob([CSV], {
|
|
204
|
+
type: "application/csv;charset=utf-8;"
|
|
205
|
+
});
|
|
206
|
+
var link = document.createElement("a");
|
|
207
|
+
var csvUrl = URL.createObjectURL(blob);
|
|
208
|
+
link.href = csvUrl;
|
|
209
|
+
link.download = fileName;
|
|
210
|
+
document.body.appendChild(link);
|
|
211
|
+
link.click();
|
|
212
|
+
document.body.removeChild(link);
|
|
213
|
+
}
|
|
214
|
+
//Title, groupSummary, attrDtl, attrDisplayDtl, GrpList, finalGrpVal
|
|
215
|
+
CSVConvertorGrpWise(groupSummary, attrDtl, attrDisplayDtl, GrpList, finalGrpVal, ReportTitle, ShowLabel) {
|
|
216
|
+
let Ovals = Object.values(attrDisplayDtl);
|
|
217
|
+
let arrData = typeof finalGrpVal != 'object' ? JSON.parse(finalGrpVal) : finalGrpVal;
|
|
218
|
+
console.log("arrData", arrData);
|
|
219
|
+
let CSV = '';
|
|
220
|
+
if (ShowLabel) {
|
|
221
|
+
let row = "";
|
|
222
|
+
for (let index in Ovals) {
|
|
223
|
+
row += Ovals[index] + ',';
|
|
224
|
+
}
|
|
225
|
+
row = row.slice(0, -1);
|
|
226
|
+
CSV += row + '\r\n';
|
|
227
|
+
}
|
|
228
|
+
GrpList.forEach(element => {
|
|
229
|
+
let grp = '', qty = '', cts = '', rte = '', amt = '';
|
|
230
|
+
grp = "Group : " + element.grp == undefined ? "" : "Group : " + element.grp;
|
|
231
|
+
qty = groupSummary[element.grp + '_QTY'] == undefined ? "" : "QTY : " + groupSummary[element.grp + '_QTY'];
|
|
232
|
+
cts = groupSummary[element.grp + '_CTS'] == undefined ? "" : "Carats : " + groupSummary[element.grp + '_CTS'];
|
|
233
|
+
rte = groupSummary[element.grp + '_RTE'] == undefined ? "" : "Rate : " + groupSummary[element.grp + '_RTE'];
|
|
234
|
+
amt = groupSummary[element.grp + '_AMT'] == undefined ? "" : "Amount : " + groupSummary[element.grp + '_AMT'];
|
|
235
|
+
let row = "";
|
|
236
|
+
row = grp + " " + qty + " " + cts + " " + rte + " " + amt;
|
|
237
|
+
//row = "Group : " + element.grp +
|
|
238
|
+
// groupSummary[element.grp + '_QTY'] == undefined ? "" : "QTY : " + groupSummary[element.grp + '_QTY'] +
|
|
239
|
+
// groupSummary[element.grp + '_CTS'] == undefined ? "" : "Carats : " + groupSummary[element.grp + '_CTS'] +
|
|
240
|
+
// groupSummary[element.grp + '_RTE'] == undefined ? "" : "Rate : " + groupSummary[element.grp + '_RTE'] +
|
|
241
|
+
// groupSummary[element.grp + '_AMT'] == undefined ? "" : "Amount : " + groupSummary[element.grp + '_AMT'];
|
|
242
|
+
CSV += row + '\r\n';
|
|
243
|
+
finalGrpVal[element.grp].forEach(pktdtl => {
|
|
244
|
+
let r = "";
|
|
245
|
+
attrDtl.forEach(att => {
|
|
246
|
+
r += pktdtl[att] + ',';
|
|
247
|
+
});
|
|
248
|
+
r = r.slice(0, -1);
|
|
249
|
+
CSV += r + '\r\n';
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
if (CSV == '') {
|
|
253
|
+
alert("Invalid data");
|
|
254
|
+
return;
|
|
255
|
+
}
|
|
256
|
+
console.log("arrData", arrData);
|
|
257
|
+
let fileName = "Report_";
|
|
258
|
+
fileName += ReportTitle.replace(/ /g, "_") + ".csv";
|
|
259
|
+
var blob = new Blob([CSV], {
|
|
260
|
+
type: "application/csv;charset=utf-8;"
|
|
261
|
+
});
|
|
262
|
+
var link = document.createElement("a");
|
|
263
|
+
var csvUrl = URL.createObjectURL(blob);
|
|
264
|
+
link.href = csvUrl;
|
|
265
|
+
link.download = fileName;
|
|
266
|
+
document.body.appendChild(link);
|
|
267
|
+
link.click();
|
|
268
|
+
document.body.removeChild(link);
|
|
269
|
+
}
|
|
270
|
+
modifyDataByHeader(searchResultDtl, resultView, resultViewDtl) {
|
|
271
|
+
let obj = {};
|
|
272
|
+
let modifiedObjArr = [];
|
|
273
|
+
for (let i = 0; i < searchResultDtl.length; i++) {
|
|
274
|
+
for (let j = 0; j < resultView.length; j++) {
|
|
275
|
+
let vals = searchResultDtl[i][resultView[j]];
|
|
276
|
+
obj[resultViewDtl[resultView[j]]] = vals;
|
|
277
|
+
}
|
|
278
|
+
modifiedObjArr.push(obj);
|
|
279
|
+
obj = {};
|
|
280
|
+
}
|
|
281
|
+
console.log(modifiedObjArr);
|
|
282
|
+
return modifiedObjArr;
|
|
283
|
+
}
|
|
284
|
+
modifyGrpDataByHeader(searchResultDtl, resultView, resultViewDtl) {
|
|
285
|
+
let obj = {};
|
|
286
|
+
let modifiedObjArr = [];
|
|
287
|
+
for (let grpk in searchResultDtl) {
|
|
288
|
+
searchResultDtl[grpk].forEach(pkts => {
|
|
289
|
+
for (let j = 0; j < resultView.length; j++) {
|
|
290
|
+
let vals = pkts[resultView[j]];
|
|
291
|
+
obj[resultViewDtl[resultView[j]]] = vals;
|
|
292
|
+
}
|
|
293
|
+
modifiedObjArr.push(obj);
|
|
294
|
+
obj = {};
|
|
295
|
+
});
|
|
296
|
+
modifiedObjArr.push("br");
|
|
297
|
+
}
|
|
298
|
+
return modifiedObjArr;
|
|
299
|
+
}
|
|
300
|
+
formatDate(date) {
|
|
301
|
+
let d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
|
|
302
|
+
if (month.length < 2)
|
|
303
|
+
month = '0' + month;
|
|
304
|
+
if (day.length < 2)
|
|
305
|
+
day = '0' + day;
|
|
306
|
+
return [day, month, year].join('-');
|
|
307
|
+
}
|
|
308
|
+
formatDateSC(date) {
|
|
309
|
+
let d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
|
|
310
|
+
if (month.length < 2)
|
|
311
|
+
month = '0' + month;
|
|
312
|
+
if (day.length < 2)
|
|
313
|
+
day = '0' + day;
|
|
314
|
+
return [year, month, day].join('-');
|
|
315
|
+
}
|
|
316
|
+
ddMMYYYY(date) {
|
|
317
|
+
let d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
|
|
318
|
+
if (month.length < 2)
|
|
319
|
+
month = '0' + month;
|
|
320
|
+
if (day.length < 2)
|
|
321
|
+
day = '0' + day;
|
|
322
|
+
return [day, month, year].join('-');
|
|
323
|
+
}
|
|
324
|
+
FormatDate(date, format) {
|
|
325
|
+
let d = this.datePipe.transform(date, format);
|
|
326
|
+
return d;
|
|
327
|
+
}
|
|
328
|
+
ddMMYYYYnum(date) {
|
|
329
|
+
let d = new Date(date), month = '' + (d.getMonth() + 1), day = '' + d.getDate(), year = d.getFullYear();
|
|
330
|
+
debugger;
|
|
331
|
+
if (month.length < 2)
|
|
332
|
+
month = '0' + month;
|
|
333
|
+
if (day.length < 2)
|
|
334
|
+
day = '0' + day;
|
|
335
|
+
return year + month + day;
|
|
336
|
+
}
|
|
337
|
+
formatDateSCMonthBefore(date) {
|
|
338
|
+
if (date != undefined && date != "") {
|
|
339
|
+
let d = new Date(date), month = '' + (d.getMonth()), day = '' + d.getDate(), year = d.getFullYear();
|
|
340
|
+
d.setDate(d.getDate() - 30);
|
|
341
|
+
if (month.length < 2)
|
|
342
|
+
month = '0' + month;
|
|
343
|
+
if (day.length < 2)
|
|
344
|
+
day = '0' + day;
|
|
345
|
+
return [year, month, day].join('-');
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
numberFloat(number) {
|
|
349
|
+
debugger;
|
|
350
|
+
number = number || 0;
|
|
351
|
+
return parseFloat(number);
|
|
352
|
+
}
|
|
353
|
+
dateValidation(date, formate) {
|
|
354
|
+
debugger;
|
|
355
|
+
var dd;
|
|
356
|
+
var mm;
|
|
357
|
+
var yy;
|
|
358
|
+
date = date.replace('-', '/');
|
|
359
|
+
date = date.replace('-', '/');
|
|
360
|
+
var parts = date.split('/');
|
|
361
|
+
if (formate == 'dd/mm/yy') {
|
|
362
|
+
dd = parts[0];
|
|
363
|
+
mm = parts[1];
|
|
364
|
+
yy = parts[2];
|
|
365
|
+
}
|
|
366
|
+
else if (formate == 'mm/dd/yy') {
|
|
367
|
+
mm = parts[0];
|
|
368
|
+
dd = parts[1];
|
|
369
|
+
yy = parts[2];
|
|
370
|
+
}
|
|
371
|
+
else if (formate == 'dd/Mon/yy') {
|
|
372
|
+
dd = parts[0];
|
|
373
|
+
mm = parts[1];
|
|
374
|
+
yy = parts[2];
|
|
375
|
+
let d = new Date(date);
|
|
376
|
+
mm = (d.getMonth()) + 1;
|
|
377
|
+
mm = mm.toString();
|
|
378
|
+
}
|
|
379
|
+
if (mm.length < 2)
|
|
380
|
+
mm = '0' + mm;
|
|
381
|
+
if (dd.length < 2)
|
|
382
|
+
dd = '0' + dd;
|
|
383
|
+
if (yy.length < 4)
|
|
384
|
+
yy = '20' + yy;
|
|
385
|
+
let mmint = parseInt(mm);
|
|
386
|
+
let ddint = parseInt(dd);
|
|
387
|
+
if (ddint > 31)
|
|
388
|
+
return 'invaild';
|
|
389
|
+
else if (mmint > 12)
|
|
390
|
+
return 'invaild';
|
|
391
|
+
else
|
|
392
|
+
return yy + mm + dd;
|
|
393
|
+
}
|
|
394
|
+
splitToTwoDecimal(inputval) {
|
|
395
|
+
if (inputval && inputval != Infinity) {
|
|
396
|
+
return inputval.toString().toString().match(/^-?\d+(?:\.\d{0,2})?/)[0];
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
splitToThreeDecimal(inputval) {
|
|
400
|
+
if (inputval && inputval != Infinity) {
|
|
401
|
+
return inputval.toString().toString().match(/^-?\d+(?:\.\d{0,3})?/)[0];
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
roundval(inputval) {
|
|
405
|
+
if (inputval) {
|
|
406
|
+
return Math.round(inputval);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
roundUp(num, precision) {
|
|
410
|
+
precision = Math.pow(10, precision);
|
|
411
|
+
return Math.ceil(num * precision) / precision;
|
|
412
|
+
}
|
|
413
|
+
getSignedUrl(s3details, doc_nme, bucket) {
|
|
414
|
+
debugger;
|
|
415
|
+
let urlParams = {
|
|
416
|
+
Bucket: s3details["docbucket"],
|
|
417
|
+
Key: s3details["docfolder"] + "/" + doc_nme
|
|
418
|
+
};
|
|
419
|
+
bucket.getSignedUrl("getObject", urlParams, function (err, url) {
|
|
420
|
+
return url;
|
|
421
|
+
});
|
|
422
|
+
}
|
|
423
|
+
numbertofixed(inputval, decimal) {
|
|
424
|
+
if (inputval) {
|
|
425
|
+
inputval = inputval.toFixed(decimal);
|
|
426
|
+
return inputval;
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
return inputval;
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
truncate(number, index = 2) {
|
|
433
|
+
// cutting the number
|
|
434
|
+
return +number.toString().slice(0, (number.toString().indexOf(".")) + (index + 1));
|
|
435
|
+
}
|
|
436
|
+
floorFigure(figure, decimals) {
|
|
437
|
+
let a;
|
|
438
|
+
if (figure != null && figure != undefined) {
|
|
439
|
+
if (decimals == -1)
|
|
440
|
+
return Math.floor(figure);
|
|
441
|
+
if (decimals == 0)
|
|
442
|
+
return Math.trunc(figure);
|
|
443
|
+
if (!decimals)
|
|
444
|
+
decimals = 2;
|
|
445
|
+
let d = Math.pow(10, decimals);
|
|
446
|
+
var str = figure.toString();
|
|
447
|
+
a = parseFloat(str);
|
|
448
|
+
decimals = parseInt(decimals);
|
|
449
|
+
if (str.indexOf(".") != -1) {
|
|
450
|
+
var fctr;
|
|
451
|
+
debugger;
|
|
452
|
+
if (((figure.toString().split(".")[1]).length) == 2) {
|
|
453
|
+
fctr = figure.toString().split(".")[1];
|
|
454
|
+
}
|
|
455
|
+
if (((figure.toString().split(".")[1]).length) == 1) {
|
|
456
|
+
fctr = figure.toString().split(".")[1].concat("0");
|
|
457
|
+
}
|
|
458
|
+
if (((figure.toString().split(".")[1]).length) > 2) {
|
|
459
|
+
fctr = figure.toString().split(".")[1].substring(0, decimals);
|
|
460
|
+
}
|
|
461
|
+
a = Math.trunc(figure) + "." + fctr;
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
a = figure;
|
|
466
|
+
}
|
|
467
|
+
return a;
|
|
468
|
+
}
|
|
469
|
+
scrollToDiv(el) {
|
|
470
|
+
let x = document.getElementById(el);
|
|
471
|
+
return x.scrollIntoView();
|
|
472
|
+
}
|
|
473
|
+
getIp() {
|
|
474
|
+
return this.http.get("http://ipinfo.io/json/")
|
|
475
|
+
.pipe(map((res) => res));
|
|
476
|
+
}
|
|
477
|
+
getBrowserInfo() {
|
|
478
|
+
let nVer = navigator.appVersion;
|
|
479
|
+
let nAgt = navigator.userAgent;
|
|
480
|
+
let browserName = navigator.appName;
|
|
481
|
+
let fullVersion = '' + parseFloat(navigator.appVersion);
|
|
482
|
+
let majorVersion = parseInt(navigator.appVersion, 10);
|
|
483
|
+
let nameOffset, verOffset, ix;
|
|
484
|
+
// In Opera 15+, the true version is after "OPR/"
|
|
485
|
+
if ((verOffset = nAgt.indexOf("OPR/")) != -1) {
|
|
486
|
+
browserName = "Opera";
|
|
487
|
+
fullVersion = nAgt.substring(verOffset + 4);
|
|
488
|
+
}
|
|
489
|
+
// In older Opera, the true version is after "Opera" or after "Version"
|
|
490
|
+
else if ((verOffset = nAgt.indexOf("Opera")) != -1) {
|
|
491
|
+
browserName = "Opera";
|
|
492
|
+
fullVersion = nAgt.substring(verOffset + 6);
|
|
493
|
+
if ((verOffset = nAgt.indexOf("Version")) != -1)
|
|
494
|
+
fullVersion = nAgt.substring(verOffset + 8);
|
|
495
|
+
}
|
|
496
|
+
// In MSIE, the true version is after "MSIE" in userAgent
|
|
497
|
+
else if ((verOffset = nAgt.indexOf("MSIE")) != -1) {
|
|
498
|
+
browserName = "Microsoft Internet Explorer";
|
|
499
|
+
fullVersion = nAgt.substring(verOffset + 5);
|
|
500
|
+
}
|
|
501
|
+
// In Chrome, the true version is after "Chrome"
|
|
502
|
+
else if ((verOffset = nAgt.indexOf("Chrome")) != -1) {
|
|
503
|
+
browserName = "Chrome";
|
|
504
|
+
fullVersion = nAgt.substring(verOffset + 7);
|
|
505
|
+
}
|
|
506
|
+
// In Safari, the true version is after "Safari" or after "Version"
|
|
507
|
+
else if ((verOffset = nAgt.indexOf("Safari")) != -1) {
|
|
508
|
+
browserName = "Safari";
|
|
509
|
+
fullVersion = nAgt.substring(verOffset + 7);
|
|
510
|
+
if ((verOffset = nAgt.indexOf("Version")) != -1)
|
|
511
|
+
fullVersion = nAgt.substring(verOffset + 8);
|
|
512
|
+
}
|
|
513
|
+
// In Firefox, the true version is after "Firefox"
|
|
514
|
+
else if ((verOffset = nAgt.indexOf("Firefox")) != -1) {
|
|
515
|
+
browserName = "Firefox";
|
|
516
|
+
fullVersion = nAgt.substring(verOffset + 8);
|
|
517
|
+
}
|
|
518
|
+
// In most other browsers, "name/version" is at the end of userAgent
|
|
519
|
+
else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) <
|
|
520
|
+
(verOffset = nAgt.lastIndexOf('/'))) {
|
|
521
|
+
browserName = nAgt.substring(nameOffset, verOffset);
|
|
522
|
+
fullVersion = nAgt.substring(verOffset + 1);
|
|
523
|
+
if (browserName.toLowerCase() == browserName.toUpperCase()) {
|
|
524
|
+
browserName = navigator.appName;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
// trim the fullVersion string at semicolon/space if present
|
|
528
|
+
if ((ix = fullVersion.indexOf(";")) != -1)
|
|
529
|
+
fullVersion = fullVersion.substring(0, ix);
|
|
530
|
+
if ((ix = fullVersion.indexOf(" ")) != -1)
|
|
531
|
+
fullVersion = fullVersion.substring(0, ix);
|
|
532
|
+
majorVersion = parseInt('' + fullVersion, 10);
|
|
533
|
+
if (isNaN(majorVersion)) {
|
|
534
|
+
fullVersion = '' + parseFloat(navigator.appVersion);
|
|
535
|
+
majorVersion = parseInt(navigator.appVersion, 10);
|
|
536
|
+
}
|
|
537
|
+
let Obj = {
|
|
538
|
+
'browserName': browserName,
|
|
539
|
+
'version': fullVersion,
|
|
540
|
+
'majorVersion': majorVersion,
|
|
541
|
+
'appName': navigator.appName,
|
|
542
|
+
'userAgent': navigator.userAgent
|
|
543
|
+
};
|
|
544
|
+
return Obj;
|
|
545
|
+
}
|
|
546
|
+
formateStr(str) {
|
|
547
|
+
str = str.trim();
|
|
548
|
+
str = str.replace(/[ ,]+/g, ",");
|
|
549
|
+
str = str.replace(/\n/g, ",");
|
|
550
|
+
return str;
|
|
551
|
+
}
|
|
552
|
+
startRFIDScan(deviceId, formNme) {
|
|
553
|
+
let mdlk = JSON.parse(localStorage.getItem('mdlKey'));
|
|
554
|
+
let cUrl = this.router.url;
|
|
555
|
+
this.header = {
|
|
556
|
+
'clientkey': Cookie.get('_ck'),
|
|
557
|
+
'Content-Type': 'application/json',
|
|
558
|
+
'modulekey': mdlk[cUrl.split('/')[1]],
|
|
559
|
+
'loginid': Cookie.get('_logid'),
|
|
560
|
+
'method': 'startBarCodeReading',
|
|
561
|
+
'source': 'qs'
|
|
562
|
+
};
|
|
563
|
+
let reqObj = {};
|
|
564
|
+
reqObj['formNme'] = formNme;
|
|
565
|
+
reqObj['deviceId'] = deviceId;
|
|
566
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
567
|
+
this.load(reqObj, options, 'marketing/barCodeReader').then((response) => {
|
|
568
|
+
if (response.status == 'SUCCESS') {
|
|
569
|
+
this.toastr.success('Scan Started...');
|
|
570
|
+
return response.scan_idn;
|
|
571
|
+
}
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
StopRFIDScan(scan_idn, formNme) {
|
|
575
|
+
let mdlk = JSON.parse(localStorage.getItem('mdlKey'));
|
|
576
|
+
let cUrl = this.router.url;
|
|
577
|
+
this.header = {
|
|
578
|
+
'clientkey': Cookie.get('_ck'),
|
|
579
|
+
'Content-Type': 'application/json',
|
|
580
|
+
'modulekey': mdlk[cUrl.split('/')[1]],
|
|
581
|
+
'loginid': Cookie.get('_logid'),
|
|
582
|
+
'method': 'stopBarCodeReading',
|
|
583
|
+
'source': 'qs'
|
|
584
|
+
};
|
|
585
|
+
let reqObj = {};
|
|
586
|
+
reqObj['formNme'] = formNme;
|
|
587
|
+
reqObj['scanId'] = scan_idn;
|
|
588
|
+
let options = ({ headers: new HttpHeaders(this.header) });
|
|
589
|
+
this.load(reqObj, options, 'marketing/barCodeReader').then((response) => {
|
|
590
|
+
if (response.status == 'SUCCESS') {
|
|
591
|
+
this.toastr.success('Scan Stopped...');
|
|
592
|
+
return response.scan_idn;
|
|
593
|
+
}
|
|
594
|
+
});
|
|
595
|
+
}
|
|
596
|
+
load(reqObj, headers, url) {
|
|
597
|
+
console.log(headers);
|
|
598
|
+
return this.http.post(this.glbEnv.baseUrl + url, JSON.stringify(reqObj), headers)
|
|
599
|
+
.toPromise()
|
|
600
|
+
.then((response) => response).catch(err => {
|
|
601
|
+
debugger;
|
|
602
|
+
this.spinnerService.hide();
|
|
603
|
+
this.toastr.error(err.message);
|
|
604
|
+
});
|
|
605
|
+
}
|
|
606
|
+
loadiFile(reqObj, header, url) {
|
|
607
|
+
let options = ({ headers: new HttpHeaders(header) });
|
|
608
|
+
return this.http.post(this.glbEnv.baseUrl + url, JSON.stringify(reqObj), options)
|
|
609
|
+
.toPromise()
|
|
610
|
+
.then((response) => response).catch(err => {
|
|
611
|
+
this.spinnerService.hide();
|
|
612
|
+
this.toastr.error(err.message);
|
|
613
|
+
});
|
|
614
|
+
}
|
|
615
|
+
numberWithCommas(x) {
|
|
616
|
+
var parts = x.toString().split(".");
|
|
617
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
618
|
+
return parts.join(".");
|
|
619
|
+
}
|
|
620
|
+
// new function for indian and english format commas
|
|
621
|
+
numberWithCommasFormat(num) {
|
|
622
|
+
if (localStorage.getItem('commaFormat') == 'eng') {
|
|
623
|
+
var parts = num.toString().split(".");
|
|
624
|
+
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
|
|
625
|
+
return parts.join(".");
|
|
626
|
+
}
|
|
627
|
+
else {
|
|
628
|
+
var parts = num.toString().split(".");
|
|
629
|
+
let x = parts[0];
|
|
630
|
+
x = x.replaceAll(',', ''); //removing pre existing commas if any
|
|
631
|
+
var lastThree = x.substring(x.length - 3);
|
|
632
|
+
var otherNumbers = x.substring(0, x.length - 3);
|
|
633
|
+
if (otherNumbers != '')
|
|
634
|
+
lastThree = ',' + lastThree;
|
|
635
|
+
var res = otherNumbers.replace(/\B(?=(\d{2})+(?!\d))/g, ",") + lastThree;
|
|
636
|
+
parts[0] = res;
|
|
637
|
+
return parts.join(".");
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
inWordsINR(num) {
|
|
641
|
+
if ((num = num.toString()).length > 9)
|
|
642
|
+
return 'overflow';
|
|
643
|
+
let n = [];
|
|
644
|
+
n = ('000000000' + num).substr(-9).match(/^(\d{2})(\d{2})(\d{2})(\d{1})(\d{2})$/);
|
|
645
|
+
if (!n)
|
|
646
|
+
return;
|
|
647
|
+
var str = '';
|
|
648
|
+
str += (n[1] != 0) ? (this.a[Number(n[1])] || this.b[n[1][0]] + ' ' + this.a[n[1][1]]) + 'crore ' : '';
|
|
649
|
+
str += (n[2] != 0) ? (this.a[Number(n[2])] || this.b[n[2][0]] + ' ' + this.a[n[2][1]]) + 'lakh ' : '';
|
|
650
|
+
str += (n[3] != 0) ? (this.a[Number(n[3])] || this.b[n[3][0]] + ' ' + this.a[n[3][1]]) + 'thousand ' : '';
|
|
651
|
+
str += (n[4] != 0) ? (this.a[Number(n[4])] || this.b[n[4][0]] + ' ' + this.a[n[4][1]]) + 'hundred ' : '';
|
|
652
|
+
str += (n[5] != 0) ? ((str != '') ? 'and ' : '') + (this.a[Number(n[5])] || this.b[n[5][0]] + ' ' + this.a[n[5][1]]) + 'only ' : '';
|
|
653
|
+
console.log(str);
|
|
654
|
+
return str;
|
|
655
|
+
}
|
|
656
|
+
randomnumber() {
|
|
657
|
+
let num = Math.floor((Math.random() * 10000) + 100);
|
|
658
|
+
return num;
|
|
659
|
+
}
|
|
660
|
+
removeEmpty(obj) {
|
|
661
|
+
return Object.keys(obj)
|
|
662
|
+
.filter(function (k) {
|
|
663
|
+
return obj[k] || '' != '';
|
|
664
|
+
})
|
|
665
|
+
.reduce(function (acc, k) {
|
|
666
|
+
acc[k] = obj[k];
|
|
667
|
+
return acc;
|
|
668
|
+
}, {});
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/** @nocollapse */ /** @nocollapse */ CommanServiceService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CommanServiceService, deps: [{ token: i1.Router }, { token: i2.HttpClient }, { token: i3.GlobleEnvService }, { token: i4.ToastrService }, { token: i5.NgxSpinnerService }, { token: i6.DatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
672
|
+
/** @nocollapse */ /** @nocollapse */ CommanServiceService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CommanServiceService, providedIn: 'root' });
|
|
673
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: CommanServiceService, decorators: [{
|
|
674
|
+
type: Injectable,
|
|
675
|
+
args: [{
|
|
676
|
+
providedIn: 'root'
|
|
677
|
+
}]
|
|
678
|
+
}], ctorParameters: function () { return [{ type: i1.Router }, { type: i2.HttpClient }, { type: i3.GlobleEnvService }, { type: i4.ToastrService }, { type: i5.NgxSpinnerService }, { type: i6.DatePipe }]; } });
|
|
679
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuLXNlcnZpY2Uuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2V6bGliL3NyYy9saWIvY29tbWFuLXNlcnZpY2UvY29tbWFuLXNlcnZpY2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMzQyxPQUFPLEVBQUUsV0FBVyxFQUFHLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRckMsTUFBTSxPQUFPLG9CQUFvQjtJQU8vQixZQUNTLE1BQWMsRUFDYixJQUFnQixFQUNqQixNQUF3QixFQUN2QixNQUFxQixFQUNyQixjQUFpQyxFQUNqQyxRQUFpQjtRQUxsQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2IsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNqQixXQUFNLEdBQU4sTUFBTSxDQUFrQjtRQUN2QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxhQUFRLEdBQVIsUUFBUSxDQUFTO1FBWGxCLFVBQUssR0FBRyxJQUFJLElBQUksRUFB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QUMsQ0FBQztZQUN2QixHQUFHLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQztTQUNyQjtRQUlELE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLEVBQUUsR0FBRyxHQUFHLEVBQUUsRUFBRSxHQUFHLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDckQsR0FBRyxHQUFHLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUM1RSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUMzRyxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM5RyxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUM1RyxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxZQUFZ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Q0FBQyxHQUFHO1FBQ1osSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU8sVUFBVSxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNYLENBQUMsR0FBRyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsdUNBQXVDLENBQUMsQ0FBQztRQUNsRixJQUFJLENBQUMsQ0FBQztZQUFFLE9BQU87UUFBQyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDN0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3ZHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3BJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBR0QsWUFBWTtRQUNWLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBWUEsV0FBVyxDQUFDLEdBQUc7UUFDZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ3BCLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDakIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUM7YUFDRCxNQUFNLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN0QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQzs7dUpBM3RCVSxvQkFBb0I7MkpBQXBCLG9CQUFvQixjQUhuQixNQUFNOzJGQUdQLG9CQUFvQjtrQkFKaEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBHbG9ibGVFbnZTZXJ2aWNlIH0gZnJvbSAnLi4vZ2xvYmxlL2dsb2JsZS1lbnYuc2VydmljZSc7XHJcbmltcG9ydCB7IENvb2tpZSB9IGZyb20gJ25nMi1jb29raWVzL25nMi1jb29raWVzJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyAgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbWFuU2VydmljZVNlcnZpY2Uge1xyXG5cclxuICByZWFkb25seSBjRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgaGVhZGVyO1xyXG4gIGEgPSBbJycsICdvbmUgJywgJ3R3byAnLCAndGhyZWUgJywgJ2ZvdXIgJywgJ2ZpdmUgJywgJ3NpeCAnLCAnc2V2ZW4gJywgJ2VpZ2h0ICcsICduaW5lICcsICd0ZW4gJywgJ2VsZXZlbiAnLCAndHdlbHZlICcsICd0aGlydGVlbiAnLCAnZm91cnRlZW4gJywgJ2ZpZnRlZW4gJywgJ3NpeHRlZW4gJywgJ3NldmVudGVlbiAnLCAnZWlnaHRlZW4gJywgJ25pbmV0ZWVuICddO1xyXG4gIGIgPSBbJycsICcnLCAndHdlbnR5JywgJ3RoaXJ0eScsICdmb3J0eScsICdmaWZ0eScsICdzaXh0eScsICdzZXZlbnR5JywgJ2VpZ2h0eScsICduaW5ldHknXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwdWJsaWMgZ2xiRW52OiBHbG9ibGVFbnZTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNwaW5uZXJTZXJ2aWNlOiBOZ3hTcGlubmVyU2VydmljZSAsXHJcbiAgICBwcml2YXRlIGRhdGVQaXBlOkRhdGVQaXBlXHJcbiAgKSB7IH1cclxuXHJcbiAgbG9hZExpc3QocmVxT2JqLCBoZWFkZXJzKSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5nbGJFbnYuYmFzZVVybCArICdkYXNoYm9yZC9tb2R1bGUnLCBKU09OLnN0cmluZ2lmeShyZXFPYmopLCBoZWFkZXJzKVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZSk7XHJcbiAgfVxyXG5cclxuICBtZW51TGlzdChyZXFPYmosIGhlYWRlcnMpIHtcclxuICAgIEpTT04uc3RyaW5naWZ5KHJlcU9iaik7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5nbGJFbnYuYmFzZVVybCArICdsb2dpbi9sb2FkTWVudScsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIGhlYWRlcnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIGxvYWRtZW51TGlzdChyZXFPYmosIGhlYWRlcnMpIHtcclxuICAgIEpTT04uc3RyaW5naWZ5KHJlcU9iaik7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5nbGJFbnYuYmFzZVVybCArICdsb2dpbi9nZXRNZW51JywgSlNPTi5zdHJpbmdpZnkocmVxT2JqKSwgaGVhZGVycylcclxuICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UpO1xyXG4gIH1cclxuXHJcbiAgbG9nb3V0KHJlcU9iaiwgaGVhZGVycykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyAnbG9naW4vYXV0aGVudGljYXRpb24nLCBKU09OLnN0cmluZ2lmeShyZXFPYmopLCBoZWFkZXJzKVxyXG4gICAgICAudG9Qcm9taXNlKClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZSk7XHJcbiAgfVxyXG5cclxuICBhdXRoTG9nb3V0KHJlcU9iaiwgaGVhZGVycykge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyAnbG9naW4vYXV0aExvZ291dCcsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIGhlYWRlcnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIFxyXG4gIGFzeW5jIGdldFZubXNlcShyZXFPYmosIGhlYWRlcnMpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiaGVhZGVyc1wiLGhlYWRlcnMpO1xyXG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyAnYWNjb3VudHMvbWFzdGVyZGF0YScsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIGhlYWRlcnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIENTVkNvbnZlcnRvcihKU09ORGF0YSwgUmVwb3J0VGl0bGUsIFNob3dMYWJlbCkge1xyXG4gICAgbGV0IGFyckRhdGEgPSB0eXBlb2YgSlNPTkRhdGEgIT0gJ29iamVjdCcgPyBKU09OLnBhcnNlKEpTT05EYXRhKSA6IEpTT05EYXRhO1xyXG4gICAgY29uc29sZS5sb2coXCJhcnJEYXRhXCIsIGFyckRhdGEpO1xyXG5cclxuICAgIGxldCBDU1YgPSAnJztcclxuICAgIGlmIChTaG93TGFiZWwpIHtcclxuICAgICAgbGV0IHJvdyA9IFwiXCI7XHJcbiAgICAgIGZvciAobGV0IGluZGV4IGluIGFyckRhdGFbMF0pIHtcclxuICAgICAgICByb3cgKz0gaW5kZXggKyAnLCc7XHJcbiAgICAgIH1cclxuICAgICAgcm93ID0gcm93LnNsaWNlKDAsIC0xKTtcclxuICAgICAgQ1NWICs9IHJvdyArICdcXHJcXG4nO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCByb3cgPSBcIlwiO1xyXG4gICAgICBpZiAoYXJyRGF0YVtpXSAhPSAnYnInKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggaW4gYXJyRGF0YVtpXSkge1xyXG4gICAgICAgICAgcm93ICs9ICdcIicgKyBhcnJEYXRhW2ldW2luZGV4XSArICdcIiwnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3cuc2xpY2UoMCwgcm93Lmxlbmd0aCAtIDEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBDU1YgKz0gcm93ICsgJ1xcclxcbic7XHJcbiAgICB9XHJcbiAgICBpZiAoQ1NWID09ICcnKSB7XHJcbiAgICAgIGFsZXJ0KFwiSW52YWxpZCBkYXRhXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImFyckRhdGFcIiwgYXJyRGF0YSk7XHJcbiAgICBsZXQgZmlsZU5hbWUgPSBcIlJlcG9ydF9cIjtcclxuICAgIGxldCBjVGltZSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTkpO1xyXG4gICAgZmlsZU5hbWUgKz0gUmVwb3J0VGl0bGUucmVwbGFjZSgvIC9nLCBcIl9cIikgKyBjVGltZSArIFwiLmNzdlwiO1xyXG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbQ1NWXSwge1xyXG4gICAgICB0eXBlOiBcImFwcGxpY2F0aW9uL2NzdjtjaGFyc2V0PXV0Zi04O1wiXHJcbiAgICB9KTtcclxuXHJcbiAgICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgdmFyIGNzdlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICBsaW5rLmhyZWYgPSBjc3ZVcmw7XHJcbiAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWU7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xyXG4gICAgbGluay5jbGljaygpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKTtcclxuICAgIC8vbGV0IHVyaSA9ICdkYXRhOnRleHQvY3N2O2NoYXJzZXQ9dXRmLTgsJyArIGVzY2FwZShDU1YpO1xyXG4gICAgLy8gbGV0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIC8vbGluay5ocmVmID0gdXJpO1xyXG4gICAgLy8gbGluay5zdHlsZSA9IFwidmlzaWJpbGl0eTpoaWRkZW5cIjtcclxuICAgIC8vIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZSArIFwiLmNzdlwiO1xyXG4gICAgLy8gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICAvLyBsaW5rLmNsaWNrKCk7XHJcbiAgICAvLyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG4gIH1cclxuXHJcbiAgQ09tcGFyaXNpb25DU1ZDb252ZXJ0b3IoSGVhZGVycywgSGRyRHRsLCBKU09ORGF0YSwgUmVwb3J0VGl0bGUsIFNob3dMYWJlbCkge1xyXG4gICAgbGV0IGFyckRhdGEgPSB0eXBlb2YgSlNPTkRhdGEgIT0gJ29iamVjdCcgPyBKU09OLnBhcnNlKEpTT05EYXRhKSA6IEpTT05EYXRhO1xyXG4gICAgbGV0IENTViA9ICcnO1xyXG4gICAgaWYgKFNob3dMYWJlbCkge1xyXG4gICAgICBsZXQgcm93ID0gXCJcIjtcclxuICAgICAgcm93ICs9ICdTcicgKyAnLCc7XHJcbiAgICAgIHJvdyArPSAnRW1wbG95ZWUnICsgJywnO1xyXG4gICAgICByb3cgKz0gJ1RyYW5zIElkJyArICcsJztcclxuICAgICAgcm93ICs9ICdQcm9jZXNzIE5hbWUnICsgJywnO1xyXG4gICAgICByb3cgKz0gJ1N0YXR1cycgKyAnLCc7XHJcbiAgICAgIHJvdyArPSAnUGFja2V0IENvZGUnICsgJywnO1xyXG4gICAgICByb3cgKz0gJ0RhdGUnICsgJywnO1xyXG5cclxuICAgICAgSGVhZGVycy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgIHJvdyArPSBIZHJEdGxbZWxlbWVudF0gKyAnLCc7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcm93ID0gcm93LnNsaWNlKDAsIC0xKTtcclxuICAgICAgQ1NWICs9IHJvdyArICdcXHJcXG4nO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJEYXRhLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCByb3cgPSBcIlwiO1xyXG5cclxuICAgICAgcm93ICs9ICdcIicgKyBhcnJEYXRhW2ldWydzciddICsgJ1wiLCc7XHJcbiAgICAgIHJvdyArPSAnXCInICsgYXJyRGF0YVtpXVsnZW1wbG95ZWUnXSArICdcIiwnO1xyXG4gICAgICByb3cgKz0gJ1wiJyArIGFyckRhdGFbaV1bJ3RyYW5zYWN0aW9uX3FjX2lkbiddICsgJ1wiLCc7XHJcbiAgICAgIHJvdyArPSAnXCInICsgYXJyRGF0YVtpXVsncHJvY2Vzc05tZSddICsgJ1wiLCc7XHJcbiAgICAgIHJvdyArPSAnXCInICsgYXJyRGF0YVtpXVsnc3RhdHVzJ10gKyAnXCIsJztcclxuICAgICAgcm93ICs9ICdcIicgKyBhcnJEYXRhW2ldWydwa3RfY29kZSddICsgJ1wiLCc7XHJcblxyXG4gICAgICByb3cgKz0gJ1wiJyArIGFyckRhdGFbaV1bJ2lzc3VlX3RzJ10gKyAnXFxuJyArIGFyckRhdGFbaV1bJ21vZGlmaWVkX3RzJ10gKyAnXCIsJztcclxuXHJcbiAgICAgIEhlYWRlcnMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBsZXQgaXNzdmFsID0gXCJcIjtcclxuICAgICAgICBsZXQgcnR2YWwgPSBcIlwiO1xyXG4gICAgICAgIGlzc3ZhbCA9IGFyckRhdGFbaV1bJ2lzc3ZhbCddW2VsZW1lbnRdID09IHVuZGVmaW5lZCA/ICcnIDogYXJyRGF0YVtpXVsnaXNzdmFsJ11bZWxlbWVudF07XHJcbiAgICAgICAgcnR2YWwgPSBhcnJEYXRhW2ldWydydG52YWwnXVtlbGVtZW50XSA9PSB1bmRlZmluZWQgPyAnJyA6IGFyckRhdGFbaV1bJ3J0bnZhbCddW2VsZW1lbnRdO1xyXG4gICAgICAgIHJvdyArPSAnXCInICsgaXNzdmFsICsgJ1xcbicgKyBydHZhbCArICdcIiwnO1xyXG4gICAgICB9KTtcclxuICAgIFxyXG4gICAgICByb3cuc2xpY2UoMCwgcm93Lmxlbmd0aCAtIDEpO1xyXG5cclxuICAgICAgQ1NWICs9IHJvdyArICdcXHJcXG4nO1xyXG4gICAgfVxyXG4gICAgaWYgKENTViA9PSAnJykge1xyXG4gICAgICBhbGVydChcIkludmFsaWQgZGF0YVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVOYW1lID0gXCJSZXBvcnRfXCI7XHJcbiAgICBsZXQgY1RpbWUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDE5KTtcclxuICAgIGZpbGVOYW1lICs9IFJlcG9ydFRpdGxlLnJlcGxhY2UoLyAvZywgXCJfXCIpICsgY1RpbWUgKyBcIi5jc3ZcIjtcclxuICAgIHZhciBibG9iID0gbmV3IEJsb2IoW0NTVl0sIHtcclxuICAgICAgdHlwZTogXCJhcHBsaWNhdGlvbi9jc3Y7Y2hhcnNldD11dGYtODtcIlxyXG4gICAgfSk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgIHZhciBjc3ZVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgbGluay5ocmVmID0gY3N2VXJsO1xyXG4gICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcclxuICAgIGxpbmsuY2xpY2soKTtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluayk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9UaXRsZSwgZ3JvdXBTdW1tYXJ5LCBhdHRyRHRsLCBhdHRyRGlzcGxheUR0bCwgR3JwTGlzdCwgZmluYWxHcnBWYWxcclxuICBDU1ZDb252ZXJ0b3JHcnBXaXNlKGdyb3VwU3VtbWFyeSwgYXR0ckR0bCwgYXR0ckRpc3BsYXlEdGwsIEdycExpc3QsIGZpbmFsR3JwVmFsLCBSZXBvcnRUaXRsZSwgU2hvd0xhYmVsKSB7XHJcblxyXG4gICAgbGV0IE92YWxzID0gT2JqZWN0LnZhbHVlcyhhdHRyRGlzcGxheUR0bCk7XHJcblxyXG4gICAgbGV0IGFyckRhdGEgPSB0eXBlb2YgZmluYWxHcnBWYWwgIT0gJ29iamVjdCcgPyBKU09OLnBhcnNlKGZpbmFsR3JwVmFsKSA6IGZpbmFsR3JwVmFsO1xyXG4gICAgY29uc29sZS5sb2coXCJhcnJEYXRhXCIsIGFyckRhdGEpO1xyXG5cclxuXHJcbiAgICBsZXQgQ1NWID0gJyc7XHJcbiAgICBpZiAoU2hvd0xhYmVsKSB7XHJcbiAgICAgIGxldCByb3cgPSBcIlwiO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCBpbiBPdmFscykge1xyXG4gICAgICAgIHJvdyArPSBPdmFsc1tpbmRleF0gKyAnLCc7XHJcbiAgICAgIH1cclxuICAgICAgcm93ID0gcm93LnNsaWNlKDAsIC0xKTtcclxuICAgICAgQ1NWICs9IHJvdyArICdcXHJcXG4nO1xyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgR3JwTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICBsZXQgZ3JwID0gJycsIHF0eSA9ICcnLCBjdHMgPSAnJywgcnRlID0gJycsIGFtdCA9ICcnO1xyXG4gICAgICBncnAgPSBcIkdyb3VwIDogXCIgKyBlbGVtZW50LmdycCA9PSB1bmRlZmluZWQgPyBcIlwiIDogXCJHcm91cCA6IFwiICsgZWxlbWVudC5ncnA7XHJcbiAgICAgIHF0eSA9IGdyb3VwU3VtbWFyeVtlbGVtZW50LmdycCArICdfUVRZJ10gPT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiUVRZIDogXCIgKyBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX1FUWSddO1xyXG4gICAgICBjdHMgPSBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX0NUUyddID09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIkNhcmF0cyA6IFwiICsgZ3JvdXBTdW1tYXJ5W2VsZW1lbnQuZ3JwICsgJ19DVFMnXTtcclxuICAgICAgcnRlID0gZ3JvdXBTdW1tYXJ5W2VsZW1lbnQuZ3JwICsgJ19SVEUnXSA9PSB1bmRlZmluZWQgPyBcIlwiIDogXCJSYXRlIDogXCIgKyBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX1JURSddO1xyXG4gICAgICBhbXQgPSBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX0FNVCddID09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIkFtb3VudCA6IFwiICsgZ3JvdXBTdW1tYXJ5W2VsZW1lbnQuZ3JwICsgJ19BTVQnXTtcclxuXHJcblxyXG5cclxuICAgICAgbGV0IHJvdyA9IFwiXCI7XHJcbiAgICAgIHJvdyA9IGdycCArIFwiICBcIiArIHF0eSArIFwiICBcIiArIGN0cyArIFwiICBcIiArIHJ0ZSArIFwiICBcIiArIGFtdDtcclxuICAgICAgLy9yb3cgPSBcIkdyb3VwIDogXCIgKyBlbGVtZW50LmdycCArXHJcbiAgICAgIC8vIGdyb3VwU3VtbWFyeVtlbGVtZW50LmdycCArICdfUVRZJ10gPT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiUVRZIDogXCIgKyBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX1FUWSddICtcclxuICAgICAgLy8gICBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX0NUUyddID09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIkNhcmF0cyA6IFwiICsgZ3JvdXBTdW1tYXJ5W2VsZW1lbnQuZ3JwICsgJ19DVFMnXSArXHJcbiAgICAgIC8vICAgICBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX1JURSddID09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIlJhdGUgOiBcIiArIGdyb3VwU3VtbWFyeVtlbGVtZW50LmdycCArICdfUlRFJ10gK1xyXG4gICAgICAvLyAgICAgICBncm91cFN1bW1hcnlbZWxlbWVudC5ncnAgKyAnX0FNVCddID09IHVuZGVmaW5lZCA/IFwiXCIgOiBcIkFtb3VudCA6IFwiICsgZ3JvdXBTdW1tYXJ5W2VsZW1lbnQuZ3JwICsgJ19BTVQnXTtcclxuICAgICAgQ1NWICs9IHJvdyArICdcXHJcXG4nO1xyXG4gICAgICBmaW5hbEdycFZhbFtlbGVtZW50LmdycF0uZm9yRWFjaChwa3RkdGwgPT4ge1xyXG4gICAgICAgIGxldCByID0gXCJcIjtcclxuICAgICAgICBhdHRyRHRsLmZvckVhY2goYXR0ID0+IHtcclxuICAgICAgICAgIHIgKz0gcGt0ZHRsW2F0dF0gKyAnLCc7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgciA9IHIuc2xpY2UoMCwgLTEpO1xyXG4gICAgICAgIENTViArPSByICsgJ1xcclxcbic7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKENTViA9PSAnJykge1xyXG4gICAgICBhbGVydChcIkludmFsaWQgZGF0YVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcImFyckRhdGFcIiwgYXJyRGF0YSk7XHJcbiAgICBsZXQgZmlsZU5hbWUgPSBcIlJlcG9ydF9cIjtcclxuICAgIGZpbGVOYW1lICs9IFJlcG9ydFRpdGxlLnJlcGxhY2UoLyAvZywgXCJfXCIpICsgXCIuY3N2XCI7XHJcbiAgICB2YXIgYmxvYiA9IG5ldyBCbG9iKFtDU1ZdLCB7XHJcbiAgICAgIHR5cGU6IFwiYXBwbGljYXRpb24vY3N2O2NoYXJzZXQ9dXRmLTg7XCJcclxuICAgIH0pO1xyXG5cclxuICAgIHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICB2YXIgY3N2VXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGxpbmsuaHJlZiA9IGNzdlVybDtcclxuICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspO1xyXG5cclxuICB9XHJcblxyXG5cclxuICBtb2RpZnlEYXRhQnlIZWFkZXIoc2VhcmNoUmVzdWx0RHRsLCByZXN1bHRWaWV3LCByZXN1bHRWaWV3RHRsKSB7XHJcbiAgICBsZXQgb2JqID0ge31cclxuICAgIGxldCBtb2RpZmllZE9iakFyciA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWFyY2hSZXN1bHREdGwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZXN1bHRWaWV3Lmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgbGV0IHZhbHMgPSBzZWFyY2hSZXN1bHREdGxbaV1bcmVzdWx0Vmlld1tqXV07XHJcbiAgICAgICAgb2JqW3Jlc3VsdFZpZXdEdGxbcmVzdWx0Vmlld1tqXV1dID0gdmFscztcclxuICAgICAgfVxyXG4gICAgICBtb2RpZmllZE9iakFyci5wdXNoKG9iaik7XHJcbiAgICAgIG9iaiA9IHt9O1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2cobW9kaWZpZWRPYmpBcnIpO1xyXG4gICAgcmV0dXJuIG1vZGlmaWVkT2JqQXJyO1xyXG4gIH1cclxuXHJcbiAgbW9kaWZ5R3JwRGF0YUJ5SGVhZGVyKHNlYXJjaFJlc3VsdER0bCwgcmVzdWx0VmlldywgcmVzdWx0Vmlld0R0bCkge1xyXG4gICAgbGV0IG9iaiA9IHt9XHJcbiAgICBsZXQgbW9kaWZpZWRPYmpBcnIgPSBbXTtcclxuICAgIGZvciAobGV0IGdycGsgaW4gc2VhcmNoUmVzdWx0RHRsKSB7XHJcbiAgICAgIHNlYXJjaFJlc3VsdER0bFtncnBrXS5mb3JFYWNoKHBrdHMgPT4ge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzdWx0Vmlldy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgbGV0IHZhbHMgPSBwa3RzW3Jlc3VsdFZpZXdbal1dO1xyXG4gICAgICAgICAgb2JqW3Jlc3VsdFZpZXdEdGxbcmVzdWx0Vmlld1tqXV1dID0gdmFscztcclxuICAgICAgICB9XHJcbiAgICAgICAgbW9kaWZpZWRPYmpBcnIucHVzaChvYmopO1xyXG4gICAgICAgIG9iaiA9IHt9O1xyXG4gICAgICB9KTtcclxuICAgICAgbW9kaWZpZWRPYmpBcnIucHVzaChcImJyXCIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1vZGlmaWVkT2JqQXJyO1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZShkYXRlKSB7XHJcbiAgICBsZXQgZCA9IG5ldyBEYXRlKGRhdGUpLFxyXG4gICAgICBtb250aCA9ICcnICsgKGQuZ2V0TW9udGgoKSArIDEpLFxyXG4gICAgICBkYXkgPSAnJyArIGQuZ2V0RGF0ZSgpLFxyXG4gICAgICB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICByZXR1cm4gW2RheSwgbW9udGgsIHllYXJdLmpvaW4oJy0nKTtcclxuICB9XHJcblxyXG4gIGZvcm1hdERhdGVTQyhkYXRlKSB7XHJcbiAgICBcclxuICAgIGxldCBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICByZXR1cm4gW3llYXIsIG1vbnRoLCBkYXldLmpvaW4oJy0nKTtcclxuICB9XHJcblxyXG4gIGRkTU1ZWVlZKGRhdGUpIHtcclxuICAgIGxldCBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgIHllYXIgPSBkLmdldEZ1bGxZZWFyKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpIG1vbnRoID0gJzAnICsgbW9udGg7XHJcbiAgICBpZiAoZGF5Lmxlbmd0aCA8IDIpIGRheSA9ICcwJyArIGRheTtcclxuXHJcbiAgICByZXR1cm4gW2RheSwgbW9udGgsIHllYXJdLmpvaW4oJy0nKTtcclxuICB9XHJcbiBcclxuICBGb3JtYXREYXRlKGRhdGUsZm9ybWF0KXtcclxuICAgIGxldCBkID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZm9ybWF0KTtcclxuICAgIHJldHVybiBkO1xyXG4gIH1cclxuXHJcbiAgZGRNTVlZWVludW0oZGF0ZSkge1xyXG4gICAgbGV0IGQgPSBuZXcgRGF0ZShkYXRlKSxcclxuICAgICAgbW9udGggPSAnJyArIChkLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcclxuICAgICAgeWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcclxuZGVidWdnZXJcclxuICAgIGlmIChtb250aC5sZW5ndGggPCAyKSBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgaWYgKGRheS5sZW5ndGggPCAyKSBkYXkgPSAnMCcgKyBkYXk7XHJcblxyXG4gICAgcmV0dXJuIHllYXIrbW9udGgrZGF5O1xyXG4gIH1cclxuXHJcbiAgZm9ybWF0RGF0ZVNDTW9udGhCZWZvcmUoZGF0ZSkge1xyXG4gICAgaWYoZGF0ZSE9dW5kZWZpbmVkICYmIGRhdGUhPVwiXCIpe1xyXG5cclxuICAgIGxldCBkID0gbmV3IERhdGUoZGF0ZSksXHJcbiAgICAgIG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpKSxcclxuICAgICAgZGF5ID0gJycgKyBkLmdldERhdGUoKSxcclxuICAgICAgeWVhciA9IGQuZ2V0RnVsbFllYXIoKTtcclxuICAgIGQuc2V0RGF0ZShkLmdldERhdGUoKSAtIDMwKTtcclxuXHJcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikgbW9udGggPSAnMCcgKyBtb250aDtcclxuICAgIGlmIChkYXkubGVuZ3RoIDwgMikgZGF5ID0gJzAnICsgZGF5O1xyXG5cclxuICAgIHJldHVybiBbeWVhciwgbW9udGgsIGRheV0uam9pbignLScpO1xyXG4gICAgfVxyXG4gIH1cclxuICBcclxuICBudW1iZXJGbG9hdChudW1iZXIpe1xyXG4gICAgZGVidWdnZXJcclxuICAgIG51bWJlcj1udW1iZXJ8fDA7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdChudW1iZXIpO1xyXG5cclxuICB9XHJcbiAgXHJcbiBkYXRlVmFsaWRhdGlvbihkYXRlLGZvcm1hdGUpe1xyXG4gICBkZWJ1Z2dlcjtcclxuICB2YXIgZGQ7IFxyXG4gIHZhciBtbTsgXHJcbiAgdmFyIHl5OyBcclxuICBkYXRlPWRhdGUucmVwbGFjZSgnLScsJy8nKVxyXG4gIGRhdGU9ZGF0ZS5yZXBsYWNlKCctJywnLycpXHJcbiAgdmFyIHBhcnRzID0gZGF0ZS5zcGxpdCgnLycpO1xyXG4gIFxyXG4gIGlmIChmb3JtYXRlID09ICdkZC9tbS95eScpIHtcclxuICAgIGRkID0gcGFydHNbMF07XHJcbiAgICBtbSA9IHBhcnRzWzFdO1xyXG4gICAgeXkgPSAgcGFydHNbMl07ICBcdCAgXHJcbiAgfSBlbHNlIGlmKGZvcm1hdGUgPT0gJ21tL2RkL3l5Jyl7XHJcbiAgICBtbSA9IHBhcnRzWzBdO1xyXG4gICAgZGQgPSBwYXJ0c1sxXTtcclxuICAgIHl5ID0gIHBhcnRzWzJdOyAgXHJcbiAgfWVsc2UgaWYoZm9ybWF0ZSA9PSAnZGQvTW9uL3l5Jyl7IFxyXG4gICAgZGQgPSBwYXJ0c1swXTtcclxuICAgIG1tID0gcGFydHNbMV07XHJcbiAgICB5eSA9ICBwYXJ0c1syXTsgIFxyXG4gICAgbGV0IGQgPSBuZXcgRGF0ZShkYXRlKVxyXG4gICAgbW0gPSAgKGQuZ2V0TW9udGgoKSkrMVxyXG4gICAgbW0gPW1tLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG4gIFxyXG4gIGlmKG1tLmxlbmd0aCA8IDIpXHJcbiAgbW0gPSAnMCcrbW07XHJcbiAgaWYoZGQubGVuZ3RoIDwgMilcclxuICBkZCA9ICcwJytkZDtcclxuICBpZih5eS5sZW5ndGggPCA0KVxyXG4gIHl5ID0gJzIwJyt5eTtcclxuXHJcbiAgbGV0IG1taW50ID0gcGFyc2VJbnQobW0pO1xyXG5cclxuICBsZXQgZGRpbnQgPSBwYXJzZUludChkZCk7XHJcbiAgaWYoZGRpbnQgPiAzMSlcclxuICAgcmV0dXJuICdpbnZhaWxkJ1xyXG4gIGVsc2UgaWYobW1pbnQgPiAxMilcclxuICAgcmV0dXJuICdpbnZhaWxkJ1xyXG4gZWxzZVxyXG4gIHJldHVybiB5eSttbStkZDtcclxuIH1cclxuXHJcbiAgc3BsaXRUb1R3b0RlY2ltYWwoaW5wdXR2YWwpIHtcclxuICAgIGlmIChpbnB1dHZhbCAmJiBpbnB1dHZhbCAhPSBJbmZpbml0eSkge1xyXG4gICAgICByZXR1cm4gaW5wdXR2YWwudG9TdHJpbmcoKS50b1N0cmluZygpLm1hdGNoKC9eLT9cXGQrKD86XFwuXFxkezAsMn0pPy8pWzBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3BsaXRUb1RocmVlRGVjaW1hbChpbnB1dHZhbCkge1xyXG4gICAgaWYgKGlucHV0dmFsICYmIGlucHV0dmFsICE9IEluZmluaXR5KSB7XHJcbiAgICAgIHJldHVybiBpbnB1dHZhbC50b1N0cmluZygpLnRvU3RyaW5nKCkubWF0Y2goL14tP1xcZCsoPzpcXC5cXGR7MCwzfSk/LylbMF07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgcm91bmR2YWwoaW5wdXR2YWwpIHtcclxuICAgIGlmIChpbnB1dHZhbCkge1xyXG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChpbnB1dHZhbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByb3VuZFVwKG51bSwgcHJlY2lzaW9uKSB7XHJcbiAgICBwcmVjaXNpb24gPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKVxyXG4gICAgcmV0dXJuIE1hdGguY2VpbChudW0gKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uXHJcbiAgfVxyXG5cclxuICBnZXRTaWduZWRVcmwoczNkZXRhaWxzLGRvY19ubWUsYnVja2V0KXtcclxuICAgIGRlYnVnZ2VyXHJcbiAgICBsZXQgdXJsUGFyYW1zID0ge1xyXG4gICAgICBCdWNrZXQ6IHMzZGV0YWlsc1tcImRvY2J1Y2tldFwiXSxcclxuICAgICAgS2V5OiBzM2RldGFpbHNbXCJkb2Nmb2xkZXJcIl0rXCIvXCIrZG9jX25tZVxyXG4gICAgfTtcclxuICAgIGJ1Y2tldC5nZXRTaWduZWRVcmwoXCJnZXRPYmplY3RcIiwgdXJsUGFyYW1zLCBmdW5jdGlvbiggZXJyLCB1cmwgKSB7XHJcbiAgICAgIHJldHVybiB1cmw7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbnVtYmVydG9maXhlZChpbnB1dHZhbCxkZWNpbWFsKSB7XHJcbiAgICBpZiAoaW5wdXR2YWwpIHtcclxuICAgICAgICBpbnB1dHZhbD1pbnB1dHZhbC50b0ZpeGVkKGRlY2ltYWwpO1xyXG4gICAgICByZXR1cm4gaW5wdXR2YWw7XHJcbiAgICB9ZWxzZXtcclxuICAgIHJldHVybiBpbnB1dHZhbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRydW5jYXRlKG51bWJlciwgaW5kZXggPSAyKSB7XHJcbiAgXHQvLyBjdXR0aW5nIHRoZSBudW1iZXJcclxuICAgIHJldHVybiArbnVtYmVyLnRvU3RyaW5nKCkuc2xpY2UoMCwgKG51bWJlci50b1N0cmluZygpLmluZGV4T2YoXCIuXCIpKSArIChpbmRleCArIDEpKTtcclxufVxyXG5cclxuICAgZmxvb3JGaWd1cmUoZmlndXJlLCBkZWNpbWFscykge1xyXG4gICAgbGV0IGE7XHJcbiAgICBpZihmaWd1cmUhPW51bGwgJiYgZmlndXJlIT11bmRlZmluZWQgKXtcclxuICAgIGlmIChkZWNpbWFscyA9PSAtMSlcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihmaWd1cmUpO1xyXG4gICAgaWYgKGRlY2ltYWxzID09IDApXHJcbiAgICAgICAgcmV0dXJuIE1hdGgudHJ1bmMoZmlndXJlKTtcclxuICAgIGlmICghZGVjaW1hbHMpIGRlY2ltYWxzID0gMjtcclxuICAgIGxldCBkID0gTWF0aC5wb3coMTAsIGRlY2ltYWxzKTtcclxuXHJcbiAgICB2YXIgc3RyID0gZmlndXJlLnRvU3RyaW5nKCk7IFxyXG4gICAgYT0gcGFyc2VGbG9hdChzdHIpOyBcclxuICAgIGRlY2ltYWxzID0gcGFyc2VJbnQoZGVjaW1hbHMpO1xyXG4gICAgaWYoc3RyLmluZGV4T2YoXCIuXCIpICE9IC0xKXtcclxuICAgICAgICB2YXIgZmN0ciA7XHJcbiBkZWJ1Z2dlclxyXG4gICAgICAgIGlmICgoKGZpZ3VyZS50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSkubGVuZ3RoKSA9PSAyKSB7XHJcbiAgICAgICAgICAgIGZjdHIgPSBmaWd1cmUudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV07XHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICAgICAgaWYgKCgoZmlndXJlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdKS5sZW5ndGgpID09IDEpIHtcclxuICAgICAgICAgICAgZmN0ciA9IGZpZ3VyZS50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXS5jb25jYXQoXCIwXCIpO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgXHJcbiAgICAgICAgaWYgKCgoZmlndXJlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdKS5sZW5ndGgpID4gMikge1xyXG4gICAgICAgICAgICBmY3RyID0gZmlndXJlLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpWzFdLnN1YnN0cmluZygwLGRlY2ltYWxzKTtcclxuICAgICAgICB9ICAgICAgICBcclxuICAgIFxyXG4gICAgICAgIGEgPSBNYXRoLnRydW5jKGZpZ3VyZSkgKyBcIi5cIiArIGZjdHI7XHJcbiAgICB9ICBcclxuICAgIFxyXG59ZWxzZXtcclxuICAgIGE9ZmlndXJlO1xyXG59XHJcbiAgICByZXR1cm4gYTtcclxufVxyXG5cclxuICBzY3JvbGxUb0RpdihlbCkge1xyXG4gICAgbGV0IHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbCk7XHJcbiAgICByZXR1cm4geC5zY3JvbGxJbnRvVmlldygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXAoKSA6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcImh0dHA6Ly9pcGluZm8uaW8vanNvbi9cIilcclxuICAgICAgLnBpcGUobWFwKChyZXM6IGFueSkgPT4gcmVzKSlcclxuICB9XHJcblxyXG4gIHBhZ2VCY2sgPSAoKSA9PiB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcblxyXG4gIGdldEJyb3dzZXJJbmZvKCkge1xyXG4gICAgbGV0IG5WZXIgPSBuYXZpZ2F0b3IuYXBwVmVyc2lvbjtcclxuICAgIGxldCBuQWd0ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcclxuICAgIGxldCBicm93c2VyTmFtZSA9IG5hdmlnYXRvci5hcHBOYW1lO1xyXG4gICAgbGV0IGZ1bGxWZXJzaW9uID0gJycgKyBwYXJzZUZsb2F0KG5hdmlnYXRvci5hcHBWZXJzaW9uKTtcclxuICAgIGxldCBtYWpvclZlcnNpb24gPSBwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbiwgMTApO1xyXG4gICAgbGV0IG5hbWVPZmZzZXQsIHZlck9mZnNldCwgaXg7XHJcblxyXG4gICAgLy8gSW4gT3BlcmEgMTUrLCB0aGUgdHJ1ZSB2ZXJzaW9uIGlzIGFmdGVyIFwiT1BSL1wiIFxyXG4gICAgaWYgKCh2ZXJPZmZzZXQgPSBuQWd0LmluZGV4T2YoXCJPUFIvXCIpKSAhPSAtMSkge1xyXG4gICAgICBicm93c2VyTmFtZSA9IFwiT3BlcmFcIjtcclxuICAgICAgZnVsbFZlcnNpb24gPSBuQWd0LnN1YnN0cmluZyh2ZXJPZmZzZXQgKyA0KTtcclxuICAgIH1cclxuICAgIC8vIEluIG9sZGVyIE9wZXJhLCB0aGUgdHJ1ZSB2ZXJzaW9uIGlzIGFmdGVyIFwiT3BlcmFcIiBvciBhZnRlciBcIlZlcnNpb25cIlxyXG4gICAgZWxzZSBpZiAoKHZlck9mZnNldCA9IG5BZ3QuaW5kZXhPZihcIk9wZXJhXCIpKSAhPSAtMSkge1xyXG4gICAgICBicm93c2VyTmFtZSA9IFwiT3BlcmFcIjtcclxuICAgICAgZnVsbFZlcnNpb24gPSBuQWd0LnN1YnN0cmluZyh2ZXJPZmZzZXQgKyA2KTtcclxuICAgICAgaWYgKCh2ZXJPZmZzZXQgPSBuQWd0LmluZGV4T2YoXCJWZXJzaW9uXCIpKSAhPSAtMSlcclxuICAgICAgICBmdWxsVmVyc2lvbiA9IG5BZ3Quc3Vic3RyaW5nKHZlck9mZnNldCArIDgpO1xyXG4gICAgfVxyXG4gICAgLy8gSW4gTVNJRSwgdGhlIHRydWUgdmVyc2lvbiBpcyBhZnRlciBcIk1TSUVcIiBpbiB1c2VyQWdlbnRcclxuICAgIGVsc2UgaWYgKCh2ZXJPZmZzZXQgPSBuQWd0LmluZGV4T2YoXCJNU0lFXCIpKSAhPSAtMSkge1xyXG4gICAgICBicm93c2VyTmFtZSA9IFwiTWljcm9zb2Z0IEludGVybmV0IEV4cGxvcmVyXCI7XHJcbiAgICAgIGZ1bGxWZXJzaW9uID0gbkFndC5zdWJzdHJpbmcodmVyT2Zmc2V0ICsgNSk7XHJcbiAgICB9XHJcbiAgICAvLyBJbiBDaHJvbWUsIHRoZSB0cnVlIHZlcnNpb24gaXMgYWZ0ZXIgXCJDaHJvbWVcIiBcclxuICAgIGVsc2UgaWYgKCh2ZXJPZmZzZXQgPSBuQWd0LmluZGV4T2YoXCJDaHJvbWVcIikpICE9IC0xKSB7XHJcbiAgICAgIGJyb3dzZXJOYW1lID0gXCJDaHJvbWVcIjtcclxuICAgICAgZnVsbFZlcnNpb24gPSBuQWd0LnN1YnN0cmluZyh2ZXJPZmZzZXQgKyA3KTtcclxuICAgIH1cclxuICAgIC8vIEluIFNhZmFyaSwgdGhlIHRydWUgdmVyc2lvbiBpcyBhZnRlciBcIlNhZmFyaVwiIG9yIGFmdGVyIFwiVmVyc2lvblwiIFxyXG4gICAgZWxzZSBpZiAoKHZlck9mZnNldCA9IG5BZ3QuaW5kZXhPZihcIlNhZmFyaVwiKSkgIT0gLTEpIHtcclxuICAgICAgYnJvd3Nlck5hbWUgPSBcIlNhZmFyaVwiO1xyXG4gICAgICBmdWxsVmVyc2lvbiA9IG5BZ3Quc3Vic3RyaW5nKHZlck9mZnNldCArIDcpO1xyXG4gICAgICBpZiAoKHZlck9mZnNldCA9IG5BZ3QuaW5kZXhPZihcIlZlcnNpb25cIikpICE9IC0xKVxyXG4gICAgICAgIGZ1bGxWZXJzaW9uID0gbkFndC5zdWJzdHJpbmcodmVyT2Zmc2V0ICsgOCk7XHJcbiAgICB9XHJcbiAgICAvLyBJbiBGaXJlZm94LCB0aGUgdHJ1ZSB2ZXJzaW9uIGlzIGFmdGVyIFwiRmlyZWZveFwiIFxyXG4gICAgZWxzZSBpZiAoKHZlck9mZnNldCA9IG5BZ3QuaW5kZXhPZihcIkZpcmVmb3hcIikpICE9IC0xKSB7XHJcbiAgICAgIGJyb3dzZXJOYW1lID0gXCJGaXJlZm94XCI7XHJcbiAgICAgIGZ1bGxWZXJzaW9uID0gbkFndC5zdWJzdHJpbmcodmVyT2Zmc2V0ICsgOCk7XHJcbiAgICB9XHJcbiAgICAvLyBJbiBtb3N0IG90aGVyIGJyb3dzZXJzLCBcIm5hbWUvdmVyc2lvblwiIGlzIGF0IHRoZSBlbmQgb2YgdXNlckFnZW50IFxyXG4gICAgZWxzZSBpZiAoKG5hbWVPZmZzZXQgPSBuQWd0Lmxhc3RJbmRleE9mKCcgJykgKyAxKSA8XHJcbiAgICAgICh2ZXJPZmZzZXQgPSBuQWd0Lmxhc3RJbmRleE9mKCcvJykpKSB7XHJcbiAgICAgIGJyb3dzZXJOYW1lID0gbkFndC5zdWJzdHJpbmcobmFtZU9mZnNldCwgdmVyT2Zmc2V0KTtcclxuICAgICAgZnVsbFZlcnNpb24gPSBuQWd0LnN1YnN0cmluZyh2ZXJPZmZzZXQgKyAxKTtcclxuICAgICAgaWYgKGJyb3dzZXJOYW1lLnRvTG93ZXJDYXNlKCkgPT0gYnJvd3Nlck5hbWUudG9VcHBlckNhc2UoKSkge1xyXG4gICAgICAgIGJyb3dzZXJOYW1lID0gbmF2aWdhdG9yLmFwcE5hbWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRyaW0gdGhlIGZ1bGxWZXJzaW9uIHN0cmluZyBhdCBzZW1pY29sb24vc3BhY2UgaWYgcHJlc2VudFxyXG4gICAgaWYgKChpeCA9IGZ1bGxWZXJzaW9uLmluZGV4T2YoXCI7XCIpKSAhPSAtMSlcclxuICAgICAgZnVsbFZlcnNpb24gPSBmdWxsVmVyc2lvbi5zdWJzdHJpbmcoMCwgaXgpO1xyXG4gICAgaWYgKChpeCA9IGZ1bGxWZXJzaW9uLmluZGV4T2YoXCIgXCIpKSAhPSAtMSlcclxuICAgICAgZnVsbFZlcnNpb24gPSBmdWxsVmVyc2lvbi5zdWJzdHJpbmcoMCwgaXgpO1xyXG5cclxuICAgIG1ham9yVmVyc2lvbiA9IHBhcnNlSW50KCcnICsgZnVsbFZlcnNpb24sIDEwKTtcclxuICAgIGlmIChpc05hTihtYWpvclZlcnNpb24pKSB7XHJcbiAgICAgIGZ1bGxWZXJzaW9uID0gJycgKyBwYXJzZUZsb2F0KG5hdmlnYXRvci5hcHBWZXJzaW9uKTtcclxuICAgICAgbWFqb3JWZXJzaW9uID0gcGFyc2VJbnQobmF2aWdhdG9yLmFwcFZlcnNpb24sIDEwKTtcclxuICAgIH1cclxuICAgIGxldCBPYmogPSB7XHJcbiAgICAgICdicm93c2VyTmFtZSc6IGJyb3dzZXJOYW1lLFxyXG4gICAgICAndmVyc2lvbic6IGZ1bGxWZXJzaW9uLFxyXG4gICAgICAnbWFqb3JWZXJzaW9uJzogbWFqb3JWZXJzaW9uLFxyXG4gICAgICAnYXBwTmFtZSc6IG5hdmlnYXRvci5hcHBOYW1lLFxyXG4gICAgICAndXNlckFnZW50JzogbmF2aWdhdG9yLnVzZXJBZ2VudFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIE9iajtcclxuICB9XHJcblxyXG4gIGVkaXRvckNvbmZpZyA9IHtcclxuICAgIFwiZWRpdGFibGVcIjogdHJ1ZSxcclxuICAgIFwic3BlbGxjaGVja1wiOiB0cnVlLFxyXG4gICAgXCJoZWlnaHRcIjogXCIxMTBweFwiLFxyXG4gICAgXCJtaW5IZWlnaHRcIjogXCIxMTBweFwiLFxyXG4gICAgXCJ3aWR0aFwiOiBcImF1dG9cIixcclxuICAgIFwibWluV2lkdGhcIjogXCIwXCIsXHJcbiAgICBcInRyYW5zbGF0ZVwiOiBcInllc1wiLFxyXG4gICAgXCJlbmFibGVUb29sYmFyXCI6IHRydWUsXHJcbiAgICBcInNob3dUb29sYmFyXCI6IHRydWUsXHJcbiAgICBcInBsYWNlaG9sZGVyXCI6IFwiRW50ZXIgdGV4dCBoZXJlLi4uXCIsXHJcbiAgICBcImltYWdlRW5kUG9pbnRcIjogXCJcIixcclxuICAgIFwidG9vbGJhclwiOiBbXHJcbiAgICAgIFtcImJvbGRcIiwgXCJpdGFsaWNcIiwgXCJ1bmRlcmxpbmVcIiwgXCJzdHJpa2VUaHJvdWdoXCIsIFwic3VwZXJzY3JpcHRcIiwgXCJzdWJzY3JpcHRcIl0sXHJcbiAgICAgIFtcImZvbnROYW1lXCIsIFwiZm9udFNpemVcIiwgXCJjb2xvclwiXSxcclxuICAgICAgW1wianVzdGlmeUxlZnRcIiwgXCJqdXN0aWZ5Q2VudGVyXCIsIFwianVzdGlmeVJpZ2h0XCIsIFwianVzdGlmeUZ1bGxcIiwgXCJpbmRlbnRcIiwgXCJvdXRkZW50XCJdLFxyXG4gICAgICBbXCJjdXRcIiwgXCJjb3B5XCIsIFwiZGVsZXRlXCIsIFwicmVtb3ZlRm9ybWF0XCIsIFwidW5kb1wiLCBcInJlZG9cIl0sXHJcbiAgICAgIFtcInBhcmFncmFwaFwiLCBcImJsb2NrcXVvdGVcIiwgXCJyZW1vdmVCbG9ja3F1b3RlXCIsIFwiaG9yaXpvbnRhbExpbmVcIiwgXCJvcmRlcmVkTGlzdFwiLCBcInVub3JkZXJlZExpc3RcIl0sXHJcbiAgICAgIFtcImxpbmtcIiwgXCJ1bmxpbmtcIiwgXCJpbWFnZVwiLCBcInZpZGVvXCJdXHJcbiAgICBdXHJcbiAgfVxyXG5cclxuICBmb3JtYXRlU3RyKHN0cikge1xyXG4gICAgc3RyID0gc3RyLnRyaW0oKTtcclxuICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9bICxdKy9nLCBcIixcIik7XHJcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFxuL2csIFwiLFwiKTtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuICBzdGFydFJGSURTY2FuKGRldmljZUlkLCBmb3JtTm1lKSB7XHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21kbEtleScpKTtcclxuICAgIGxldCBjVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgdGhpcy5oZWFkZXIgPSB7XHJcbiAgICAgICdjbGllbnRrZXknOiBDb29raWUuZ2V0KCdfY2snKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ21vZHVsZWtleSc6IG1kbGtbY1VybC5zcGxpdCgnLycpWzFdXSxcclxuICAgICAgJ2xvZ2luaWQnOiBDb29raWUuZ2V0KCdfbG9naWQnKSxcclxuICAgICAgJ21ldGhvZCc6ICdzdGFydEJhckNvZGVSZWFkaW5nJyxcclxuICAgICAgJ3NvdXJjZSc6ICdxcydcclxuICAgIH07XHJcbiAgICBsZXQgcmVxT2JqID0ge307XHJcbiAgICByZXFPYmpbJ2Zvcm1ObWUnXSA9IGZvcm1ObWU7XHJcbiAgICByZXFPYmpbJ2RldmljZUlkJ10gPSBkZXZpY2VJZDtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMubG9hZChyZXFPYmosIG9wdGlvbnMsICdtYXJrZXRpbmcvYmFyQ29kZVJlYWRlcicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdTY2FuIFN0YXJ0ZWQuLi4nKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc2Nhbl9pZG47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgU3RvcFJGSURTY2FuKHNjYW5faWRuLCBmb3JtTm1lKSB7XHJcbiAgICBsZXQgbWRsayA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21kbEtleScpKTtcclxuICAgIGxldCBjVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgdGhpcy5oZWFkZXIgPSB7XHJcbiAgICAgICdjbGllbnRrZXknOiBDb29raWUuZ2V0KCdfY2snKSxcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ21vZHVsZWtleSc6IG1kbGtbY1VybC5zcGxpdCgnLycpWzFdXSxcclxuICAgICAgJ2xvZ2luaWQnOiBDb29raWUuZ2V0KCdfbG9naWQnKSxcclxuICAgICAgJ21ldGhvZCc6ICdzdG9wQmFyQ29kZVJlYWRpbmcnLFxyXG4gICAgICAnc291cmNlJzogJ3FzJ1xyXG4gICAgfTtcclxuICAgIGxldCByZXFPYmogPSB7fTtcclxuICAgIHJlcU9ialsnZm9ybU5tZSddID0gZm9ybU5tZTtcclxuICAgIHJlcU9ialsnc2NhbklkJ10gPSBzY2FuX2lkbjtcclxuICAgIGxldCBvcHRpb25zID0gKHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHRoaXMuaGVhZGVyKSB9KTtcclxuICAgIHRoaXMubG9hZChyZXFPYmosIG9wdGlvbnMsICdtYXJrZXRpbmcvYmFyQ29kZVJlYWRlcicpLnRoZW4oKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAnU1VDQ0VTUycpIHtcclxuICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdTY2FuIFN0b3BwZWQuLi4nKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2Uuc2Nhbl9pZG47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIGxvYWQocmVxT2JqLCBoZWFkZXJzLCB1cmwpIHtcclxuICAgIGNvbnNvbGUubG9nKGhlYWRlcnMpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyB1cmwsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIGhlYWRlcnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGRlYnVnZ2VyO1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkaUZpbGUocmVxT2JqLCBoZWFkZXIsIHVybCkge1xyXG4gICAgbGV0IG9wdGlvbnM6IGFueSA9ICh7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyhoZWFkZXIpIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuZ2xiRW52LmJhc2VVcmwgKyB1cmwsIEpTT04uc3RyaW5naWZ5KHJlcU9iaiksIG9wdGlvbnMpXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMuc3Bpbm5lclNlcnZpY2UuaGlkZSgpO1xyXG4gICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBcclxuICAgbnVtYmVyV2l0aENvbW1hcyh4KSB7XHJcbiAgICB2YXIgcGFydHMgPSB4LnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgcGFydHNbMF0gPSBwYXJ0c1swXS5yZXBsYWNlKC9cXEIoPz0oXFxkezN9KSsoPyFcXGQpKS9nLCBcIixcIik7XHJcbiAgICByZXR1cm4gcGFydHMuam9pbihcIi5cIik7XHJcbiAgIH1cclxuXHJcbiAgICAvLyBuZXcgZnVuY3Rpb24gZm9yIGluZGlhbiBhbmQgZW5nbGlzaCBmb3JtYXQgY29tbWFzXHJcbiAgbnVtYmVyV2l0aENvbW1hc0Zvcm1hdChudW0pIHtcclxuICAgIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY29tbWFGb3JtYXQnKSA9PSAnZW5nJykge1xyXG4gICAgICB2YXIgcGFydHMgPSBudW0udG9TdHJpbmcoKS5zcGxpdChcIi5cIik7XHJcbiAgICAgIHBhcnRzWzBdID0gcGFydHNbMF0ucmVwbGFjZSgvXFxCKD89KFxcZHszfSkrKD8hXFxkKSkvZywgXCIsXCIpO1xyXG4gICAgICByZXR1cm4gcGFydHMuam9pbihcIi5cIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdmFyIHBhcnRzID0gbnVtLnRvU3RyaW5nKCkuc3BsaXQoXCIuXCIpO1xyXG4gICAgICBsZXQgeCA9IHBhcnRzWzBdO1xyXG4gICAgICB4ID0geC5yZXBsYWNlQWxsKCcsJywgJycpOyAvL3JlbW92aW5nIHByZSBleGlzdGluZyBjb21tYXMgaWYgYW55XHJcbiAgICAgIHZhciBsYXN0VGhyZWUgPSB4LnN1YnN0cmluZyh4Lmxlbmd0aC0zKTtcclxuICAgICAgdmFyIG90aGVyTnVtYmVycyA9IHguc3Vic3RyaW5nKDAseC5sZW5ndGgtMyk7XHJcbiAgICAgIGlmKG90aGVyTnVtYmVycyAhPSAnJylcclxuICAgICAgICAgIGxhc3RUaHJlZSA9ICcsJyArIGxhc3RUaHJlZTtcclxuICAgICAgdmFyIHJlcyA9IG90aGVyTnVtYmVycy5yZXBsYWNlKC9cXEIoPz0oXFxkezJ9KSsoPyFcXGQpKS9nLCBcIixcIikgKyBsYXN0VGhyZWU7XHJcbiAgICAgIHBhcnRzWzBdID0gcmVzO1xyXG4gICAgICByZXR1cm4gcGFydHMuam9pbihcIi5cIik7XHJcbiAgICB9XHJcbn1cclxuXHJcbiAgaW5Xb3Jkc0lOUihudW0pIHtcclxuICAgIGlmICgobnVtID0gbnVtLnRvU3RyaW5nKCkpLmxlbmd0aCA+IDkpIHJldHVybiAnb3ZlcmZsb3cnO1xyXG4gICAgbGV0IG4gPSBbXTtcclxuICAgIG4gPSAoJzAwMDAwMDAwMCcgKyBudW0pLnN1YnN0cigtOSkubWF0Y2goL14oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSkoXFxkezF9KShcXGR7Mn0pJC8pO1xyXG4gICAgaWYgKCFuKSByZXR1cm47IHZhciBzdHIgPSAnJztcclxuICAgIHN0ciArPSAoblsxXSAhPSAwKSA/ICh0aGlzLmFbTnVtYmVyKG5bMV0pXSB8fCB0aGlzLmJbblsxXVswXV0gKyAnICcgKyB0aGlzLmFbblsxXVsxXV0pICsgJ2Nyb3JlICcgOiAnJztcclxuICAgIHN0ciArPSAoblsyXSAhPSAwKSA/ICh0aGlzLmFbTnVtYmVyKG5bMl0pXSB8fCB0aGlzLmJbblsyXVswXV0gKyAnICcgKyB0aGlzLmFbblsyXVsxXV0pICsgJ2xha2ggJyA6ICcnO1xyXG4gICAgc3RyICs9IChuWzNdICE9IDApID8gKHRoaXMuYVtOdW1iZXIoblszXSldIHx8IHRoaXMuYltuWzNdWzBdXSArICcgJyArIHRoaXMuYVtuWzNdWzFdXSkgKyAndGhvdXNhbmQgJyA6ICcnO1xyXG4gICAgc3RyICs9IChuWzRdICE9IDApID8gKHRoaXMuYVtOdW1iZXIobls0XSldIHx8IHRoaXMuYltuWzRdWzBdXSArICcgJyArIHRoaXMuYVtuWzRdWzFdXSkgKyAnaHVuZHJlZCAnIDogJyc7XHJcbiAgICBzdHIgKz0gKG5bNV0gIT0gMCkgPyAoKHN0ciAhPSAnJykgPyAnYW5kICcgOiAnJykgKyAodGhpcy5hW051bWJlcihuWzVdKV0gfHwgdGhpcy5iW25bNV1bMF1dICsgJyAnICsgdGhpcy5hW25bNV1bMV1dKSArICdvbmx5ICcgOiAnJztcclxuICAgIGNvbnNvbGUubG9nKHN0cik7XHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIHJhbmRvbW51bWJlcigpIHtcclxuICAgIGxldCBudW0gPSBNYXRoLmZsb29yKChNYXRoLnJhbmRvbSgpICogMTAwMDApICsgMTAwKTtcclxuICAgIHJldHVybiBudW07XHJcbiAgfVxyXG5cclxuICB0YWdib3hTZXR0aW5nczoge1xyXG4gICAgZW5hYmxlRmlsdGVyU2VsZWN0QWxsOiBmYWxzZSxcclxuICAgIHNpbmdsZVNlbGVjdGlvbjogZmFsc2UsXHJcbiAgICB0ZXh0OiBcIlNlbGVjdCBzdGF0dXNcIixcclxuICAgIHNlbGVjdEFsbFRleHQ6ICdTZWxlY3QgQWxsJyxcclxuICAgIHVuU2VsZWN0QWxsVGV4dDogJ1VuU2VsZWN0IEFsbCcsXHJcbiAgICBlbmFibGVTZWFyY2hGaWx0ZXI6IHRydWUsXHJcbiAgICBjbGFzc2VzOiBcIm15Y2xhc3MgY3VzdG9tLWNsYXNzXCJcclxuICB9XHJcblxyXG4gICByZW1vdmVFbXB0eShvYmopIHtcclxuICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXHJcbiAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGspIHtcclxuICAgICAgICByZXR1cm4gb2JqW2tdfHwnJyAhPSAnJztcclxuICAgICAgfSlcclxuICAgICAgLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrKSB7XHJcbiAgICAgICAgYWNjW2tdID0gb2JqW2tdO1xyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgIH0sIHt9KTtcclxuICB9XHJcblxyXG4gIGNvbmZpZyA9IHtcclxuICAgIGVkaXRhYmxlOiB0cnVlLFxyXG4gICAgc3BlbGxjaGVjazogdHJ1ZSxcclxuICAgIGhlaWdodDogJzE1cmVtJyxcclxuICAgIG1pbkhlaWdodDogJzVyZW0nLFxyXG4gICAgcGxhY2Vob2xkZXI6ICdFbnRlciB0ZXh0IGhlcmUuLi4nLFxyXG4gICAgdHJhbnNsYXRlOiAnbm8nLFxyXG4gICAgZGVmYXVsdFBhcmFncmFwaFNlcGFyYXRvcjogJ3AnLFxyXG4gICAgZGVmYXVsdEZvbnROYW1lOiAnQXJpYWwnLFxyXG4gICAgY3VzdG9tQ2xhc3NlczogW1xyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogXCJxdW90ZVwiLFxyXG4gICAgICAgIGNsYXNzOiBcInF1b3RlXCIsXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiAncmVkVGV4dCcsXHJcbiAgICAgICAgY2xhc3M6ICdyZWRUZXh0J1xyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogXCJ0aXRsZVRleHRcIixcclxuICAgICAgICBjbGFzczogXCJ0aXRsZVRleHRcIixcclxuICAgICAgICB0YWc6IFwiaDFcIixcclxuICAgICAgfSxcclxuICAgIF1cclxuICB9O1xyXG5cclxufSJdfQ==
|