exceladdincbms-v2 5.13.0 → 17.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/exceladdincbms.mjs +5 -0
- package/esm2022/lib/auth.service.mjs +56 -61
- package/esm2022/lib/base-app.service.mjs +41 -41
- package/esm2022/lib/bulk-tool.component.mjs +19 -19
- package/esm2022/lib/bulk-tool.module.mjs +51 -52
- package/esm2022/lib/constant.enum.mjs +5 -5
- package/esm2022/lib/environmentsModel.info.mjs +3 -2
- package/esm2022/lib/http-interceptor.mjs +25 -25
- package/esm2022/lib/login/login.component.mjs +111 -158
- package/esm2022/lib/materils/materils.module.mjs +177 -178
- package/esm2022/lib/menu/menu.component.mjs +187 -293
- package/esm2022/public_api.mjs +9 -9
- package/fesm2022/exceladdincbms.mjs +646 -0
- package/fesm2022/exceladdincbms.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/auth.service.d.ts +18 -20
- package/lib/base-app.service.d.ts +16 -16
- package/lib/bulk-tool.component.d.ts +8 -8
- package/lib/bulk-tool.module.d.ts +17 -17
- package/lib/constant.enum.d.ts +5 -5
- package/lib/environmentsModel.info.d.ts +9 -5
- package/lib/http-interceptor.d.ts +8 -8
- package/lib/login/login.component.d.ts +32 -32
- package/lib/materils/materils.module.d.ts +46 -46
- package/lib/menu/menu.component.d.ts +49 -51
- package/package.json +7 -7
- package/public_api.d.ts +6 -6
- package/src/styles.css +44 -0
- package/esm2022/exceladdincbms-v1.mjs +0 -5
- package/fesm2022/exceladdincbms-v1.mjs +0 -806
- package/fesm2022/exceladdincbms-v1.mjs.map +0 -1
|
@@ -1,293 +1,187 @@
|
|
|
1
|
-
import { Component, Injector
|
|
2
|
-
import { AuthService } from '../auth.service';
|
|
3
|
-
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
-
import { BaseAppService } from '../base-app.service';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "../auth.service";
|
|
7
|
-
import * as i2 from "@angular/router";
|
|
8
|
-
import * as i3 from "../base-app.service";
|
|
9
|
-
import * as i4 from "@angular/material/progress-spinner";
|
|
10
|
-
import * as i5 from "@angular/common";
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
this.
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
this.
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
this.
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
console.log("childrenMenu", childrenMenu);
|
|
188
|
-
if (childrenMenu.length > 0) {
|
|
189
|
-
this.router.navigate([childrenMenu[0].targetAction.split("app")[1]]);
|
|
190
|
-
return;
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
listItemClick(link) {
|
|
197
|
-
this.isLoading = true;
|
|
198
|
-
if (link.parentMenuName == this.menuName) {
|
|
199
|
-
if (link.parentMenuId == 0) {
|
|
200
|
-
if (link.children.length > 0) {
|
|
201
|
-
console.log("navigationUrl", link.children[0].targetAction);
|
|
202
|
-
this.isLoading = false;
|
|
203
|
-
this.router.navigate([link.children[0].targetAction.split("app")[1]]);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
console.log("navigationUrl", link.targetAction);
|
|
207
|
-
this.isLoading = false;
|
|
208
|
-
this.router.navigate([link.targetAction.split("app")[1]]);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
localStorage.setItem("childMenu", link.displaytext);
|
|
213
|
-
console.log("navigationUrl", link.targetAction);
|
|
214
|
-
this.isLoading = false;
|
|
215
|
-
this.router.navigate([link.targetAction.split("app")[1]]);
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
else {
|
|
219
|
-
this.isLoading = false;
|
|
220
|
-
this.navigateToAnotherMenu(link);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
navigateToAnotherMenu(link) {
|
|
224
|
-
this.navigateMsg = "...Redirecting to " + link.parentMenuName;
|
|
225
|
-
let navLink = link.targetAction;
|
|
226
|
-
navLink = link.targetAction.split("app")[0] + "app";
|
|
227
|
-
if (link.parentMenuId != 0) {
|
|
228
|
-
localStorage.setItem("childMenu", link.displaytext);
|
|
229
|
-
}
|
|
230
|
-
this.isLoading = false;
|
|
231
|
-
localStorage.setItem("IsNavigate", "true");
|
|
232
|
-
let navigateUrl = this.navigateUrl(navLink);
|
|
233
|
-
console.log("navigating to", link.displaytext);
|
|
234
|
-
window.location.assign(navigateUrl);
|
|
235
|
-
return;
|
|
236
|
-
}
|
|
237
|
-
navigateUrl(Url) {
|
|
238
|
-
let replacements = Url.match(/\{.*?\}/g);
|
|
239
|
-
let value = "";
|
|
240
|
-
if (replacements) {
|
|
241
|
-
replacements.forEach(element => {
|
|
242
|
-
if (element == "{userId}") {
|
|
243
|
-
value = this.userInfo.userInfoId;
|
|
244
|
-
}
|
|
245
|
-
Url = Url.replace(element, value);
|
|
246
|
-
});
|
|
247
|
-
}
|
|
248
|
-
return this.RootUrl + Url;
|
|
249
|
-
}
|
|
250
|
-
onLogOut() {
|
|
251
|
-
this.authenticationService.logout();
|
|
252
|
-
this.router.navigate(["/login"]);
|
|
253
|
-
}
|
|
254
|
-
/** @nocollapse */ static ɵfac = function MenuComponent_Factory(t) { return new (t || MenuComponent)(i0.ɵɵdirectiveInject('config'), i0.ɵɵdirectiveInject(i1.AuthService), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(i3.BaseAppService)); };
|
|
255
|
-
/** @nocollapse */ static ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: MenuComponent, selectors: [["lib-menu"]], decls: 18, vars: 5, consts: [[1, "example-container"], [1, "nav-header"], [1, "nav"], [1, "nav-time"], [1, "fa", "fa-bars", 2, "font-size", "24px"], [4, "ngFor", "ngForOf"], [3, "click"], [1, "nav-item"], [2, "padding-top", "12px"], [4, "ngIf"], ["class", "navigateMsg", 4, "ngIf"], ["class", "loade", 4, "ngIf"], [1, "item"], [1, "navigateMsg"], [1, "loade"], ["color", "black", 3, "diameter"]], template: function MenuComponent_Template(rf, ctx) { if (rf & 1) {
|
|
256
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "nav", 1)(2, "ul", 2)(3, "li", 3)(4, "a");
|
|
257
|
-
i0.ɵɵelement(5, "i", 4);
|
|
258
|
-
i0.ɵɵelementEnd();
|
|
259
|
-
i0.ɵɵelementStart(6, "ul");
|
|
260
|
-
i0.ɵɵtemplate(7, MenuComponent_div_7_Template, 3, 2, "div", 5);
|
|
261
|
-
i0.ɵɵelementStart(8, "li")(9, "a", 6);
|
|
262
|
-
i0.ɵɵlistener("click", function MenuComponent_Template_a_click_9_listener() { return ctx.onLogOut(); });
|
|
263
|
-
i0.ɵɵtext(10, "Logout");
|
|
264
|
-
i0.ɵɵelementEnd()()()();
|
|
265
|
-
i0.ɵɵelementStart(11, "li", 7)(12, "h5", 8);
|
|
266
|
-
i0.ɵɵtext(13);
|
|
267
|
-
i0.ɵɵelementEnd()()()();
|
|
268
|
-
i0.ɵɵtemplate(14, MenuComponent_div_14_Template, 2, 0, "div", 9);
|
|
269
|
-
i0.ɵɵelement(15, "router-outlet");
|
|
270
|
-
i0.ɵɵelementEnd();
|
|
271
|
-
i0.ɵɵtemplate(16, MenuComponent_div_16_Template, 2, 1, "div", 10);
|
|
272
|
-
i0.ɵɵtemplate(17, MenuComponent_section_17_Template, 4, 1, "section", 11);
|
|
273
|
-
} if (rf & 2) {
|
|
274
|
-
i0.ɵɵadvance(7);
|
|
275
|
-
i0.ɵɵproperty("ngForOf", ctx.MenuData);
|
|
276
|
-
i0.ɵɵadvance(6);
|
|
277
|
-
i0.ɵɵtextInterpolate1(" ", ctx.tooltext, "");
|
|
278
|
-
i0.ɵɵadvance(1);
|
|
279
|
-
i0.ɵɵproperty("ngIf", ctx.IsPermissionExists == false);
|
|
280
|
-
i0.ɵɵadvance(2);
|
|
281
|
-
i0.ɵɵproperty("ngIf", ctx.navigateMsg);
|
|
282
|
-
i0.ɵɵadvance(1);
|
|
283
|
-
i0.ɵɵproperty("ngIf", ctx.isLoading);
|
|
284
|
-
} }, dependencies: [i4.MatSpinner, i5.NgForOf, i5.NgIf, i2.RouterOutlet], styles: [".item[_ngcontent-%COMP%]{cursor:not-allowed!important}nav[_ngcontent-%COMP%]{display:block;text-align:left}nav[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none}.nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav[_ngcontent-%COMP%]{vertical-align:top;display:inline-block;border-radius:6px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative}.item[_ngcontent-%COMP%]:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]{float:left;margin-right:1px}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]{margin-bottom:1px;color:#fff;cursor:pointer}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover > a[_ngcontent-%COMP%]{background:rgba(0,0,0,.04)}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:first-child{border-radius:4px 0 0 4px}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:first-child > a[_ngcontent-%COMP%]{border-radius:4px 0 0}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:last-child{border-radius:0 0 4px;margin-right:0}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:last-child > a[_ngcontent-%COMP%]{border-radius:0 4px 0 0}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{margin-top:1px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:hover > ul[_ngcontent-%COMP%]{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] li[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{border-left:1px solid #fff}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover > ul[_ngcontent-%COMP%]{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav[_ngcontent-%COMP%] > li[_ngcontent-%COMP%]:hover > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] li[_ngcontent-%COMP%] > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav[_ngcontent-%COMP%] li[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:hover > a[_ngcontent-%COMP%]:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header[_ngcontent-%COMP%]{background:#779cf1;width:100%}.nav-header[_ngcontent-%COMP%] > .nav[_ngcontent-%COMP%] > .nav-item[_ngcontent-%COMP%]{color:#fff}.nav-header[_ngcontent-%COMP%] > .nav[_ngcontent-%COMP%] > .nav-item[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:#fff}.loade[_ngcontent-%COMP%]{background:rgba(255,255,255,.5);width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission[_ngcontent-%COMP%]{padding:10px;color:red}.navigateMsg[_ngcontent-%COMP%]{text-align:center;margin-top:60px}"] });
|
|
285
|
-
}
|
|
286
|
-
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MenuComponent, [{
|
|
287
|
-
type: Component,
|
|
288
|
-
args: [{ selector: 'lib-menu', template: "\r\n<div class=\"example-container\">\r\n\r\n <nav class=\"nav-header\">\r\n <ul class=\"nav\"> \r\n <li class=\"nav-time\"> \r\n <a>\r\n <i class=\"fa fa-bars\" style=\"font-size:24px\"></i>\r\n </a>\r\n <ul>\r\n <div *ngFor=\"let parent of MenuData\">\r\n <li *ngIf=\"parent.children && parent.children.length > 0\">\r\n <a class=\"item\"> {{parent.displaytext}}</a>\r\n <ul>\r\n <li *ngFor=\"let child of parent.children\">\r\n <a (click)=\"listItemClick(child)\">{{child.displaytext}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"!parent.children || parent.children.length === 0\">\r\n <a (click)=\"listItemClick(parent)\">{{parent.displaytext}}</a>\r\n </li>\r\n </div>\r\n <li> \r\n <a (click)=\"onLogOut()\">Logout</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li class=\"nav-item\">\r\n <h5 style=\"padding-top:12px;\"> {{tooltext}}</h5>\r\n </li>\r\n </ul>\r\n </nav>\r\n <div *ngIf=\"IsPermissionExists==false\">User Does't have permission to access any of Excel applications</div>\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"navigateMsg\" *ngIf=\"navigateMsg\">\r\n {{navigateMsg}}\r\n </div>\r\n <section class=\"loade\" *ngIf=\"isLoading\">\r\n <mat-spinner color=\"black\" [diameter]=60 ></mat-spinner>\r\n <span>\r\n Loading...\r\n </span>\r\n </section>\r\n ", styles: [".item{cursor:not-allowed!important}nav{display:block;text-align:left}nav ul{margin:0;padding:0;list-style:none}.nav a{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav{vertical-align:top;display:inline-block;border-radius:6px}.nav li{position:relative}.item:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav>li{float:left;margin-right:1px}.nav>li>a{margin-bottom:1px;color:#fff;cursor:pointer}.nav li:hover>a{background:rgba(0,0,0,.04)}.nav>li:first-child{border-radius:4px 0 0 4px}.nav>li:first-child>a{border-radius:4px 0 0}.nav>li:last-child{border-radius:0 0 4px;margin-right:0}.nav>li:last-child>a{border-radius:0 4px 0 0}.nav li li a{margin-top:1px}.nav li a:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav ul{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav>li:hover>ul{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li li ul{border-left:1px solid #fff}.nav>li li:hover>ul{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li>a:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav>li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav li li>a:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav li li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header{background:#779cf1;width:100%}.nav-header>.nav>.nav-item{color:#fff}.nav-header>.nav>.nav-item a{color:#fff}.loade{background:rgba(255,255,255,.5);width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission{padding:10px;color:red}.navigateMsg{text-align:center;margin-top:60px}\n"] }]
|
|
289
|
-
}], function () { return [{ type: undefined, decorators: [{
|
|
290
|
-
type: Inject,
|
|
291
|
-
args: ['config']
|
|
292
|
-
}] }, { type: i1.AuthService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i0.Injector }, { type: i3.BaseAppService }]; }, null); })();
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWxrLXRvb2wvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnVsay10b29sL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFFBQVEsRUFBQyxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFnQixNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7Ozs7O0lDVzNCLDBCQUEyQyxXQUFBO0lBQ3BDLDZOQUFTLGVBQUEsOEJBQW9CLENBQUEsSUFBQztJQUFDLFlBQXFCO0lBQUEsaUJBQUksRUFBQTs7O0lBQXpCLGVBQXFCO0lBQXJCLDBDQUFxQjs7O0lBSm5FLDBCQUEyRCxZQUFBO0lBQ3RDLFlBQXNCO0lBQUEsaUJBQUk7SUFDM0MsMEJBQUk7SUFDQSx1RUFFSztJQUNWLGlCQUFLLEVBQUE7OztJQUxhLGVBQXNCO0lBQXRCLHFEQUFzQjtJQUVaLGVBQWtCO0lBQWxCLDRDQUFrQjs7OztJQUtuRCwwQkFBNkQsV0FBQTtJQUN0RCw0TUFBUyxlQUFBLGdDQUFxQixDQUFBLElBQUM7SUFBQyxZQUFzQjtJQUFBLGlCQUFJLEVBQUE7OztJQUExQixlQUFzQjtJQUF0QiwyQ0FBc0I7OztJQVYvRCwyQkFBcUM7SUFDakMsa0VBT0s7SUFDUCxrRUFFUTtJQUNSLGlCQUFNOzs7SUFYRSxlQUFtRDtJQUFuRCwwRUFBbUQ7SUFRdEQsZUFBc0Q7SUFBdEQsNkVBQXNEOzs7SUFjdkUsMkJBQXVDO0lBQUEsK0VBQStEO0lBQUEsaUJBQU07OztJQUc1RywrQkFBNkM7SUFDN0MsWUFDQTtJQUFBLGlCQUFNOzs7SUFETixlQUNBO0lBREEsbURBQ0E7OztJQUNBLG1DQUF5QztJQUNyQyxrQ0FBd0Q7SUFDeEQsNEJBQU07SUFDUiw0QkFDQTtJQUFBLGlCQUFPLEVBQUE7O0lBSHNCLGVBQWE7SUFBYiw2QkFBYTs7QURqQmhELE1BQU0sT0FBTyxhQUFhO0lBa0JjO0lBQWtDO0lBQTRDO0lBQzFHO0lBQXVCO0lBQTRCO0lBakJ0RCxLQUFLLENBQU07SUFDWCxRQUFRLEdBQVcsTUFBTSxDQUFDO0lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDYixRQUFRLEdBQVEsTUFBTSxDQUFBO0lBQ3RCLFFBQVEsQ0FBUztJQUNqQixTQUFTLENBQVM7SUFDbEIsU0FBUyxHQUFZLEtBQUssQ0FBQztJQUMzQixRQUFRLENBQU07SUFDZCxtQkFBbUIsQ0FBUztJQUM1QixrQkFBa0IsR0FBWSxJQUFJLENBQUM7SUFDbkMsUUFBUSxHQUFhLEVBQUUsQ0FBQztJQUN4QixRQUFRLENBQVE7SUFDaEIsT0FBTyxDQUFTO0lBQ2hCLGFBQWEsQ0FBTTtJQUNuQixXQUFXLENBQVM7SUFDcEIsTUFBTSxDQUFNO0lBQ25CLFlBQXNDLE1BQXlCLEVBQVMscUJBQWtDLEVBQVUsS0FBcUIsRUFDL0gsTUFBYyxFQUFTLFFBQWtCLEVBQVUsY0FBOEI7UUFEckQsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFBUywwQkFBcUIsR0FBckIscUJBQXFCLENBQWE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUMvSCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUN6RixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBRSxrRUFBa0U7UUFDbEcsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUcsa0VBQWtFO1FBQ3ZHLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBa0MsbUNBQW1DO1lBQ3ZGLElBQUksV0FBVyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUNELFFBQVE7UUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRXJCLENBQUM7SUFDTSxXQUFXO1FBQ2hCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNqQixJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixFQUFFLENBQUE7b0JBQ2hFLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7d0JBQ3ZCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQSxDQUFDLDZDQUE2Qzt3QkFDakgsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFOzRCQUM3QixJQUFJLFdBQVcsRUFBRTtnQ0FDZixJQUFJLFdBQVcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQ0FDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUNBQ2xFO3FDQUNJO29DQUNILElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTt3Q0FDbEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFBO3FDQUN0Qzt5Q0FDSTt3Q0FDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0NBQzdFLE9BQU87cUNBQ1I7aUNBQ0Y7NkJBQ0Y7aUNBQ0k7Z0NBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrREFBa0QsQ0FBQyxDQUFBO2dDQUMvRCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscURBQXFEOzZCQUNwRzt5QkFDRjtxQkFDRjt5QkFDSTt3QkFDSCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO3dCQUN2RSxJQUFJLElBQUksRUFBRTs0QkFDUixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQ0FDbkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQTtnQ0FDMUIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzs2QkFDMUY7aUNBQ0k7Z0NBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO2dDQUM3QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBOzZCQUNyRjt5QkFDRjs2QkFDSTs0QkFDSCxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUM5QztxQkFDRjtpQkFDRjtxQkFDSTtvQkFDSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDLENBQUMsNEVBQTRFO2lCQUM5RztnQkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUdELG1CQUFtQixDQUFDLFdBQVc7UUFDN0IsWUFBWSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNyQyxJQUFJLFlBQVksR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3BGLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQzFDLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckUsT0FBTztTQUNSO2FBQ0k7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsRTtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsSUFBSTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxFQUFFO2dCQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtvQkFDM0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDdkU7cUJBQ0k7b0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFBO29CQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztvQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7aUJBQzNEO2FBQ0Y7aUJBQ0k7Z0JBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUE7Z0JBQy9DLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMzRDtTQUNGO2FBQ0k7WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDakM7SUFDSCxDQUFDO0lBQ0QscUJBQXFCLENBQUMsSUFBSTtRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUE7UUFDN0QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQTtRQUMvQixPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ25ELElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLEVBQUU7WUFDMUIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0MsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDOUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEMsT0FBTztJQUNULENBQUM7SUFDRCxXQUFXLENBQUMsR0FBVztRQUNyQixJQUFJLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksWUFBWSxFQUFFO1lBQ2hCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRTtvQkFDekIsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO2lCQUNsQztnQkFDRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7MEZBcEtVLGFBQWEsdUJBa0JKLFFBQVE7NEZBbEJqQixhQUFhO1lDdEIxQiw4QkFBK0IsYUFBQSxZQUFBLFlBQUEsUUFBQTtZQU1iLHVCQUFpRDtZQUNyRCxpQkFBSTtZQUNSLDBCQUFJO1lBQ0EsOERBWVE7WUFDUCwwQkFBSSxXQUFBO1lBQ0MscUZBQVMsY0FBVSxJQUFDO1lBQUMsdUJBQU07WUFBQSxpQkFBSSxFQUFBLEVBQUEsRUFBQTtZQUkzQyw4QkFBcUIsYUFBQTtZQUNhLGFBQVk7WUFBQSxpQkFBSyxFQUFBLEVBQUEsRUFBQTtZQUl2RCxnRUFBNEc7WUFDeEcsaUNBQStCO1lBQ25DLGlCQUFNO1lBQ04saUVBRU07WUFDTix5RUFLWTs7WUFsQ3NCLGVBQVc7WUFBWCxzQ0FBVztZQW1CUCxlQUFZO1lBQVosNENBQVk7WUFJNUMsZUFBK0I7WUFBL0Isc0RBQStCO1lBR1gsZUFBaUI7WUFBakIsc0NBQWlCO1lBR25CLGVBQWU7WUFBZixvQ0FBZTs7O3VGRGhCOUIsYUFBYTtjQUx6QixTQUFTOzJCQUNFLFVBQVU7O3NCQXNCUCxNQUFNO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbmplY3RhYmxlLCBJbmplY3RvcixJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCYXNlQXBwU2VydmljZSB9IGZyb20gJy4uL2Jhc2UtYXBwLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lFbnZpcm9ubWVudHNJbmZvIH0gZnJvbSAnLi4vLi4vbGliL2Vudmlyb25tZW50c01vZGVsLmluZm8nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNZW51IHtcclxuICBkaXNwbGF5dGV4dDogc3RyaW5nO1xyXG4gIGRpc3BsYXlvcmRlcjogbnVtYmVyO1xyXG4gIG1lbnVJZDogbnVtYmVyO1xyXG4gIG1lbnVsZXZlbDogbnVtYmVyO1xyXG4gIHBhcmVudE1lbnVJZDogbnVtYmVyO1xyXG4gIHRhcmdldEFjdGlvbjogc3RyaW5nO1xyXG4gIHRhcmdldFNlcnZlcjogc3RyaW5nO1xyXG4gIHBhcmVudE1lbnVOYW1lOiBzdHJpbmc7XHJcbiAgY2hpbGRyZW46IGFueVtdXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9tZW51LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIHB1YmxpYyBhc3luYzogYW55O1xyXG4gIHB1YmxpYyBNZW51TW9kZTogc3RyaW5nID0gXCJvdmVyXCI7XHJcbiAgcHVibGljIG1lc3NhZ2UgPSAnJztcclxuICBwdWJsaWMgdG9vbHRleHQ6IGFueSA9IFwiQ0JNU1wiXHJcbiAgcHVibGljIG1lbnVOYW1lOiBzdHJpbmc7XHJcbiAgcHVibGljIGNoaWxkTWVudTogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdXNlckluZm86IGFueTtcclxuICBwdWJsaWMgbW9kdWxlTmFtZUZyb21FeGNlbDogc3RyaW5nO1xyXG4gIHB1YmxpYyBJc1Blcm1pc3Npb25FeGlzdHM6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBtZXNzYWdlczogc3RyaW5nW10gPSBbXTtcclxuICBwdWJsaWMgTWVudURhdGE6IE1lbnVbXVxyXG4gIHB1YmxpYyBSb290VXJsOiBzdHJpbmc7XHJcbiAgcHVibGljIG1lbnVGcm9tRXhjZWw6IGFueTtcclxuICBwdWJsaWMgbmF2aWdhdGVNc2c6IHN0cmluZztcclxuICBwdWJsaWMgcmVzdWx0OiBhbnk7XHJcbiAgY29uc3RydWN0b3IoQEluamVjdCgnY29uZmlnJykgcHJpdmF0ZSBjb25maWc6IElFbnZpcm9ubWVudHNJbmZvLHByaXZhdGUgYXV0aGVudGljYXRpb25TZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLCBwcml2YXRlIGJhc2VBcHBTZXJ2aWNlOiBCYXNlQXBwU2VydmljZSkge1xyXG4gICAgdGhpcy5Sb290VXJsID0gY29uZmlnLnJvb3RVcmw7ICAvL2dldHRpbmcgZnJvbSBlbnZpcm9ubWVudCBmaWxlIGZyb20gYXBwbGljYXRpb24gYWNjZXNzaW5nIEJhc2VBcHBcclxuICAgIHRoaXMubWVudU5hbWUgPSBjb25maWcubW9kdWxlTmFtZTsgICAvL2dldHRpbmcgZnJvbSBlbnZpcm9ubWVudCBmaWxlIGZyb20gYXBwbGljYXRpb24gYWNjZXNzaW5nIEJhc2VBcHBcclxuICAgIHRoaXMudXNlckluZm8gPSB0aGlzLmJhc2VBcHBTZXJ2aWNlLmdldFVzZXJJbmZvKCk7XHJcbiAgICB0aGlzLmNoaWxkTWVudSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiY2hpbGRNZW51XCIpXHJcbiAgICBpZiAoIXRoaXMudXNlckluZm8pIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2luY2FzZSBnZXRVc2VySW5mbyBzZXJ2aWNlIGZhaWxzLlxyXG4gICAgICBsZXQgdXNlckRldGFpbHMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlVzZXJJbmZvXCIpO1xyXG4gICAgICB0aGlzLnVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VyRGV0YWlscyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJVcmwgY2FtZSBiYXNlIGZyb20gYXBwbGljYXRpb24gLVwiLCB3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLkdldENCTVNNZW51KCk7XHJcblxyXG4gIH1cclxuICBwdWJsaWMgR2V0Q0JNU01lbnUoKSB7XHJcbiAgICBpZiAodGhpcy51c2VySW5mbykge1xyXG4gICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5HZXRNZW51KHRoaXMudXNlckluZm8udXNlckluZm9JZCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgIHRoaXMuTWVudURhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuTWVudURhdGEpIHtcclxuICAgICAgICAgIHRoaXMubWVudUZyb21FeGNlbCA9IHRoaXMuYmFzZUFwcFNlcnZpY2UuZ2V0bWVudU5hbWVGcm9tQnVkZ2V0KClcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiTWVudUZyb21FeGNlbFwiLCB0aGlzLm1lbnVGcm9tRXhjZWwpO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLm1lbnVGcm9tRXhjZWwpIHtcclxuICAgICAgICAgICAgbGV0IEN1cnJlbnRNZW51ID0gZGF0YS5maW5kKGUgPT4gZS5wYXJlbnRNZW51TmFtZSA9PSB0aGlzLm1lbnVOYW1lKSAvL0ZpbmRpbmcgV2hpY2ggYXBwbGljYXRpb24gQWNjZXNzaW5nIEJhc2VBcHBcclxuICAgICAgICAgICAgdGhpcy50b29sdGV4dCA9IEN1cnJlbnRNZW51ID8gQ3VycmVudE1lbnUucGFyZW50TWVudU5hbWUgOiBcIkNCTVNcIjtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJJc2Rvd25sb2FkXCIsIHRoaXMudXNlckluZm8uaXNEb3dubG9hZCk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy51c2VySW5mby5pc0Rvd25sb2FkKSB7XHJcbiAgICAgICAgICAgICAgaWYgKEN1cnJlbnRNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoQ3VycmVudE1lbnUuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW0N1cnJlbnRNZW51LnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVsxXV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNoaWxkTWVudSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0NoaWxkTWVudShDdXJyZW50TWVudSlcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ3VycmVudE1lbnUuY2hpbGRyZW5bMF0udGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJSZWRpcmVjdGluZyB0byB0aGUgRmlyc3QgYXBwbGljYXRpb24gaW4gbWVudSBUYWJcIilcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0Fub3RoZXJNZW51KHRoaXMuTWVudURhdGFbMF0pOyAvLyBSZWRpcmVjdGluZyB0byB0aGUgRmlyc3QgYXBwbGljYXRpb24gaW4gbWVudSBUYWIgIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBtZW51ID0gdGhpcy5NZW51RGF0YS5maW5kKGUgPT4gZS5kaXNwbGF5dGV4dCA9PSB0aGlzLm1lbnVGcm9tRXhjZWwpXHJcbiAgICAgICAgICAgIGlmIChtZW51KSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmNoaWxkTWVudSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJub0NoaWxkTWVudVwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUodGhpcy5NZW51RGF0YS5maW5kKGUgPT4gZS5kaXNwbGF5dGV4dCA9PSB0aGlzLm1lbnVGcm9tRXhjZWwpKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNoaWxkTWVudVRoZXJlXCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9DaGlsZE1lbnUodGhpcy5NZW51RGF0YS5maW5kKGUgPT4gZS5wYXJlbnRNZW51TmFtZSA9PSB0aGlzLm1lbnVOYW1lKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUodGhpcy5NZW51RGF0YVswXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLklzUGVybWlzc2lvbkV4aXN0cyA9IGZhbHNlOyAvL05vdGlmaW5nIFVzZXIgdGhhdCBoZSBvciBzaGUgZG9lZG5vdCBoYXZlIHBlcm1pc3Npb24gaWYgbWVudURhdGEgaXMgZW1wdHkuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5hdmlnYXRlVG9DaGlsZE1lbnUoQ3VycmVudE1lbnUpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwiY2hpbGRNZW51XCIpO1xyXG4gICAgbGV0IGNoaWxkcmVuTWVudSA9IEN1cnJlbnRNZW51LmNoaWxkcmVuLmZpbHRlcihlID0+IGUuZGlzcGxheXRleHQgPT0gdGhpcy5jaGlsZE1lbnUpXHJcbiAgICBjb25zb2xlLmxvZyhcImNoaWxkcmVuTWVudVwiLCBjaGlsZHJlbk1lbnUpO1xyXG4gICAgaWYgKGNoaWxkcmVuTWVudS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtjaGlsZHJlbk1lbnVbMF0udGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ3VycmVudE1lbnUudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsaXN0SXRlbUNsaWNrKGxpbmspIHtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmIChsaW5rLnBhcmVudE1lbnVOYW1lID09IHRoaXMubWVudU5hbWUpIHtcclxuICAgICAgaWYgKGxpbmsucGFyZW50TWVudUlkID09IDApIHtcclxuICAgICAgICBpZiAobGluay5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpb25VcmxcIiwgbGluay5jaGlsZHJlblswXS50YXJnZXRBY3Rpb24pXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpbmsuY2hpbGRyZW5bMF0udGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJuYXZpZ2F0aW9uVXJsXCIsIGxpbmsudGFyZ2V0QWN0aW9uKVxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaW5rLnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVsxXV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImNoaWxkTWVudVwiLCBsaW5rLmRpc3BsYXl0ZXh0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpb25VcmxcIiwgbGluay50YXJnZXRBY3Rpb24pXHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGluay50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMubmF2aWdhdGVUb0Fub3RoZXJNZW51KGxpbmspXHJcbiAgICB9XHJcbiAgfVxyXG4gIG5hdmlnYXRlVG9Bbm90aGVyTWVudShsaW5rKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRlTXNnID0gXCIuLi5SZWRpcmVjdGluZyB0byBcIiArIGxpbmsucGFyZW50TWVudU5hbWVcclxuICAgIGxldCBuYXZMaW5rID0gbGluay50YXJnZXRBY3Rpb25cclxuICAgIG5hdkxpbmsgPSBsaW5rLnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVswXSArIFwiYXBwXCJcclxuICAgIGlmIChsaW5rLnBhcmVudE1lbnVJZCAhPSAwKSB7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiY2hpbGRNZW51XCIsIGxpbmsuZGlzcGxheXRleHQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiSXNOYXZpZ2F0ZVwiLCBcInRydWVcIik7XHJcbiAgICBsZXQgbmF2aWdhdGVVcmwgPSB0aGlzLm5hdmlnYXRlVXJsKG5hdkxpbmspXHJcbiAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpbmcgdG9cIiwgbGluay5kaXNwbGF5dGV4dClcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24obmF2aWdhdGVVcmwpO1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuICBuYXZpZ2F0ZVVybChVcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHJlcGxhY2VtZW50cyA9IFVybC5tYXRjaCgvXFx7Lio/XFx9L2cpO1xyXG4gICAgbGV0IHZhbHVlID0gXCJcIjtcclxuICAgIGlmIChyZXBsYWNlbWVudHMpIHtcclxuICAgICAgcmVwbGFjZW1lbnRzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgPT0gXCJ7dXNlcklkfVwiKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudXNlckluZm8udXNlckluZm9JZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgVXJsID0gVXJsLnJlcGxhY2UoZWxlbWVudCwgdmFsdWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLlJvb3RVcmwgKyBVcmw7XHJcbiAgfVxyXG4gIG9uTG9nT3V0KCkge1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbG9naW5cIl0pO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJleGFtcGxlLWNvbnRhaW5lclwiPlxyXG5cclxuICAgIDxuYXYgY2xhc3M9XCJuYXYtaGVhZGVyXCI+XHJcbiAgICAgICAgPHVsIGNsYXNzPVwibmF2XCI+ICAgICBcclxuICAgICAgICAgIDxsaSBjbGFzcz1cIm5hdi10aW1lXCI+IFxyXG4gICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWJhcnNcIiBzdHlsZT1cImZvbnQtc2l6ZToyNHB4XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYXJlbnQgb2YgTWVudURhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgPGxpICAqbmdJZj1cInBhcmVudC5jaGlsZHJlbiAmJiBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJpdGVtXCI+IHt7cGFyZW50LmRpc3BsYXl0ZXh0fX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgcGFyZW50LmNoaWxkcmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIChjbGljayk9XCJsaXN0SXRlbUNsaWNrKGNoaWxkKVwiPnt7Y2hpbGQuZGlzcGxheXRleHR9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpICpuZ0lmPVwiIXBhcmVudC5jaGlsZHJlbiB8fCBwYXJlbnQuY2hpbGRyZW4ubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImxpc3RJdGVtQ2xpY2socGFyZW50KVwiPnt7cGFyZW50LmRpc3BsYXl0ZXh0fX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgIDxsaT4gXHJcbiAgICAgICAgICAgICAgICA8YSAgKGNsaWNrKT1cIm9uTG9nT3V0KClcIj5Mb2dvdXQ8L2E+XHJcbiAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICAgICAgPGxpIGNsYXNzPVwibmF2LWl0ZW1cIj5cclxuICAgICAgICAgICA8aDUgc3R5bGU9XCJwYWRkaW5nLXRvcDoxMnB4O1wiPiB7e3Rvb2x0ZXh0fX08L2g1PlxyXG4gICAgICAgIDwvbGk+XHJcbiAgICA8L3VsPlxyXG4gICAgPC9uYXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiSXNQZXJtaXNzaW9uRXhpc3RzPT1mYWxzZVwiPlVzZXIgRG9lcyd0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgYW55IG9mIEV4Y2VsIGFwcGxpY2F0aW9uczwvZGl2PlxyXG4gICAgICAgIDxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cIm5hdmlnYXRlTXNnXCIgKm5nSWY9XCJuYXZpZ2F0ZU1zZ1wiPlxyXG4gICAge3tuYXZpZ2F0ZU1zZ319XHJcbiAgICA8L2Rpdj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwibG9hZGVcIiAqbmdJZj1cImlzTG9hZGluZ1wiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciBjb2xvcj1cImJsYWNrXCIgW2RpYW1ldGVyXT02MCA+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8c3Bhbj5cclxuICAgICAgTG9hZGluZy4uLlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuICAgICJdfQ==
|
|
1
|
+
import { Component, Injector } from '@angular/core';
|
|
2
|
+
import { AuthService } from '../auth.service';
|
|
3
|
+
import { Router, ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { BaseAppService } from '../base-app.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../auth.service";
|
|
7
|
+
import * as i2 from "@angular/router";
|
|
8
|
+
import * as i3 from "../base-app.service";
|
|
9
|
+
import * as i4 from "@angular/material/progress-spinner";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
export class MenuComponent {
|
|
12
|
+
authenticationService;
|
|
13
|
+
route;
|
|
14
|
+
router;
|
|
15
|
+
injector;
|
|
16
|
+
baseAppService;
|
|
17
|
+
async;
|
|
18
|
+
MenuMode = "over";
|
|
19
|
+
message = '';
|
|
20
|
+
tooltext = "CBMS";
|
|
21
|
+
menuName;
|
|
22
|
+
childMenu;
|
|
23
|
+
isLoading = false;
|
|
24
|
+
userInfo;
|
|
25
|
+
moduleNameFromExcel;
|
|
26
|
+
IsPermissionExists = true;
|
|
27
|
+
messages = [];
|
|
28
|
+
MenuData;
|
|
29
|
+
RootUrl;
|
|
30
|
+
menuFromExcel;
|
|
31
|
+
navigateMsg;
|
|
32
|
+
result;
|
|
33
|
+
constructor(authenticationService, route, router, injector, baseAppService) {
|
|
34
|
+
this.authenticationService = authenticationService;
|
|
35
|
+
this.route = route;
|
|
36
|
+
this.router = router;
|
|
37
|
+
this.injector = injector;
|
|
38
|
+
this.baseAppService = baseAppService;
|
|
39
|
+
this.RootUrl = this.injector.get("config").rootUrl; //getting from environment file from application accessing BaseApp
|
|
40
|
+
this.menuName = this.injector.get("config").moduleName; //getting from environment file from application accessing BaseApp
|
|
41
|
+
this.userInfo = this.baseAppService.getUserInfo();
|
|
42
|
+
this.childMenu = localStorage.getItem("childMenu");
|
|
43
|
+
if (!this.userInfo) { //incase getUserInfo service fails.
|
|
44
|
+
let userDetails = localStorage.getItem("UserInfo");
|
|
45
|
+
this.userInfo = JSON.parse(userDetails);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
ngOnInit() {
|
|
49
|
+
console.log("Url came base from application -", window.location.href);
|
|
50
|
+
this.isLoading = true;
|
|
51
|
+
this.GetCBMSMenu();
|
|
52
|
+
}
|
|
53
|
+
GetCBMSMenu() {
|
|
54
|
+
if (this.userInfo) {
|
|
55
|
+
this.authenticationService.GetMenu(this.userInfo.userInfoId).subscribe(data => {
|
|
56
|
+
this.MenuData = data;
|
|
57
|
+
this.isLoading = false;
|
|
58
|
+
if (this.MenuData) {
|
|
59
|
+
this.menuFromExcel = this.baseAppService.getmenuNameFromBudget();
|
|
60
|
+
console.log("MenuFromExcel", this.menuFromExcel);
|
|
61
|
+
if (!this.menuFromExcel) {
|
|
62
|
+
let CurrentMenu = data.find(e => e.parentMenuName == this.menuName); //Finding Which application Accessing BaseApp
|
|
63
|
+
this.tooltext = CurrentMenu ? CurrentMenu.parentMenuName : "CBMS";
|
|
64
|
+
console.log("Isdownload", this.userInfo.isDownload);
|
|
65
|
+
if (!this.userInfo.isDownload) {
|
|
66
|
+
if (CurrentMenu) {
|
|
67
|
+
if (CurrentMenu.children.length == 0) {
|
|
68
|
+
this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
if (this.childMenu) {
|
|
72
|
+
this.navigateToChildMenu(CurrentMenu);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
this.router.navigate([CurrentMenu.children[0].targetAction.split("app")[1]]);
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.log("Redirecting to the First application in menu Tab");
|
|
82
|
+
this.navigateToAnotherMenu(this.MenuData[0]); // Redirecting to the First application in menu Tab
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
let menu = this.MenuData.find(e => e.displaytext == this.menuFromExcel);
|
|
88
|
+
if (menu) {
|
|
89
|
+
if (!this.childMenu) {
|
|
90
|
+
console.log("noChildMenu");
|
|
91
|
+
this.navigateToAnotherMenu(this.MenuData.find(e => e.displaytext == this.menuFromExcel));
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
console.log("childMenuThere");
|
|
95
|
+
this.navigateToChildMenu(this.MenuData.find(e => e.parentMenuName == this.menuName));
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
this.navigateToAnotherMenu(this.MenuData[0]);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.IsPermissionExists = false; //Notifing User that he or she doednot have permission if menuData is empty.
|
|
105
|
+
}
|
|
106
|
+
this.isLoading = false;
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
navigateToChildMenu(CurrentMenu) {
|
|
111
|
+
localStorage.removeItem("childMenu");
|
|
112
|
+
let childrenMenu = CurrentMenu.children.filter(e => e.displaytext == this.childMenu);
|
|
113
|
+
console.log("childrenMenu", childrenMenu);
|
|
114
|
+
if (childrenMenu.length > 0) {
|
|
115
|
+
this.router.navigate([childrenMenu[0].targetAction.split("app")[1]]);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
this.router.navigate([CurrentMenu.targetAction.split("app")[1]]);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
listItemClick(link) {
|
|
123
|
+
this.isLoading = true;
|
|
124
|
+
if (link.parentMenuName == this.menuName) {
|
|
125
|
+
if (link.parentMenuId == 0) {
|
|
126
|
+
if (link.children.length > 0) {
|
|
127
|
+
console.log("navigationUrl", link.children[0].targetAction);
|
|
128
|
+
this.isLoading = false;
|
|
129
|
+
this.router.navigate([link.children[0].targetAction.split("app")[1]]);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
console.log("navigationUrl", link.targetAction);
|
|
133
|
+
this.isLoading = false;
|
|
134
|
+
this.router.navigate([link.targetAction.split("app")[1]]);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
localStorage.setItem("childMenu", link.displaytext);
|
|
139
|
+
console.log("navigationUrl", link.targetAction);
|
|
140
|
+
this.isLoading = false;
|
|
141
|
+
this.router.navigate([link.targetAction.split("app")[1]]);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
this.isLoading = false;
|
|
146
|
+
this.navigateToAnotherMenu(link);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
navigateToAnotherMenu(link) {
|
|
150
|
+
this.navigateMsg = "...Redirecting to " + link.parentMenuName;
|
|
151
|
+
let navLink = link.targetAction;
|
|
152
|
+
navLink = link.targetAction.split("app")[0] + "app";
|
|
153
|
+
if (link.parentMenuId != 0) {
|
|
154
|
+
localStorage.setItem("childMenu", link.displaytext);
|
|
155
|
+
}
|
|
156
|
+
this.isLoading = false;
|
|
157
|
+
localStorage.setItem("IsNavigate", "true");
|
|
158
|
+
let navigateUrl = this.navigateUrl(navLink);
|
|
159
|
+
console.log("navigating to", link.displaytext);
|
|
160
|
+
window.location.assign(navigateUrl);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
navigateUrl(Url) {
|
|
164
|
+
let replacements = Url.match(/\{.*?\}/g);
|
|
165
|
+
let value = "";
|
|
166
|
+
if (replacements) {
|
|
167
|
+
replacements.forEach(element => {
|
|
168
|
+
if (element == "{userId}") {
|
|
169
|
+
value = this.userInfo.userInfoId;
|
|
170
|
+
}
|
|
171
|
+
Url = Url.replace(element, value);
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
return this.RootUrl + Url;
|
|
175
|
+
}
|
|
176
|
+
onLogOut() {
|
|
177
|
+
this.authenticationService.logout();
|
|
178
|
+
this.router.navigate(["/login"]);
|
|
179
|
+
}
|
|
180
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuComponent, deps: [{ token: i1.AuthService }, { token: i2.ActivatedRoute }, { token: i2.Router }, { token: i0.Injector }, { token: i3.BaseAppService }], target: i0.ɵɵFactoryTarget.Component });
|
|
181
|
+
/** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: MenuComponent, selector: "lib-menu", ngImport: i0, template: "\r\n<div class=\"example-container\">\r\n\r\n <nav class=\"nav-header\">\r\n <ul class=\"nav\"> \r\n <li class=\"nav-time\"> \r\n <a>\r\n <i class=\"fa fa-bars\" style=\"font-size:24px\"></i>\r\n </a>\r\n <ul>\r\n <div *ngFor=\"let parent of MenuData\">\r\n <li *ngIf=\"parent.children && parent.children.length > 0\">\r\n <a class=\"item\"> {{parent.displaytext}}</a>\r\n <ul>\r\n <li *ngFor=\"let child of parent.children\">\r\n <a (click)=\"listItemClick(child)\">{{child.displaytext}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"!parent.children || parent.children.length === 0\">\r\n <a (click)=\"listItemClick(parent)\">{{parent.displaytext}}</a>\r\n </li>\r\n </div>\r\n <li> \r\n <a (click)=\"onLogOut()\">Logout</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li class=\"nav-item\">\r\n <h5 style=\"padding-top:12px;\"> {{tooltext}}</h5>\r\n </li>\r\n </ul>\r\n </nav>\r\n <div *ngIf=\"IsPermissionExists==false\">User Does't have permission to access any of Excel applications</div>\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"navigateMsg\" *ngIf=\"navigateMsg\">\r\n {{navigateMsg}}\r\n </div>\r\n <section class=\"loade\" *ngIf=\"isLoading\">\r\n <mat-spinner color=\"black\" [diameter]=60 ></mat-spinner>\r\n <span>\r\n Loading...\r\n </span>\r\n </section>\r\n ", styles: [".item{cursor:not-allowed!important}nav{display:block;text-align:left}nav ul{margin:0;padding:0;list-style:none}.nav a{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav{vertical-align:top;display:inline-block;border-radius:6px}.nav li{position:relative}.item:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav>li{float:left;margin-right:1px}.nav>li>a{margin-bottom:1px;color:#fff;cursor:pointer}.nav li:hover>a{background:#0000000a}.nav>li:first-child{border-radius:4px 0 0 4px}.nav>li:first-child>a{border-radius:4px 0 0}.nav>li:last-child{border-radius:0 0 4px;margin-right:0}.nav>li:last-child>a{border-radius:0 4px 0 0}.nav li li a{margin-top:1px}.nav li a:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav ul{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav>li:hover>ul{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li li ul{border-left:1px solid #fff}.nav>li li:hover>ul{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li>a:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav>li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav li li>a:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav li li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header{background:#779cf1;width:100%}.nav-header>.nav>.nav-item{color:#fff}.nav-header>.nav>.nav-item a{color:#fff}.loade{background:#ffffff80;width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission{padding:10px;color:red}.navigateMsg{text-align:center;margin-top:60px}\n"], dependencies: [{ kind: "component", type: i4.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] });
|
|
182
|
+
}
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MenuComponent, decorators: [{
|
|
184
|
+
type: Component,
|
|
185
|
+
args: [{ selector: 'lib-menu', template: "\r\n<div class=\"example-container\">\r\n\r\n <nav class=\"nav-header\">\r\n <ul class=\"nav\"> \r\n <li class=\"nav-time\"> \r\n <a>\r\n <i class=\"fa fa-bars\" style=\"font-size:24px\"></i>\r\n </a>\r\n <ul>\r\n <div *ngFor=\"let parent of MenuData\">\r\n <li *ngIf=\"parent.children && parent.children.length > 0\">\r\n <a class=\"item\"> {{parent.displaytext}}</a>\r\n <ul>\r\n <li *ngFor=\"let child of parent.children\">\r\n <a (click)=\"listItemClick(child)\">{{child.displaytext}}</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li *ngIf=\"!parent.children || parent.children.length === 0\">\r\n <a (click)=\"listItemClick(parent)\">{{parent.displaytext}}</a>\r\n </li>\r\n </div>\r\n <li> \r\n <a (click)=\"onLogOut()\">Logout</a>\r\n </li>\r\n </ul>\r\n </li>\r\n <li class=\"nav-item\">\r\n <h5 style=\"padding-top:12px;\"> {{tooltext}}</h5>\r\n </li>\r\n </ul>\r\n </nav>\r\n <div *ngIf=\"IsPermissionExists==false\">User Does't have permission to access any of Excel applications</div>\r\n <router-outlet></router-outlet>\r\n </div>\r\n <div class=\"navigateMsg\" *ngIf=\"navigateMsg\">\r\n {{navigateMsg}}\r\n </div>\r\n <section class=\"loade\" *ngIf=\"isLoading\">\r\n <mat-spinner color=\"black\" [diameter]=60 ></mat-spinner>\r\n <span>\r\n Loading...\r\n </span>\r\n </section>\r\n ", styles: [".item{cursor:not-allowed!important}nav{display:block;text-align:left}nav ul{margin:0;padding:0;list-style:none}.nav a{display:block;cursor:pointer;color:#000;text-decoration:none;padding:.8em 1.8em;text-transform:none;font-size:80%;letter-spacing:1px;position:relative;font-family:Roboto,Helvetica Neue,sans-serif!important}.nav{vertical-align:top;display:inline-block;border-radius:6px}.nav li{position:relative}.item:before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px;border:5px solid transparent;border-left-color:#000}.nav>li{float:left;margin-right:1px}.nav>li>a{margin-bottom:1px;color:#fff;cursor:pointer}.nav li:hover>a{background:#0000000a}.nav>li:first-child{border-radius:4px 0 0 4px}.nav>li:first-child>a{border-radius:4px 0 0}.nav>li:last-child{border-radius:0 0 4px;margin-right:0}.nav>li:last-child>a{border-radius:0 4px 0 0}.nav li li a{margin-top:1px}.nav li a:first-child:nth-last-child(2):before{content:\"\";position:absolute;height:0;width:0;top:50%;right:5px}.nav ul{position:absolute;white-space:nowrap;background-color:#fff;z-index:11111;left:-99999em}.nav>li:hover>ul{left:auto;padding-top:5px;min-width:100%;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li li ul{border-left:1px solid #fff}.nav>li li:hover>ul{left:100%;top:-1px;z-index:1;box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.nav>li>a:first-child:nth-last-child(2):before{border-top-color:#aaa}.nav>li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;margin-top:-5px}.nav li li>a:first-child:nth-last-child(2):before{border-left-color:#aaa;margin-top:-5px}.nav li li:hover>a:first-child:nth-last-child(2):before{border:5px solid transparent;border-right-color:#2f2c2c;right:10px}.nav-header{background:#779cf1;width:100%}.nav-header>.nav>.nav-item{color:#fff}.nav-header>.nav>.nav-item a{color:#fff}.loade{background:#ffffff80;width:100%;height:100%;overflow:hidden;position:absolute;z-index:1;opacity:50;top:0;vertical-align:middle;padding:40%}.permission{padding:10px;color:red}.navigateMsg{text-align:center;margin-top:60px}\n"] }]
|
|
186
|
+
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.ActivatedRoute }, { type: i2.Router }, { type: i0.Injector }, { type: i3.BaseAppService }] });
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9idWxrLXRvb2wvc3JjL2xpYi9tZW51L21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYnVsay10b29sL3NyYy9saWIvbWVudS9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlDLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQWdCLE1BQU0saUJBQWlCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFBOzs7Ozs7O0FBb0JwRCxNQUFNLE9BQU8sYUFBYTtJQWtCSjtJQUE0QztJQUN0RDtJQUF1QjtJQUE0QjtJQWpCdEQsS0FBSyxDQUFNO0lBQ1gsUUFBUSxHQUFXLE1BQU0sQ0FBQztJQUMxQixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2IsUUFBUSxHQUFRLE1BQU0sQ0FBQTtJQUN0QixRQUFRLENBQVM7SUFDakIsU0FBUyxDQUFTO0lBQ2xCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsUUFBUSxDQUFNO0lBQ2QsbUJBQW1CLENBQVM7SUFDNUIsa0JBQWtCLEdBQVksSUFBSSxDQUFDO0lBQ25DLFFBQVEsR0FBYSxFQUFFLENBQUM7SUFDeEIsUUFBUSxDQUFRO0lBQ2hCLE9BQU8sQ0FBUztJQUNoQixhQUFhLENBQU07SUFDbkIsV0FBVyxDQUFTO0lBQ3BCLE1BQU0sQ0FBTTtJQUNuQixZQUFvQixxQkFBa0MsRUFBVSxLQUFxQixFQUMzRSxNQUFjLEVBQVMsUUFBa0IsRUFBVSxjQUE4QjtRQUR2RSwwQkFBcUIsR0FBckIscUJBQXFCLENBQWE7UUFBVSxVQUFLLEdB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QUMsQ0FBQztRQUN6QyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDZixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUMxQixLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ25DLENBQUM7Z0JBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUNELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7MkhBcEtVLGFBQWE7K0dBQWIsYUFBYSxnREN2QjFCLDZ1REE2Q0k7OzRGRHRCUyxhQUFhO2tCQUx6QixTQUFTOytCQUNFLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRlciwgQWN0aXZhdGVkUm91dGUsIFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEJhc2VBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vYmFzZS1hcHAuc2VydmljZSdcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1lbnUge1xyXG4gIGRpc3BsYXl0ZXh0OiBzdHJpbmc7XHJcbiAgZGlzcGxheW9yZGVyOiBudW1iZXI7XHJcbiAgbWVudUlkOiBudW1iZXI7XHJcbiAgbWVudWxldmVsOiBudW1iZXI7XHJcbiAgcGFyZW50TWVudUlkOiBudW1iZXI7XHJcbiAgdGFyZ2V0QWN0aW9uOiBzdHJpbmc7XHJcbiAgdGFyZ2V0U2VydmVyOiBzdHJpbmc7XHJcbiAgcGFyZW50TWVudU5hbWU6IHN0cmluZztcclxuICBjaGlsZHJlbjogYW55W11cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItbWVudScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgcHVibGljIGFzeW5jOiBhbnk7XHJcbiAgcHVibGljIE1lbnVNb2RlOiBzdHJpbmcgPSBcIm92ZXJcIjtcclxuICBwdWJsaWMgbWVzc2FnZSA9ICcnO1xyXG4gIHB1YmxpYyB0b29sdGV4dDogYW55ID0gXCJDQk1TXCJcclxuICBwdWJsaWMgbWVudU5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgY2hpbGRNZW51OiBzdHJpbmc7XHJcbiAgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB1c2VySW5mbzogYW55O1xyXG4gIHB1YmxpYyBtb2R1bGVOYW1lRnJvbUV4Y2VsOiBzdHJpbmc7XHJcbiAgcHVibGljIElzUGVybWlzc2lvbkV4aXN0czogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIG1lc3NhZ2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHB1YmxpYyBNZW51RGF0YTogTWVudVtdXHJcbiAgcHVibGljIFJvb3RVcmw6IHN0cmluZztcclxuICBwdWJsaWMgbWVudUZyb21FeGNlbDogYW55O1xyXG4gIHB1YmxpYyBuYXZpZ2F0ZU1zZzogc3RyaW5nO1xyXG4gIHB1YmxpYyByZXN1bHQ6IGFueTtcclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aFNlcnZpY2UsIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHVibGljIGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBiYXNlQXBwU2VydmljZTogQmFzZUFwcFNlcnZpY2UpIHtcclxuICAgIHRoaXMuUm9vdFVybCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFwiY29uZmlnXCIpLnJvb3RVcmw7ICAvL2dldHRpbmcgZnJvbSBlbnZpcm9ubWVudCBmaWxlIGZyb20gYXBwbGljYXRpb24gYWNjZXNzaW5nIEJhc2VBcHBcclxuICAgIHRoaXMubWVudU5hbWUgPSB0aGlzLmluamVjdG9yLmdldChcImNvbmZpZ1wiKS5tb2R1bGVOYW1lOyAgIC8vZ2V0dGluZyBmcm9tIGVudmlyb25tZW50IGZpbGUgZnJvbSBhcHBsaWNhdGlvbiBhY2Nlc3NpbmcgQmFzZUFwcFxyXG4gICAgdGhpcy51c2VySW5mbyA9IHRoaXMuYmFzZUFwcFNlcnZpY2UuZ2V0VXNlckluZm8oKTtcclxuICAgIHRoaXMuY2hpbGRNZW51ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJjaGlsZE1lbnVcIilcclxuICAgIGlmICghdGhpcy51c2VySW5mbykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaW5jYXNlIGdldFVzZXJJbmZvIHNlcnZpY2UgZmFpbHMuXHJcbiAgICAgIGxldCB1c2VyRGV0YWlscyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiVXNlckluZm9cIik7XHJcbiAgICAgIHRoaXMudXNlckluZm8gPSBKU09OLnBhcnNlKHVzZXJEZXRhaWxzKTtcclxuICAgIH1cclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIlVybCBjYW1lIGJhc2UgZnJvbSBhcHBsaWNhdGlvbiAtXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuR2V0Q0JNU01lbnUoKTtcclxuXHJcbiAgfVxyXG4gIHB1YmxpYyBHZXRDQk1TTWVudSgpIHtcclxuICAgIGlmICh0aGlzLnVzZXJJbmZvKSB7XHJcbiAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLkdldE1lbnUodGhpcy51c2VySW5mby51c2VySW5mb0lkKS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5NZW51RGF0YSA9IGRhdGE7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5NZW51RGF0YSkge1xyXG4gICAgICAgICAgdGhpcy5tZW51RnJvbUV4Y2VsID0gdGhpcy5iYXNlQXBwU2VydmljZS5nZXRtZW51TmFtZUZyb21CdWRnZXQoKVxyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJNZW51RnJvbUV4Y2VsXCIsIHRoaXMubWVudUZyb21FeGNlbCk7XHJcbiAgICAgICAgICBpZiAoIXRoaXMubWVudUZyb21FeGNlbCkge1xyXG4gICAgICAgICAgICBsZXQgQ3VycmVudE1lbnUgPSBkYXRhLmZpbmQoZSA9PiBlLnBhcmVudE1lbnVOYW1lID09IHRoaXMubWVudU5hbWUpIC8vRmluZGluZyBXaGljaCBhcHBsaWNhdGlvbiBBY2Nlc3NpbmcgQmFzZUFwcFxyXG4gICAgICAgICAgICB0aGlzLnRvb2x0ZXh0ID0gQ3VycmVudE1lbnUgPyBDdXJyZW50TWVudS5wYXJlbnRNZW51TmFtZSA6IFwiQ0JNU1wiO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIklzZG93bmxvYWRcIiwgdGhpcy51c2VySW5mby5pc0Rvd25sb2FkKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJJbmZvLmlzRG93bmxvYWQpIHtcclxuICAgICAgICAgICAgICBpZiAoQ3VycmVudE1lbnUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChDdXJyZW50TWVudS5jaGlsZHJlbi5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbQ3VycmVudE1lbnUudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRNZW51KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQ2hpbGRNZW51KEN1cnJlbnRNZW51KVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtDdXJyZW50TWVudS5jaGlsZHJlblswXS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlJlZGlyZWN0aW5nIHRvIHRoZSBGaXJzdCBhcHBsaWNhdGlvbiBpbiBtZW51IFRhYlwiKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUodGhpcy5NZW51RGF0YVswXSk7IC8vIFJlZGlyZWN0aW5nIHRvIHRoZSBGaXJzdCBhcHBsaWNhdGlvbiBpbiBtZW51IFRhYiAgXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IG1lbnUgPSB0aGlzLk1lbnVEYXRhLmZpbmQoZSA9PiBlLmRpc3BsYXl0ZXh0ID09IHRoaXMubWVudUZyb21FeGNlbClcclxuICAgICAgICAgICAgaWYgKG1lbnUpIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuY2hpbGRNZW51KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIm5vQ2hpbGRNZW51XCIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Bbm90aGVyTWVudSh0aGlzLk1lbnVEYXRhLmZpbmQoZSA9PiBlLmRpc3BsYXl0ZXh0ID09IHRoaXMubWVudUZyb21FeGNlbCkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2hpbGRNZW51VGhlcmVcIilcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0NoaWxkTWVudSh0aGlzLk1lbnVEYXRhLmZpbmQoZSA9PiBlLnBhcmVudE1lbnVOYW1lID09IHRoaXMubWVudU5hbWUpKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9Bbm90aGVyTWVudSh0aGlzLk1lbnVEYXRhWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuSXNQZXJtaXNzaW9uRXhpc3RzID0gZmFsc2U7IC8vTm90aWZpbmcgVXNlciB0aGF0IGhlIG9yIHNoZSBkb2Vkbm90IGhhdmUgcGVybWlzc2lvbiBpZiBtZW51RGF0YSBpcyBlbXB0eS5cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgbmF2aWdhdGVUb0NoaWxkTWVudShDdXJyZW50TWVudSkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJjaGlsZE1lbnVcIik7XHJcbiAgICBsZXQgY2hpbGRyZW5NZW51ID0gQ3VycmVudE1lbnUuY2hpbGRyZW4uZmlsdGVyKGUgPT4gZS5kaXNwbGF5dGV4dCA9PSB0aGlzLmNoaWxkTWVudSlcclxuICAgIGNvbnNvbGUubG9nKFwiY2hpbGRyZW5NZW51XCIsIGNoaWxkcmVuTWVudSk7XHJcbiAgICBpZiAoY2hpbGRyZW5NZW51Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2NoaWxkcmVuTWVudVswXS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtDdXJyZW50TWVudS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxpc3RJdGVtQ2xpY2sobGluaykge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKGxpbmsucGFyZW50TWVudU5hbWUgPT0gdGhpcy5tZW51TmFtZSkge1xyXG4gICAgICBpZiAobGluay5wYXJlbnRNZW51SWQgPT0gMCkge1xyXG4gICAgICAgIGlmIChsaW5rLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibmF2aWdhdGlvblVybFwiLCBsaW5rLmNoaWxkcmVuWzBdLnRhcmdldEFjdGlvbilcclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbGluay5jaGlsZHJlblswXS50YXJnZXRBY3Rpb24uc3BsaXQoXCJhcHBcIilbMV1dKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5hdmlnYXRpb25VcmxcIiwgbGluay50YXJnZXRBY3Rpb24pXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2xpbmsudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzFdXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiY2hpbGRNZW51XCIsIGxpbmsuZGlzcGxheXRleHQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwibmF2aWdhdGlvblVybFwiLCBsaW5rLnRhcmdldEFjdGlvbilcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtsaW5rLnRhcmdldEFjdGlvbi5zcGxpdChcImFwcFwiKVsxXV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5uYXZpZ2F0ZVRvQW5vdGhlck1lbnUobGluaylcclxuICAgIH1cclxuICB9XHJcbiAgbmF2aWdhdGVUb0Fub3RoZXJNZW51KGxpbmspIHtcclxuICAgIHRoaXMubmF2aWdhdGVNc2cgPSBcIi4uLlJlZGlyZWN0aW5nIHRvIFwiICsgbGluay5wYXJlbnRNZW51TmFtZVxyXG4gICAgbGV0IG5hdkxpbmsgPSBsaW5rLnRhcmdldEFjdGlvblxyXG4gICAgbmF2TGluayA9IGxpbmsudGFyZ2V0QWN0aW9uLnNwbGl0KFwiYXBwXCIpWzBdICsgXCJhcHBcIlxyXG4gICAgaWYgKGxpbmsucGFyZW50TWVudUlkICE9IDApIHtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJjaGlsZE1lbnVcIiwgbGluay5kaXNwbGF5dGV4dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJJc05hdmlnYXRlXCIsIFwidHJ1ZVwiKTtcclxuICAgIGxldCBuYXZpZ2F0ZVVybCA9IHRoaXMubmF2aWdhdGVVcmwobmF2TGluaylcclxuICAgIGNvbnNvbGUubG9nKFwibmF2aWdhdGluZyB0b1wiLCBsaW5rLmRpc3BsYXl0ZXh0KVxyXG4gICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihuYXZpZ2F0ZVVybCk7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIG5hdmlnYXRlVXJsKFVybDogc3RyaW5nKSB7XHJcbiAgICBsZXQgcmVwbGFjZW1lbnRzID0gVXJsLm1hdGNoKC9cXHsuKj9cXH0vZyk7XHJcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xyXG4gICAgaWYgKHJlcGxhY2VtZW50cykge1xyXG4gICAgICByZXBsYWNlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCA9PSBcInt1c2VySWR9XCIpIHtcclxuICAgICAgICAgIHZhbHVlID0gdGhpcy51c2VySW5mby51c2VySW5mb0lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBVcmwgPSBVcmwucmVwbGFjZShlbGVtZW50LCB2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuUm9vdFVybCArIFVybDtcclxuICB9XHJcbiAgb25Mb2dPdXQoKSB7XHJcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU2VydmljZS5sb2dvdXQoKTtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9sb2dpblwiXSk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJcclxuPGRpdiBjbGFzcz1cImV4YW1wbGUtY29udGFpbmVyXCI+XHJcblxyXG4gICAgPG5hdiBjbGFzcz1cIm5hdi1oZWFkZXJcIj5cclxuICAgICAgICA8dWwgY2xhc3M9XCJuYXZcIj4gICAgIFxyXG4gICAgICAgICAgPGxpIGNsYXNzPVwibmF2LXRpbWVcIj4gXHJcbiAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYmFyc1wiIHN0eWxlPVwiZm9udC1zaXplOjI0cHhcIj48L2k+XHJcbiAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHBhcmVudCBvZiBNZW51RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICA8bGkgICpuZ0lmPVwicGFyZW50LmNoaWxkcmVuICYmIHBhcmVudC5jaGlsZHJlbi5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIml0ZW1cIj4ge3twYXJlbnQuZGlzcGxheXRleHR9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBwYXJlbnQuY2hpbGRyZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgKGNsaWNrKT1cImxpc3RJdGVtQ2xpY2soY2hpbGQpXCI+e3tjaGlsZC5kaXNwbGF5dGV4dH19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgKm5nSWY9XCIhcGFyZW50LmNoaWxkcmVuIHx8IHBhcmVudC5jaGlsZHJlbi5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSAoY2xpY2spPVwibGlzdEl0ZW1DbGljayhwYXJlbnQpXCI+e3twYXJlbnQuZGlzcGxheXRleHR9fTwvYT5cclxuICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgPGxpPiBcclxuICAgICAgICAgICAgICAgIDxhICAoY2xpY2spPVwib25Mb2dPdXQoKVwiPkxvZ291dDwvYT5cclxuICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgY2xhc3M9XCJuYXYtaXRlbVwiPlxyXG4gICAgICAgICAgIDxoNSBzdHlsZT1cInBhZGRpbmctdG9wOjEycHg7XCI+IHt7dG9vbHRleHR9fTwvaDU+XHJcbiAgICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICA8L25hdj5cclxuICAgIDxkaXYgKm5nSWY9XCJJc1Blcm1pc3Npb25FeGlzdHM9PWZhbHNlXCI+VXNlciBEb2VzJ3QgaGF2ZSBwZXJtaXNzaW9uIHRvIGFjY2VzcyBhbnkgb2YgRXhjZWwgYXBwbGljYXRpb25zPC9kaXY+XHJcbiAgICAgICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibmF2aWdhdGVNc2dcIiAqbmdJZj1cIm5hdmlnYXRlTXNnXCI+XHJcbiAgICB7e25hdmlnYXRlTXNnfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJsb2FkZVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgICAgICAgPG1hdC1zcGlubmVyIGNvbG9yPVwiYmxhY2tcIiBbZGlhbWV0ZXJdPTYwID48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDxzcGFuPlxyXG4gICAgICBMb2FkaW5nLi4uXHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9zZWN0aW9uPlxyXG4gICAgIl19
|