igniteui-angular 18.1.6 → 18.1.8
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/lib/core/i18n/grid-resources.mjs +2 -1
- package/esm2022/lib/grids/grid/grid.component.mjs +6 -5
- package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +6 -5
- package/esm2022/lib/grids/pivot-grid/pivot-grid-dimensions.mjs +2 -2
- package/esm2022/lib/grids/pivot-grid/pivot-grid.interface.mjs +1 -1
- package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +6 -5
- package/esm2022/lib/icon/icon.service.mjs +18 -14
- package/fesm2022/igniteui-angular.mjs +31 -23
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/core/i18n/grid-resources.d.ts +1 -0
- package/lib/core/styles/components/button/_button-theme.scss +4 -4
- package/lib/core/styles/components/input/_input-group-theme.scss +8 -8
- package/lib/core/styles/components/progress/_progress-theme.scss +1 -1
- package/lib/icon/icon.service.d.ts +3 -2
- package/package.json +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -140,7 +140,6 @@ export class IgxIconService {
|
|
|
140
140
|
const icon = this._iconRefs.get(family)?.get(name);
|
|
141
141
|
const iconFamily = icon?.family ?? family;
|
|
142
142
|
const _name = icon?.name ?? name;
|
|
143
|
-
const type = icon?.type ?? this.familyType(iconFamily);
|
|
144
143
|
const className = this.familyClassName(iconFamily);
|
|
145
144
|
const prefix = this._families.get(iconFamily)?.prefix;
|
|
146
145
|
// Handle name prefixes
|
|
@@ -148,6 +147,8 @@ export class IgxIconService {
|
|
|
148
147
|
if (iconName && prefix) {
|
|
149
148
|
iconName = _name.includes(prefix) ? _name : `${prefix}${_name}`;
|
|
150
149
|
}
|
|
150
|
+
const cached = this.isSvgIconCached(iconName, iconFamily);
|
|
151
|
+
const type = cached ? "svg" : icon?.type ?? this.familyType(iconFamily);
|
|
151
152
|
return {
|
|
152
153
|
className,
|
|
153
154
|
type,
|
|
@@ -155,6 +156,12 @@ export class IgxIconService {
|
|
|
155
156
|
family: iconFamily,
|
|
156
157
|
};
|
|
157
158
|
}
|
|
159
|
+
getOrCreateSvgFamily(family) {
|
|
160
|
+
if (!this._families.has(family)) {
|
|
161
|
+
this._families.set(family, { className: family, type: "svg" });
|
|
162
|
+
}
|
|
163
|
+
return this._families.get(family);
|
|
164
|
+
}
|
|
158
165
|
/**
|
|
159
166
|
* Adds an SVG image to the cache. SVG source is an url.
|
|
160
167
|
* ```typescript
|
|
@@ -172,7 +179,7 @@ export class IgxIconService {
|
|
|
172
179
|
throw new Error(`The URL provided was not trusted as a resource URL: "${url}".`);
|
|
173
180
|
}
|
|
174
181
|
if (!this.isSvgIconCached(name, family)) {
|
|
175
|
-
this.
|
|
182
|
+
this.getOrCreateSvgFamily(family);
|
|
176
183
|
this.fetchSvg(url).subscribe((res) => {
|
|
177
184
|
this.cacheSvgIcon(name, res, family, stripMeta);
|
|
178
185
|
});
|
|
@@ -189,12 +196,12 @@ export class IgxIconService {
|
|
|
189
196
|
* <path d="M74 74h54v54H74" /></svg>', 'svg-flags');
|
|
190
197
|
* ```
|
|
191
198
|
*/
|
|
192
|
-
addSvgIconFromText(name, iconText, family =
|
|
199
|
+
addSvgIconFromText(name, iconText, family = this._defaultFamily.name, stripMeta = false) {
|
|
193
200
|
if (name && iconText) {
|
|
194
201
|
if (this.isSvgIconCached(name, family)) {
|
|
195
202
|
return;
|
|
196
203
|
}
|
|
197
|
-
this.
|
|
204
|
+
this.getOrCreateSvgFamily(family);
|
|
198
205
|
this.cacheSvgIcon(name, iconText, family, stripMeta);
|
|
199
206
|
}
|
|
200
207
|
else {
|
|
@@ -207,10 +214,9 @@ export class IgxIconService {
|
|
|
207
214
|
* const isSvgCached = this.iconService.isSvgIconCached('aruba', 'svg-flags');
|
|
208
215
|
* ```
|
|
209
216
|
*/
|
|
210
|
-
isSvgIconCached(name, family
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const familyRegistry = this._cachedIcons.get(familyClassName);
|
|
217
|
+
isSvgIconCached(name, family) {
|
|
218
|
+
if (this._cachedIcons.has(family)) {
|
|
219
|
+
const familyRegistry = this._cachedIcons.get(family);
|
|
214
220
|
return familyRegistry.has(name);
|
|
215
221
|
}
|
|
216
222
|
return false;
|
|
@@ -221,9 +227,8 @@ export class IgxIconService {
|
|
|
221
227
|
* const svgIcon = this.iconService.getSvgIcon('aruba', 'svg-flags');
|
|
222
228
|
* ```
|
|
223
229
|
*/
|
|
224
|
-
getSvgIcon(name, family
|
|
225
|
-
|
|
226
|
-
return this._cachedIcons.get(familyClassName)?.get(name);
|
|
230
|
+
getSvgIcon(name, family) {
|
|
231
|
+
return this._cachedIcons.get(family)?.get(name);
|
|
227
232
|
}
|
|
228
233
|
/**
|
|
229
234
|
* @hidden
|
|
@@ -236,13 +241,11 @@ export class IgxIconService {
|
|
|
236
241
|
* @hidden
|
|
237
242
|
*/
|
|
238
243
|
cacheSvgIcon(name, value, family = this._defaultFamily.name, stripMeta) {
|
|
239
|
-
family = family ? family : this._defaultFamily.name;
|
|
240
244
|
if (this._platformUtil?.isBrowser && name && value) {
|
|
241
245
|
const doc = this._domParser.parseFromString(value, "image/svg+xml");
|
|
242
246
|
const svg = doc.querySelector("svg");
|
|
243
247
|
if (!this._cachedIcons.has(family)) {
|
|
244
248
|
this._cachedIcons.set(family, new Map());
|
|
245
|
-
this._iconLoaded.next({ name, value, family });
|
|
246
249
|
}
|
|
247
250
|
if (svg) {
|
|
248
251
|
svg.setAttribute("fit", "");
|
|
@@ -259,6 +262,7 @@ export class IgxIconService {
|
|
|
259
262
|
}
|
|
260
263
|
const safeSvg = this._sanitizer.bypassSecurityTrustHtml(svg.outerHTML);
|
|
261
264
|
this._cachedIcons.get(family).set(name, safeSvg);
|
|
265
|
+
this._iconLoaded.next({ name, value, family });
|
|
262
266
|
}
|
|
263
267
|
}
|
|
264
268
|
}
|
|
@@ -282,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.5", ngImpor
|
|
|
282
286
|
type: Inject,
|
|
283
287
|
args: [DOCUMENT]
|
|
284
288
|
}] }] });
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBOzs7OztBQWtCbEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxNQUFNLE9BQU8sY0FBYztJQXVCdkIsWUFDd0IsVUFBd0IsRUFDeEIsV0FBdUIsRUFDdkIsYUFBMkIsRUFDUCxRQUFrQjtRQUh0QyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQ1AsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWZ0RCxtQkFBYyxHQUFlO1lBQ2pDLElBQUksRUFBRSxVQUFVO1lBQ2hCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQ3RELENBQUM7UUFDTSxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFDckQsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFDeEQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQVVwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFD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OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFNlY3VyaXR5Q29udGV4dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tIFwiLi4vY29yZS91dGlsc1wiO1xuaW1wb3J0IHsgaWNvblJlZmVyZW5jZXMgfSBmcm9tICcuL2ljb24ucmVmZXJlbmNlcydcbmltcG9ydCB7IEljb25GYW1pbHksIEljb25NZXRhLCBGYW1pbHlNZXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSWNvblR5cGUsIEljb25SZWZlcmVuY2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IElneFRoZW1lIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnNlcnZpY2VcIjtcblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBTVkcgaWNvbiBpcyBsb2FkZWQgdGhyb3VnaFxuICogYSBIVFRQIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWd4SWNvbkxvYWRlZEV2ZW50IHtcbiAgICAvKiogTmFtZSBvZiB0aGUgaWNvbiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIGFjdHVhbCBTVkcgdGV4dCwgaWYgYW55ICovXG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBmb250LWZhbWlseSBmb3IgdGhlIGljb24uIERlZmF1bHRzIHRvIG1hdGVyaWFsLiAqL1xuICAgIGZhbWlseTogc3RyaW5nO1xufVxuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEljb24gU2VydmljZSoqIC1cbiAqXG4gKiBUaGUgSWduaXRlIFVJIEljb24gU2VydmljZSBtYWtlcyBpdCBlYXN5IGZvciBkZXZlbG9wZXJzIHRvIGluY2x1ZGUgY3VzdG9tIFNWRyBpbWFnZXMgYW5kIHVzZSB0aGVtIHdpdGggSWd4SWNvbkNvbXBvbmVudC5cbiAqIEluIGFkZGl0aW9uIGl0IGNvdWxkIGJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgY3VzdG9tIGNsYXNzIHRvIGJlIGFwcGxpZWQgb24gSWd4SWNvbkNvbXBvbmVudCBhY2NvcmRpbmcgdG8gZ2l2ZW4gZm9udC1mYW1pbHkuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRoaXMuaWNvblNlcnZpY2Uuc2V0RmFtaWx5KCdtYXRlcmlhbCcsIHsgY2xhc3NOYW1lOiAnbWF0ZXJpYWwtaWNvbnMnLCB0eXBlOiAnZm9udCcgfSk7XG4gKiB0aGlzLmljb25TZXJ2aWNlLmFkZFN2Z0ljb24oJ2FydWJhJywgJy9hc3NldHMvc3ZnL2NvdW50cnlfZmxhZ3MvYXJ1YmEuc3ZnJywgJ3N2Zy1mbGFncycpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgSWd4SWNvblNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGFuIGljb24gaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuICAgICAqIHRocm91Z2ggYSBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNlcnZpY2UuaWNvbkxvYWRlZC5zdWJzY3JpYmUoKGV2OiBJZ3hJY29uTG9hZGVkRXZlbnQpID0+IC4uLik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGljb25Mb2FkZWQ6IE9ic2VydmFibGU8SWd4SWNvbkxvYWRlZEV2ZW50PjtcblxuICAgIHByaXZhdGUgX2RlZmF1bHRGYW1pbHk6IEljb25GYW1pbHkgPSB7XG4gICAgICAgIG5hbWU6IFwibWF0ZXJpYWxcIixcbiAgICAgICAgbWV0YTogeyBjbGFzc05hbWU6IFwibWF0ZXJpYWwtaWNvbnNcIiwgdHlwZTogXCJsaWdhXCIgfSxcbiAgICB9O1xuICAgIHByaXZhdGUgX2ljb25SZWZzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEljb25NZXRhPj4oKTtcbiAgICBwcml2YXRlIF9mYW1pbGllcyA9IG5ldyBNYXA8c3RyaW5nLCBGYW1pbHlNZXRhPigpO1xuICAgIHByaXZhdGUgX2NhY2hlZEljb25zID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFNhZmVIdG1sPj4oKTtcbiAgICBwcml2YXRlIF9pY29uTG9hZGVkID0gbmV3IFN1YmplY3Q8SWd4SWNvbkxvYWRlZEV2ZW50PigpO1xuICAgIHByaXZhdGUgX2RvbVBhcnNlcjogRE9NUGFyc2VyO1xuICAgIHByaXZhdGUgdGhlbWUhOiBJZ3hUaGVtZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaWNvbkxvYWRlZCA9IHRoaXMuX2ljb25Mb2FkZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuc2V0RmFtaWx5KHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSwgdGhpcy5fZGVmYXVsdEZhbWlseS5tZXRhKTtcblxuICAgICAgICBpZiAodGhpcy5fcGxhdGZvcm1VdGlsPy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBkZWZhdWx0IGZvbnQtZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGRlZmF1bHRGYW1pbHkgPSB0aGlzLmljb25TZXJ2aWNlLmRlZmF1bHRGYW1pbHk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZWZhdWx0RmFtaWx5KCk6IEljb25GYW1pbHkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZhbWlseTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgU2V0cyB0aGUgZGVmYXVsdCBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmRlZmF1bHRGYW1pbHkgPSAnc3ZnLWZsYWdzJztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRGYW1pbHkoZmFtaWx5OiBJY29uRmFtaWx5KSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRGYW1pbHkgPSBmYW1pbHk7XG4gICAgICAgIHRoaXMuc2V0RmFtaWx5KHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSwgdGhpcy5fZGVmYXVsdEZhbWlseS5tZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmVnaXN0ZXJzIGEgY3VzdG9tIGNsYXNzIHRvIGJlIGFwcGxpZWQgdG8gSWd4SWNvbkNvbXBvbmVudCBmb3IgYSBnaXZlbiBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyRmFtaWx5QWxpYXMoJ21hdGVyaWFsJywgJ21hdGVyaWFsLWljb25zJyk7XG4gICAgICogYGBgXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxOC4xLjAuIFVzZSBgc2V0RmFtaWx5YCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3RlckZhbWlseUFsaWFzKFxuICAgICAgICBhbGlhczogc3RyaW5nLFxuICAgICAgICBjbGFzc05hbWU6IHN0cmluZyA9IGFsaWFzLFxuICAgICAgICB0eXBlOiBJY29uVHlwZSA9IFwiZm9udFwiLFxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLnNldEZhbWlseShhbGlhcywgeyBjbGFzc05hbWUsIHR5cGUgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBjdXN0b20gY2xhc3MsIGlmIGFueSwgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGZvbnQtZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGZhbWlseUNsYXNzID0gdGhpcy5pY29uU2VydmljZS5mYW1pbHlDbGFzc05hbWUoJ21hdGVyaWFsJyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGZhbWlseUNsYXNzTmFtZShhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhbWlsaWVzLmdldChhbGlhcyk/LmNsYXNzTmFtZSB8fCBhbGlhcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwcml2YXRlIGZhbWlseVR5cGUoYWxpYXM6IHN0cmluZyk6IEljb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhbWlsaWVzLmdldChhbGlhcyk/LnR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldFJlZnNCeVRoZW1lKHRoZW1lOiBJZ3hUaGVtZSkge1xuICAgICAgICBpZiAodGhpcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGFsaWFzLCB0YXJnZXQgfSBvZiBpY29uUmVmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGljb24gPSB0YXJnZXQuZ2V0KHRoZW1lKSA/PyB0YXJnZXQuZ2V0KCdkZWZhdWx0JykhO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSWNvblJlZihhbGlhcy5uYW1lLCBhbGlhcy5mYW1pbHksIGljb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENyZWF0ZXMgYSBmYW1pbHkgdG8gY2xhc3NOYW1lIHJlbGF0aW9uc2hpcCB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIElneEljb25Db21wb25lbnRcbiAgICAgKiAgIHdoZW5ldmVyIHRoYXQgZmFtaWx5IG5hbWUgaXMgdXNlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEZhbWlseSgnbWF0ZXJpYWwnLCB7IGNsYXNzTmFtZTogJ21hdGVyaWFsLWljb25zJywgdHlwZTogJ2xpZ2EnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGYW1pbHkobmFtZTogc3RyaW5nLCBtZXRhOiBGYW1pbHlNZXRhKSB7XG4gICAgICAgIHRoaXMuX2ZhbWlsaWVzLnNldChuYW1lLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQWRkcyBhbiBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgbWV0YSBmYW1pbHkuXG4gICAgICogIEV4ZWN1dGVzIG9ubHkgaWYgbm8gaWNvbiByZWZlcmVuY2UgaXMgZm91bmQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRJY29uUmVmKCdhcnViYScsICdkZWZhdWx0JywgeyBuYW1lOiAnYXJ1YmEnLCBmYW1pbHk6ICdzdmctZmxhZ3MnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRJY29uUmVmKG5hbWU6IHN0cmluZywgZmFtaWx5OiBzdHJpbmcsIGljb246IEljb25NZXRhKSB7XG4gICAgICAgIGNvbnN0IGljb25SZWYgPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGlmICghaWNvblJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXRJY29uUmVmKG5hbWUsIGZhbWlseSwgaWNvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgU2ltaWxhciB0byBhZGRJY29uUmVmLCBidXQgYWx3YXlzIHNldHMgdGhlIGljb24gcmVmZXJlbmNlIG1ldGEgZm9yIGFuIGljb24gaW4gYSBtZXRhIGZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnLCB7IG5hbWU6ICdhcnViYScsIGZhbWlseTogJ3N2Zy1mbGFncycgfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldEljb25SZWYobmFtZTogc3RyaW5nLCBmYW1pbHk6IHN0cmluZywgaWNvbjogSWNvbk1ldGEpIHtcbiAgICAgICAgbGV0IGZhbWlseVJlZiA9IHRoaXMuX2ljb25SZWZzLmdldChmYW1pbHkpO1xuXG4gICAgICAgIGlmICghZmFtaWx5UmVmKSB7XG4gICAgICAgICAgICBmYW1pbHlSZWYgPSBuZXcgTWFwPHN0cmluZywgSWNvbk1ldGE+KCk7XG4gICAgICAgICAgICB0aGlzLl9pY29uUmVmcy5zZXQoZmFtaWx5LCBmYW1pbHlSZWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFtaWx5VHlwZSA9IHRoaXMuZmFtaWx5VHlwZShpY29uPy5mYW1pbHkpO1xuICAgICAgICBmYW1pbHlSZWYuc2V0KG5hbWUsIHsgLi4uaWNvbiwgdHlwZTogaWNvbi50eXBlID8/IGZhbWlseVR5cGUgfSk7XG5cbiAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgZmFtaWx5IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgZ2l2ZW4gZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGljb25SZWYgPSB0aGlzLmljb25TZXJ2aWNlLmdldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWNvblJlZihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKTogSWNvblJlZmVyZW5jZSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGljb25GYW1pbHkgPSBpY29uPy5mYW1pbHkgPz8gZmFtaWx5O1xuICAgICAgICBjb25zdCBfbmFtZSA9IGljb24/Lm5hbWUgPz8gbmFtZTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGljb24/LnR5cGUgPz8gdGhpcy5mYW1pbHlUeXBlKGljb25GYW1pbHkpO1xuICAgICAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLmZhbWlseUNsYXNzTmFtZShpY29uRmFtaWx5KTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGhpcy5fZmFtaWxpZXMuZ2V0KGljb25GYW1pbHkpPy5wcmVmaXg7XG5cbiAgICAgICAgLy8gSGFuZGxlIG5hbWUgcHJlZml4ZXNcbiAgICAgICAgbGV0IGljb25OYW1lID0gX25hbWU7XG5cbiAgICAgICAgaWYgKGljb25OYW1lICYmIHByZWZpeCkge1xuICAgICAgICAgICAgaWNvbk5hbWUgPSBfbmFtZS5pbmNsdWRlcyhwcmVmaXgpID8gX25hbWUgOiBgJHtwcmVmaXh9JHtfbmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBuYW1lOiBpY29uTmFtZSxcbiAgICAgICAgICAgIGZhbWlseTogaWNvbkZhbWlseSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQWRkcyBhbiBTVkcgaW1hZ2UgdG8gdGhlIGNhY2hlLiBTVkcgc291cmNlIGlzIGFuIHVybC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmFkZFN2Z0ljb24oJ2FydWJhJywgJy9hc3NldHMvc3ZnL2NvdW50cnlfZmxhZ3MvYXJ1YmEuc3ZnJywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRTdmdJY29uKFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHVybDogc3RyaW5nLFxuICAgICAgICBmYW1pbHkgPSB0aGlzLl9kZWZhdWx0RmFtaWx5Lm5hbWUsXG4gICAgICAgIHN0cmlwTWV0YSA9IGZhbHNlLFxuICAgICkge1xuICAgICAgICBpZiAobmFtZSAmJiB1cmwpIHtcbiAgICAgICAgICAgIGNvbnN0IHNhZmVVcmwgPSB0aGlzLl9zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHVybCk7XG4gICAgICAgICAgICBpZiAoIXNhZmVVcmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgVVJMIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQgYXMgdHJ1c3RlZCByZXNvdXJjZSBVUkwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplcjogXCIke3VybH1cIi5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFVybCA9IHRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShcbiAgICAgICAgICAgICAgICBTZWN1cml0eUNvbnRleHQuUkVTT1VSQ0VfVVJMLFxuICAgICAgICAgICAgICAgIHNhZmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFzYW5pdGl6ZWRVcmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgVVJMIHByb3ZpZGVkIHdhcyBub3QgdHJ1c3RlZCBhcyBhIHJlc291cmNlIFVSTDogXCIke3VybH1cIi5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1N2Z0ljb25DYWNoZWQobmFtZSwgZmFtaWx5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZhbWlsaWVzLnNldChmYW1pbHksIHsgY2xhc3NOYW1lOiBmYW1pbHksIHR5cGU6IFwic3ZnXCIgfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoU3ZnKHVybCkuc3Vic2NyaWJlKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZVN2Z0ljb24obmFtZSwgcmVzLCBmYW1pbHksIHN0cmlwTWV0YSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb3ZpZGUgYXQgbGVhc3QgYG5hbWVgIGFuZCBgdXJsYCB0byByZWdpc3RlciBhbiBzdmcgaWNvbi5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQWRkcyBhbiBTVkcgaW1hZ2UgdG8gdGhlIGNhY2hlLiBTVkcgc291cmNlIGlzIGl0cyB0ZXh0LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIHRoaXMuaWNvblNlcnZpY2UuYWRkU3ZnSWNvbkZyb21UZXh0KCdzaW1wbGUnLCAnPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMDAgMjAwXCI+XG4gICAgICogICA8cGF0aCBkPVwiTTc0IDc0aDU0djU0SDc0XCIgLz48L3N2Zz4nLCAnc3ZnLWZsYWdzJyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGFkZFN2Z0ljb25Gcm9tVGV4dChcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICBpY29uVGV4dDogc3RyaW5nLFxuICAgICAgICBmYW1pbHkgPSBcIlwiLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgaWNvblRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9mYW1pbGllcy5zZXQoZmFtaWx5LCB7IGNsYXNzTmFtZTogZmFtaWx5LCB0eXBlOiBcInN2Z1wiIH0pO1xuICAgICAgICAgICAgdGhpcy5jYWNoZVN2Z0ljb24obmFtZSwgaWNvblRleHQsIGZhbWlseSwgc3RyaXBNZXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBcIllvdSBzaG91bGQgcHJvdmlkZSBhdCBsZWFzdCBgbmFtZWAgYW5kIGBpY29uVGV4dGAgdG8gcmVnaXN0ZXIgYW4gc3ZnIGljb24uXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIFJldHVybnMgd2hldGhlciBhIGdpdmVuIFNWRyBpbWFnZSBpcyBwcmVzZW50IGluIHRoZSBjYWNoZS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICBjb25zdCBpc1N2Z0NhY2hlZCA9IHRoaXMuaWNvblNlcnZpY2UuaXNTdmdJY29uQ2FjaGVkKCdhcnViYScsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdmdJY29uQ2FjaGVkKG5hbWU6IHN0cmluZywgZmFtaWx5ID0gXCJcIik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmYW1pbHlDbGFzc05hbWUgPSB0aGlzLmZhbWlseUNsYXNzTmFtZShmYW1pbHkpO1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkSWNvbnMuaGFzKGZhbWlseUNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbWlseVJlZ2lzdHJ5ID0gdGhpcy5fY2FjaGVkSWNvbnMuZ2V0KFxuICAgICAgICAgICAgICAgIGZhbWlseUNsYXNzTmFtZSxcbiAgICAgICAgICAgICkgYXMgTWFwPHN0cmluZywgU2FmZUh0bWw+O1xuICAgICAgICAgICAgcmV0dXJuIGZhbWlseVJlZ2lzdHJ5LmhhcyhuYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyB0aGUgY2FjaGVkIFNWRyBpbWFnZSBhcyBzdHJpbmcuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgY29uc3Qgc3ZnSWNvbiA9IHRoaXMuaWNvblNlcnZpY2UuZ2V0U3ZnSWNvbignYXJ1YmEnLCAnc3ZnLWZsYWdzJyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldFN2Z0ljb24obmFtZTogc3RyaW5nLCBmYW1pbHkgPSBcIlwiKSB7XG4gICAgICAgIGNvbnN0IGZhbWlseUNsYXNzTmFtZSA9IHRoaXMuZmFtaWx5Q2xhc3NOYW1lKGZhbWlseSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5Q2xhc3NOYW1lKT8uZ2V0KG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZldGNoU3ZnKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVxID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCIgfSk7XG4gICAgICAgIHJldHVybiByZXE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgY2FjaGVTdmdJY29uKFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIGZhbWlseSA9IHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSxcbiAgICAgICAgc3RyaXBNZXRhOiBib29sZWFuLFxuICAgICkge1xuICAgICAgICBmYW1pbHkgPSBmYW1pbHkgPyBmYW1pbHkgOiB0aGlzLl9kZWZhdWx0RmFtaWx5Lm5hbWU7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BsYXRmb3JtVXRpbD8uaXNCcm93c2VyICYmIG5hbWUgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuX2RvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwiaW1hZ2Uvc3ZnK3htbFwiKTtcbiAgICAgICAgICAgIGNvbnN0IHN2ZyA9IGRvYy5xdWVyeVNlbGVjdG9yKFwic3ZnXCIpIGFzIFNWR0VsZW1lbnQ7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fY2FjaGVkSWNvbnMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJY29ucy5zZXQoZmFtaWx5LCBuZXcgTWFwPHN0cmluZywgU2FmZUh0bWw+KCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ljb25Mb2FkZWQubmV4dCh7IG5hbWUsIHZhbHVlLCBmYW1pbHkgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdmcpIHtcbiAgICAgICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwiZml0XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChzdHJpcE1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBzdmcucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gc3ZnLnF1ZXJ5U2VsZWN0b3IoXCJkZXNjXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLnJlbW92ZUNoaWxkKHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmcucmVtb3ZlQ2hpbGQoZGVzYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlU3ZnID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgICAgICAgICAgICAgICBzdmcub3V0ZXJIVE1MLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkSWNvbnMuZ2V0KGZhbWlseSkuc2V0KG5hbWUsIHNhZmVTdmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|
|
289
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2ljb24vaWNvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFBOzs7OztBQWtCbEQ7Ozs7Ozs7Ozs7O0dBV0c7QUFJSCxNQUFNLE9BQU8sY0FBYztJQXVCdkIsWUFDd0IsVUFBd0IsRUFDeEIsV0FBdUIsRUFDdkIsYUFBMkIsRUFDUCxRQUFrQjtRQUh0QyxlQUFVLEdBQVYsVUFBVSxDQUFjO1FBQ3hCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGtCQUFhLEdBQWIsYUFBYSxDQUFjO1FBQ1AsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWZ0RCxtQkFBYyxHQUFlO1lBQ2pDLElBQUksRUFBRSxVQUFVO1lBQ2hCLElBQUksRUFBRSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO1NBQ3RELENBQUM7UUFDTSxjQUFTLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFDckQsY0FBUyxHQUFHLElBQUksR0FBRyxFQUFzQixDQUFDO1FBQzFDLGlCQUFZLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7UUFDeEQsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBc0IsQ0FBQztRQVVwRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFD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LFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBeUJRLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFNlY3VyaXR5Q29udGV4dCwgSW5qZWN0LCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tIFwiLi4vY29yZS91dGlsc1wiO1xuaW1wb3J0IHsgaWNvblJlZmVyZW5jZXMgfSBmcm9tICcuL2ljb24ucmVmZXJlbmNlcydcbmltcG9ydCB7IEljb25GYW1pbHksIEljb25NZXRhLCBGYW1pbHlNZXRhIH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgSWNvblR5cGUsIEljb25SZWZlcmVuY2UgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IElneFRoZW1lIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3RoZW1lL3RoZW1lLnNlcnZpY2VcIjtcblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBTVkcgaWNvbiBpcyBsb2FkZWQgdGhyb3VnaFxuICogYSBIVFRQIHJlcXVlc3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWd4SWNvbkxvYWRlZEV2ZW50IHtcbiAgICAvKiogTmFtZSBvZiB0aGUgaWNvbiAqL1xuICAgIG5hbWU6IHN0cmluZztcbiAgICAvKiogVGhlIGFjdHVhbCBTVkcgdGV4dCwgaWYgYW55ICovXG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgLyoqIFRoZSBmb250LWZhbWlseSBmb3IgdGhlIGljb24uIERlZmF1bHRzIHRvIG1hdGVyaWFsLiAqL1xuICAgIGZhbWlseTogc3RyaW5nO1xufVxuXG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEljb24gU2VydmljZSoqIC1cbiAqXG4gKiBUaGUgSWduaXRlIFVJIEljb24gU2VydmljZSBtYWtlcyBpdCBlYXN5IGZvciBkZXZlbG9wZXJzIHRvIGluY2x1ZGUgY3VzdG9tIFNWRyBpbWFnZXMgYW5kIHVzZSB0aGVtIHdpdGggSWd4SWNvbkNvbXBvbmVudC5cbiAqIEluIGFkZGl0aW9uIGl0IGNvdWxkIGJlIHVzZWQgdG8gYXNzb2NpYXRlIGEgY3VzdG9tIGNsYXNzIHRvIGJlIGFwcGxpZWQgb24gSWd4SWNvbkNvbXBvbmVudCBhY2NvcmRpbmcgdG8gZ2l2ZW4gZm9udC1mYW1pbHkuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHRoaXMuaWNvblNlcnZpY2Uuc2V0RmFtaWx5KCdtYXRlcmlhbCcsIHsgY2xhc3NOYW1lOiAnbWF0ZXJpYWwtaWNvbnMnLCB0eXBlOiAnZm9udCcgfSk7XG4gKiB0aGlzLmljb25TZXJ2aWNlLmFkZFN2Z0ljb24oJ2FydWJhJywgJy9hc3NldHMvc3ZnL2NvdW50cnlfZmxhZ3MvYXJ1YmEuc3ZnJywgJ3N2Zy1mbGFncycpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgSWd4SWNvblNlcnZpY2Uge1xuICAgIC8qKlxuICAgICAqIE9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIGFuIGljb24gaXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZFxuICAgICAqIHRocm91Z2ggYSBIVFRQIHJlcXVlc3QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnNlcnZpY2UuaWNvbkxvYWRlZC5zdWJzY3JpYmUoKGV2OiBJZ3hJY29uTG9hZGVkRXZlbnQpID0+IC4uLik7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGljb25Mb2FkZWQ6IE9ic2VydmFibGU8SWd4SWNvbkxvYWRlZEV2ZW50PjtcblxuICAgIHByaXZhdGUgX2RlZmF1bHRGYW1pbHk6IEljb25GYW1pbHkgPSB7XG4gICAgICAgIG5hbWU6IFwibWF0ZXJpYWxcIixcbiAgICAgICAgbWV0YTogeyBjbGFzc05hbWU6IFwibWF0ZXJpYWwtaWNvbnNcIiwgdHlwZTogXCJsaWdhXCIgfSxcbiAgICB9O1xuICAgIHByaXZhdGUgX2ljb25SZWZzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIEljb25NZXRhPj4oKTtcbiAgICBwcml2YXRlIF9mYW1pbGllcyA9IG5ldyBNYXA8c3RyaW5nLCBGYW1pbHlNZXRhPigpO1xuICAgIHByaXZhdGUgX2NhY2hlZEljb25zID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIFNhZmVIdG1sPj4oKTtcbiAgICBwcml2YXRlIF9pY29uTG9hZGVkID0gbmV3IFN1YmplY3Q8SWd4SWNvbkxvYWRlZEV2ZW50PigpO1xuICAgIHByaXZhdGUgX2RvbVBhcnNlcjogRE9NUGFyc2VyO1xuICAgIHByaXZhdGUgdGhlbWUhOiBJZ3hUaGVtZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcGxhdGZvcm1VdGlsOiBQbGF0Zm9ybVV0aWwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRE9DVU1FTlQpIHByb3RlY3RlZCBkb2N1bWVudDogRG9jdW1lbnQsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaWNvbkxvYWRlZCA9IHRoaXMuX2ljb25Mb2FkZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgICAgIHRoaXMuc2V0RmFtaWx5KHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSwgdGhpcy5fZGVmYXVsdEZhbWlseS5tZXRhKTtcblxuICAgICAgICBpZiAodGhpcy5fcGxhdGZvcm1VdGlsPy5pc0Jyb3dzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2RvbVBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBkZWZhdWx0IGZvbnQtZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGRlZmF1bHRGYW1pbHkgPSB0aGlzLmljb25TZXJ2aWNlLmRlZmF1bHRGYW1pbHk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZWZhdWx0RmFtaWx5KCk6IEljb25GYW1pbHkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmYXVsdEZhbWlseTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgU2V0cyB0aGUgZGVmYXVsdCBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmRlZmF1bHRGYW1pbHkgPSAnc3ZnLWZsYWdzJztcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGRlZmF1bHRGYW1pbHkoZmFtaWx5OiBJY29uRmFtaWx5KSB7XG4gICAgICAgIHRoaXMuX2RlZmF1bHRGYW1pbHkgPSBmYW1pbHk7XG4gICAgICAgIHRoaXMuc2V0RmFtaWx5KHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSwgdGhpcy5fZGVmYXVsdEZhbWlseS5tZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmVnaXN0ZXJzIGEgY3VzdG9tIGNsYXNzIHRvIGJlIGFwcGxpZWQgdG8gSWd4SWNvbkNvbXBvbmVudCBmb3IgYSBnaXZlbiBmb250LWZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnJlZ2lzdGVyRmFtaWx5QWxpYXMoJ21hdGVyaWFsJywgJ21hdGVyaWFsLWljb25zJyk7XG4gICAgICogYGBgXG4gICAgICogQGRlcHJlY2F0ZWQgaW4gdmVyc2lvbiAxOC4xLjAuIFVzZSBgc2V0RmFtaWx5YCBpbnN0ZWFkLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3RlckZhbWlseUFsaWFzKFxuICAgICAgICBhbGlhczogc3RyaW5nLFxuICAgICAgICBjbGFzc05hbWU6IHN0cmluZyA9IGFsaWFzLFxuICAgICAgICB0eXBlOiBJY29uVHlwZSA9IFwiZm9udFwiLFxuICAgICk6IHRoaXMge1xuICAgICAgICB0aGlzLnNldEZhbWlseShhbGlhcywgeyBjbGFzc05hbWUsIHR5cGUgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBjdXN0b20gY2xhc3MsIGlmIGFueSwgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGZvbnQtZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGZhbWlseUNsYXNzID0gdGhpcy5pY29uU2VydmljZS5mYW1pbHlDbGFzc05hbWUoJ21hdGVyaWFsJyk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGZhbWlseUNsYXNzTmFtZShhbGlhczogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhbWlsaWVzLmdldChhbGlhcyk/LmNsYXNzTmFtZSB8fCBhbGlhcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwcml2YXRlIGZhbWlseVR5cGUoYWxpYXM6IHN0cmluZyk6IEljb25UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhbWlsaWVzLmdldChhbGlhcyk/LnR5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIHNldFJlZnNCeVRoZW1lKHRoZW1lOiBJZ3hUaGVtZSkge1xuICAgICAgICBpZiAodGhpcy50aGVtZSAhPT0gdGhlbWUpIHtcbiAgICAgICAgICAgIHRoaXMudGhlbWUgPSB0aGVtZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCB7IGFsaWFzLCB0YXJnZXQgfSBvZiBpY29uUmVmZXJlbmNlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGljb24gPSB0YXJnZXQuZ2V0KHRoZW1lKSA/PyB0YXJnZXQuZ2V0KCdkZWZhdWx0JykhO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSWNvblJlZihhbGlhcy5uYW1lLCBhbGlhcy5mYW1pbHksIGljb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIENyZWF0ZXMgYSBmYW1pbHkgdG8gY2xhc3NOYW1lIHJlbGF0aW9uc2hpcCB0aGF0IGlzIGFwcGxpZWQgdG8gdGhlIElneEljb25Db21wb25lbnRcbiAgICAgKiAgIHdoZW5ldmVyIHRoYXQgZmFtaWx5IG5hbWUgaXMgdXNlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEZhbWlseSgnbWF0ZXJpYWwnLCB7IGNsYXNzTmFtZTogJ21hdGVyaWFsLWljb25zJywgdHlwZTogJ2xpZ2EnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXRGYW1pbHkobmFtZTogc3RyaW5nLCBtZXRhOiBGYW1pbHlNZXRhKSB7XG4gICAgICAgIHRoaXMuX2ZhbWlsaWVzLnNldChuYW1lLCBtZXRhKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgQWRkcyBhbiBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgbWV0YSBmYW1pbHkuXG4gICAgICogIEV4ZWN1dGVzIG9ubHkgaWYgbm8gaWNvbiByZWZlcmVuY2UgaXMgZm91bmQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRJY29uUmVmKCdhcnViYScsICdkZWZhdWx0JywgeyBuYW1lOiAnYXJ1YmEnLCBmYW1pbHk6ICdzdmctZmxhZ3MnIH0pO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRJY29uUmVmKG5hbWU6IHN0cmluZywgZmFtaWx5OiBzdHJpbmcsIGljb246IEljb25NZXRhKSB7XG4gICAgICAgIGNvbnN0IGljb25SZWYgPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGlmICghaWNvblJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXRJY29uUmVmKG5hbWUsIGZhbWlseSwgaWNvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgU2ltaWxhciB0byBhZGRJY29uUmVmLCBidXQgYWx3YXlzIHNldHMgdGhlIGljb24gcmVmZXJlbmNlIG1ldGEgZm9yIGFuIGljb24gaW4gYSBtZXRhIGZhbWlseS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLnNldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnLCB7IG5hbWU6ICdhcnViYScsIGZhbWlseTogJ3N2Zy1mbGFncycgfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldEljb25SZWYobmFtZTogc3RyaW5nLCBmYW1pbHk6IHN0cmluZywgaWNvbjogSWNvbk1ldGEpIHtcbiAgICAgICAgbGV0IGZhbWlseVJlZiA9IHRoaXMuX2ljb25SZWZzLmdldChmYW1pbHkpO1xuXG4gICAgICAgIGlmICghZmFtaWx5UmVmKSB7XG4gICAgICAgICAgICBmYW1pbHlSZWYgPSBuZXcgTWFwPHN0cmluZywgSWNvbk1ldGE+KCk7XG4gICAgICAgICAgICB0aGlzLl9pY29uUmVmcy5zZXQoZmFtaWx5LCBmYW1pbHlSZWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFtaWx5VHlwZSA9IHRoaXMuZmFtaWx5VHlwZShpY29uPy5mYW1pbHkpO1xuICAgICAgICBmYW1pbHlSZWYuc2V0KG5hbWUsIHsgLi4uaWNvbiwgdHlwZTogaWNvbi50eXBlID8/IGZhbWlseVR5cGUgfSk7XG5cbiAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgZmFtaWx5IH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBpY29uIHJlZmVyZW5jZSBtZXRhIGZvciBhbiBpY29uIGluIGEgZ2l2ZW4gZmFtaWx5LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGljb25SZWYgPSB0aGlzLmljb25TZXJ2aWNlLmdldEljb25SZWYoJ2FydWJhJywgJ2RlZmF1bHQnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0SWNvblJlZihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKTogSWNvblJlZmVyZW5jZSB7XG4gICAgICAgIGNvbnN0IGljb24gPSB0aGlzLl9pY29uUmVmcy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuXG4gICAgICAgIGNvbnN0IGljb25GYW1pbHkgPSBpY29uPy5mYW1pbHkgPz8gZmFtaWx5O1xuICAgICAgICBjb25zdCBfbmFtZSA9IGljb24/Lm5hbWUgPz8gbmFtZTtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gdGhpcy5mYW1pbHlDbGFzc05hbWUoaWNvbkZhbWlseSk7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuX2ZhbWlsaWVzLmdldChpY29uRmFtaWx5KT8ucHJlZml4O1xuXG4gICAgICAgIC8vIEhhbmRsZSBuYW1lIHByZWZpeGVzXG4gICAgICAgIGxldCBpY29uTmFtZSA9IF9uYW1lO1xuXG4gICAgICAgIGlmIChpY29uTmFtZSAmJiBwcmVmaXgpIHtcbiAgICAgICAgICAgIGljb25OYW1lID0gX25hbWUuaW5jbHVkZXMocHJlZml4KSA/IF9uYW1lIDogYCR7cHJlZml4fSR7X25hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaXNTdmdJY29uQ2FjaGVkKGljb25OYW1lLCBpY29uRmFtaWx5KTtcbiAgICAgICAgY29uc3QgdHlwZSA9IGNhY2hlZCA/IFwic3ZnXCIgOiBpY29uPy50eXBlID8/IHRoaXMuZmFtaWx5VHlwZShpY29uRmFtaWx5KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWU6IGljb25OYW1lLFxuICAgICAgICAgICAgZmFtaWx5OiBpY29uRmFtaWx5LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JDcmVhdGVTdmdGYW1pbHkoZmFtaWx5OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgdGhpcy5fZmFtaWxpZXMuc2V0KGZhbWlseSwgeyBjbGFzc05hbWU6IGZhbWlseSwgdHlwZTogXCJzdmdcIiB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9mYW1pbGllcy5nZXQoZmFtaWx5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogIEFkZHMgYW4gU1ZHIGltYWdlIHRvIHRoZSBjYWNoZS4gU1ZHIHNvdXJjZSBpcyBhbiB1cmwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICAgdGhpcy5pY29uU2VydmljZS5hZGRTdmdJY29uKCdhcnViYScsICcvYXNzZXRzL3N2Zy9jb3VudHJ5X2ZsYWdzL2FydWJhLnN2ZycsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkU3ZnSWNvbihcbiAgICAgICAgbmFtZTogc3RyaW5nLFxuICAgICAgICB1cmw6IHN0cmluZyxcbiAgICAgICAgZmFtaWx5ID0gdGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgdXJsKSB7XG4gICAgICAgICAgICBjb25zdCBzYWZlVXJsID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmwpO1xuXG4gICAgICAgICAgICBpZiAoIXNhZmVVcmwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBUaGUgcHJvdmlkZWQgVVJMIGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQgYXMgdHJ1c3RlZCByZXNvdXJjZSBVUkwgYnkgQW5ndWxhcidzIERvbVNhbml0aXplcjogXCIke3VybH1cIi5gLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNhbml0aXplZFVybCA9IHRoaXMuX3Nhbml0aXplci5zYW5pdGl6ZShcbiAgICAgICAgICAgICAgICBTZWN1cml0eUNvbnRleHQuUkVTT1VSQ0VfVVJMLFxuICAgICAgICAgICAgICAgIHNhZmVVcmwsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoIXNhbml0aXplZFVybCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSBVUkwgcHJvdmlkZWQgd2FzIG5vdCB0cnVzdGVkIGFzIGEgcmVzb3VyY2UgVVJMOiBcIiR7dXJsfVwiLmAsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRPckNyZWF0ZVN2Z0ZhbWlseShmYW1pbHkpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaFN2Zyh1cmwpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVTdmdJY29uKG5hbWUsIHJlcywgZmFtaWx5LCBzdHJpcE1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm92aWRlIGF0IGxlYXN0IGBuYW1lYCBhbmQgYHVybGAgdG8gcmVnaXN0ZXIgYW4gc3ZnIGljb24uXCIsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogIEFkZHMgYW4gU1ZHIGltYWdlIHRvIHRoZSBjYWNoZS4gU1ZHIHNvdXJjZSBpcyBpdHMgdGV4dC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICB0aGlzLmljb25TZXJ2aWNlLmFkZFN2Z0ljb25Gcm9tVGV4dCgnc2ltcGxlJywgJzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAwIDIwMFwiPlxuICAgICAqICAgPHBhdGggZD1cIk03NCA3NGg1NHY1NEg3NFwiIC8+PC9zdmc+JywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRTdmdJY29uRnJvbVRleHQoXG4gICAgICAgIG5hbWU6IHN0cmluZyxcbiAgICAgICAgaWNvblRleHQ6IHN0cmluZyxcbiAgICAgICAgZmFtaWx5ID0gdGhpcy5fZGVmYXVsdEZhbWlseS5uYW1lLFxuICAgICAgICBzdHJpcE1ldGEgPSBmYWxzZSxcbiAgICApIHtcbiAgICAgICAgaWYgKG5hbWUgJiYgaWNvblRleHQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3ZnSWNvbkNhY2hlZChuYW1lLCBmYW1pbHkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmdldE9yQ3JlYXRlU3ZnRmFtaWx5KGZhbWlseSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlU3ZnSWNvbihuYW1lLCBpY29uVGV4dCwgZmFtaWx5LCBzdHJpcE1ldGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIFwiWW91IHNob3VsZCBwcm92aWRlIGF0IGxlYXN0IGBuYW1lYCBhbmQgYGljb25UZXh0YCB0byByZWdpc3RlciBhbiBzdmcgaWNvbi5cIixcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiAgUmV0dXJucyB3aGV0aGVyIGEgZ2l2ZW4gU1ZHIGltYWdlIGlzIHByZXNlbnQgaW4gdGhlIGNhY2hlLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgIGNvbnN0IGlzU3ZnQ2FjaGVkID0gdGhpcy5pY29uU2VydmljZS5pc1N2Z0ljb25DYWNoZWQoJ2FydWJhJywgJ3N2Zy1mbGFncycpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N2Z0ljb25DYWNoZWQobmFtZTogc3RyaW5nLCBmYW1pbHk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkSWNvbnMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZhbWlseVJlZ2lzdHJ5ID0gdGhpcy5fY2FjaGVkSWNvbnMuZ2V0KFxuICAgICAgICAgICAgICAgIGZhbWlseSxcbiAgICAgICAgICAgICkgYXMgTWFwPHN0cmluZywgU2FmZUh0bWw+O1xuXG4gICAgICAgICAgICByZXR1cm4gZmFtaWx5UmVnaXN0cnkuaGFzKG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBSZXR1cm5zIHRoZSBjYWNoZWQgU1ZHIGltYWdlIGFzIHN0cmluZy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogICBjb25zdCBzdmdJY29uID0gdGhpcy5pY29uU2VydmljZS5nZXRTdmdJY29uKCdhcnViYScsICdzdmctZmxhZ3MnKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0U3ZnSWNvbihuYW1lOiBzdHJpbmcsIGZhbWlseTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5KT8uZ2V0KG5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIGZldGNoU3ZnKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVxID0gdGhpcy5faHR0cENsaWVudC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogXCJ0ZXh0XCIgfSk7XG4gICAgICAgIHJldHVybiByZXE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgY2FjaGVTdmdJY29uKFxuICAgICAgICBuYW1lOiBzdHJpbmcsXG4gICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgIGZhbWlseSA9IHRoaXMuX2RlZmF1bHRGYW1pbHkubmFtZSxcbiAgICAgICAgc3RyaXBNZXRhOiBib29sZWFuLFxuICAgICkge1xuICAgICAgICBpZiAodGhpcy5fcGxhdGZvcm1VdGlsPy5pc0Jyb3dzZXIgJiYgbmFtZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5fZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJpbWFnZS9zdmcreG1sXCIpO1xuICAgICAgICAgICAgY29uc3Qgc3ZnID0gZG9jLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIikgYXMgU1ZHRWxlbWVudDtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLl9jYWNoZWRJY29ucy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZEljb25zLnNldChmYW1pbHksIG5ldyBNYXA8c3RyaW5nLCBTYWZlSHRtbD4oKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdmcpIHtcbiAgICAgICAgICAgICAgICBzdmcuc2V0QXR0cmlidXRlKFwiZml0XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIHN2Zy5zZXRBdHRyaWJ1dGUoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgICAgICAgICAgICAgIGlmIChzdHJpcE1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBzdmcucXVlcnlTZWxlY3RvcihcInRpdGxlXCIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjID0gc3ZnLnF1ZXJ5U2VsZWN0b3IoXCJkZXNjXCIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnLnJlbW92ZUNoaWxkKHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmcucmVtb3ZlQ2hpbGQoZGVzYyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzYWZlU3ZnID0gdGhpcy5fc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgICAgICAgICAgICAgICBzdmcub3V0ZXJIVE1MLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jYWNoZWRJY29ucy5nZXQoZmFtaWx5KS5zZXQobmFtZSwgc2FmZVN2Zyk7XG4gICAgICAgICAgICAgICAgdGhpcy5faWNvbkxvYWRlZC5uZXh0KHsgbmFtZSwgdmFsdWUsIGZhbWlseSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|