@boldreports/angular-reporting-components 5.1.28 → 5.2.26

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.
@@ -0,0 +1,405 @@
1
+ import { EventEmitter, Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export { ContentChild, Type, forwardRef } from '@angular/core';
4
+ export let currentTemplateElement;
5
+ let firstVal = {};
6
+ /** Internal Helpers */
7
+ export class Utils {
8
+ static IterateAndGetChanges(obj) {
9
+ if (ej.isNullOrUndefined(obj.tags) || obj.tags.length === 0) {
10
+ return null;
11
+ }
12
+ let res = {};
13
+ for (let i = 0, tags = obj.tags; i < tags.length; i++) {
14
+ let tag = tags[i], tagElement = obj['tag_' + tag.replace(/\./g, '_')];
15
+ if (!ej.isNullOrUndefined(tagElement) && tagElement.hasChanges) {
16
+ res[tag] = tagElement.getChangesAndReset();
17
+ }
18
+ }
19
+ return res;
20
+ }
21
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: Utils, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
22
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: Utils });
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: Utils, decorators: [{
25
+ type: Injectable
26
+ }] });
27
+ // tslint:disable-next-line:max-line-length
28
+ export class BoldReportComponents {
29
+ controlName;
30
+ el;
31
+ cdRef;
32
+ tags;
33
+ ejIterableDiffers;
34
+ _ejKeyValueDiffers;
35
+ model = {};
36
+ widget;
37
+ outputs = [];
38
+ inputs = [];
39
+ twoways = [];
40
+ complexProperties;
41
+ isEditor;
42
+ firstCheck;
43
+ ejIterable;
44
+ ejKeyValueDif;
45
+ static bindAndRaiseEvent(instance, model, event) {
46
+ if (!event.startsWith('model.')) { // && instance[event]['observers'].length > 1) {
47
+ let originalEvt = event.startsWith('bold') ? event.substr(4) : event;
48
+ model[originalEvt] = function (params) {
49
+ instance[event + '_output']['emit'](params);
50
+ };
51
+ }
52
+ }
53
+ // tslint:disable-next-line:max-line-length
54
+ constructor(controlName, el, cdRef, tags, ejIterableDiffers, _ejKeyValueDiffers) {
55
+ this.controlName = controlName;
56
+ this.el = el;
57
+ this.cdRef = cdRef;
58
+ this.tags = tags;
59
+ this.ejIterableDiffers = ejIterableDiffers;
60
+ this._ejKeyValueDiffers = _ejKeyValueDiffers;
61
+ // this.__shadow = this.dom.getShadowRoot(this.el.nativeElement);
62
+ this.firstCheck = true;
63
+ this.ejIterable = this.ejIterableDiffers.find([]).create(null);
64
+ this.ejKeyValueDif = _ejKeyValueDiffers.find([]).create();
65
+ }
66
+ createTwoways(twoways) {
67
+ if (!twoways) {
68
+ return;
69
+ }
70
+ let model = this.model;
71
+ for (let i = 0; i < twoways.length; i++) {
72
+ let element = twoways[i].replace(/\_/g, '.');
73
+ ej.createObject(element + 'Change', this[twoways[i] + '_twoChange'], model);
74
+ ej.createObject(element, this.addTwoways(element), model);
75
+ }
76
+ }
77
+ addTwoways(prop) {
78
+ let model = this.model, value = firstVal; // , originalProp = prop.replace(/-/g, '.');
79
+ return function (newVal, isApp) {
80
+ if (value === firstVal) {
81
+ value = ej.getObject(prop + '_two', model);
82
+ if (value === undefined) {
83
+ value = ej.getObject(prop, this === undefined || this.defaults === undefined ? {} : this.defaults);
84
+ }
85
+ }
86
+ if (newVal === undefined) {
87
+ return value;
88
+ }
89
+ if (value === newVal) {
90
+ return;
91
+ }
92
+ value = newVal;
93
+ if (!isApp) {
94
+ ej.createObject(prop + '_two', newVal, model);
95
+ ej.getObject(prop + 'Change', model).emit(newVal);
96
+ }
97
+ };
98
+ }
99
+ ngOnInit() {
100
+ for (let key in this) {
101
+ if (key.indexOf('_input') != -1)
102
+ this.inputs.push(key);
103
+ if (key.indexOf('_output') != -1)
104
+ this.outputs.push(key);
105
+ if (key.indexOf('_two') != -1 && key.indexOf('_twoChange') == -1)
106
+ this.twoways.push(key.replace('_two', ''));
107
+ }
108
+ if (ej.isNullOrUndefined(this['options'])) {
109
+ this.createTwoways(this.twoways);
110
+ }
111
+ }
112
+ ngAfterContentInit() {
113
+ this.firstCheck = false;
114
+ let model = this.model, events = this.outputs;
115
+ if (events) {
116
+ for (let i = 0; i < events.length; i++) {
117
+ let event = events[i].replace('_output', '');
118
+ BoldReportComponents.bindAndRaiseEvent(this, model, event);
119
+ }
120
+ }
121
+ if (ej.isNullOrUndefined(this['options'])) {
122
+ for (let i = 0; i < this.tags.length; i++) {
123
+ let element = this.tags[i], item = this['tag_' + element.replace(/\./g, '_')];
124
+ if (!ej.isNullOrUndefined(item)) {
125
+ ej.createObject(element, item.getList(), this.model);
126
+ }
127
+ }
128
+ for (let i = 0; i < this.inputs.length; i++) {
129
+ let property = this.inputs[i];
130
+ let modelProperty = this.inputs[i].replace('_input', '');
131
+ if (this[property] != null) {
132
+ if (modelProperty.indexOf('_') == -1) {
133
+ if (this.model[modelProperty]) {
134
+ $.extend(true, this.model[modelProperty], this[property]);
135
+ }
136
+ else {
137
+ this.model[modelProperty] = this[property];
138
+ }
139
+ }
140
+ else if (modelProperty.indexOf('_two') == -1) {
141
+ let tempObj = {};
142
+ let key = modelProperty.replace(/\_/g, '.');
143
+ ej.createObject(key, this[property], tempObj);
144
+ let rootProp = key.split('.')[0];
145
+ if (this.model[rootProp] == undefined)
146
+ this.model[rootProp] = {};
147
+ $.extend(true, this.model[rootProp], tempObj[rootProp]);
148
+ }
149
+ }
150
+ }
151
+ for (let i = 0; i < this.twoways.length; i++) {
152
+ let twoway = this.twoways[i];
153
+ let twowayProperty = twoway + '_two';
154
+ if (this[twowayProperty] != null) {
155
+ if (twoway.indexOf('_') == -1) {
156
+ this.model[twowayProperty] = this[twowayProperty];
157
+ }
158
+ else {
159
+ let tempObj = {};
160
+ let key = twoway.replace(/\_/g, '.') + '_two';
161
+ ej.createObject(key, this[twowayProperty], tempObj);
162
+ let rootProp = twowayProperty.split('_')[0];
163
+ $.extend(true, this.model[rootProp], tempObj[rootProp]);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ else
169
+ this.model = jQuery.extend(this.model, this['options']);
170
+ }
171
+ ngDoCheck() {
172
+ if (ej.isNullOrUndefined(this['options'])) {
173
+ this.twoways.forEach(element => {
174
+ if (this[element + '_two'] instanceof Array) {
175
+ let changes = this.ejIterable.diff(this[element + '_two']);
176
+ if (changes) {
177
+ let ngChanges = {};
178
+ if (this.widget != undefined) {
179
+ ngChanges = this.getTwowayChanges(changes.collection, ngChanges, element.replace(/\_/g, '.'));
180
+ ej.createObject(element.replace(/\_/g, '.') + '.two', changes.collection, ngChanges);
181
+ this.widget['setModel'](ngChanges, $.isPlainObject(ngChanges));
182
+ }
183
+ }
184
+ }
185
+ });
186
+ }
187
+ else {
188
+ let changes = this.ejKeyValueDif.diff(this['options']);
189
+ if (changes) {
190
+ if (this.widget != undefined) {
191
+ var ngchanges = {};
192
+ changes.forEachChangedItem((changedprop) => {
193
+ ej.createObject(changedprop.key, changedprop.currentValue, ngchanges);
194
+ });
195
+ this.widget['setModel'](ngchanges, $.isPlainObject(ngchanges));
196
+ }
197
+ }
198
+ }
199
+ }
200
+ ngAfterViewInit() {
201
+ let nativeElement = this.isEditor ? $(this.el.nativeElement.children) : $(this.el.nativeElement);
202
+ let controlName = this.lowerCaseFirstLetter(this.controlName);
203
+ this.widget = $(nativeElement)[controlName](this.model)[controlName]('instance');
204
+ }
205
+ lowerCaseFirstLetter(string) {
206
+ return string[0].toLowerCase() + string.slice(1);
207
+ }
208
+ ngOnChanges(changes) {
209
+ if (this.firstCheck) {
210
+ return;
211
+ }
212
+ let ngChanges = {};
213
+ if (ej.isNullOrUndefined(this['options'])) {
214
+ for (let key in changes) {
215
+ let element = changes[key];
216
+ if (element.previousValue === element.currentValue) {
217
+ break;
218
+ }
219
+ key = key.replace('_input', '').replace(/\_/g, '.');
220
+ if (key.endsWith('.two')) {
221
+ let oKey = key.replace('.two', '');
222
+ ngChanges = this.getTwowayChanges(element.currentValue, ngChanges, oKey);
223
+ }
224
+ ej.createObject(key, element.currentValue, ngChanges);
225
+ }
226
+ this.widget['setModel'](ngChanges, $.isPlainObject(ngChanges));
227
+ }
228
+ }
229
+ getTwowayChanges(value, ngChanges, prop) {
230
+ let valFn = ej.getObject(prop, this.widget['model']);
231
+ valFn(value, true);
232
+ ej.createObject(prop, valFn, ngChanges);
233
+ return ngChanges;
234
+ }
235
+ ngAfterContentChecked() {
236
+ // TODO: ChangeDetection Third/Multi level
237
+ let changes = Utils.IterateAndGetChanges(this);
238
+ for (let key in changes) {
239
+ if (changes.hasOwnProperty(key)) {
240
+ let element = changes[key];
241
+ this.widget['_' + key](element);
242
+ }
243
+ }
244
+ }
245
+ ngOnDestroy() {
246
+ this.widget['destroy']();
247
+ }
248
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BoldReportComponents, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
249
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BoldReportComponents });
250
+ }
251
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: BoldReportComponents, decorators: [{
252
+ type: Injectable
253
+ }], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Array }, { type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }]; } });
254
+ export class ComplexTagElement {
255
+ tags;
256
+ recentChanges;
257
+ hasChanges;
258
+ firstChange;
259
+ index;
260
+ valueChange = new EventEmitter();
261
+ complexProperties;
262
+ property;
263
+ parent;
264
+ complexes = [];
265
+ // tags: Array<string>;
266
+ constructor(tags) {
267
+ this.tags = tags;
268
+ this.hasChanges = false;
269
+ this.firstChange = true;
270
+ Object.defineProperty(this, 'parent', {
271
+ enumerable: false,
272
+ writable: true,
273
+ value: null
274
+ });
275
+ currentTemplateElement = this;
276
+ }
277
+ ngOnInit() {
278
+ this.firstChange = false;
279
+ for (let key in this) {
280
+ if (key.indexOf('_') != -1 && key.indexOf('tag_') == -1)
281
+ this.complexes.push(key);
282
+ }
283
+ for (let i = 0; i < this.complexes.length; i++) {
284
+ let property = this.complexes[i];
285
+ if (property.indexOf('_') != -1) {
286
+ let tempObj = {};
287
+ let key = property.replace(/\_/g, '.');
288
+ ej.createObject(key, this[property], tempObj);
289
+ let rootProp = key.split('.')[0];
290
+ if (this[rootProp] == undefined)
291
+ this[rootProp] = {};
292
+ $.extend(true, this[rootProp], tempObj[rootProp]);
293
+ }
294
+ }
295
+ }
296
+ ensureCleanObject() {
297
+ let tags = this.tags;
298
+ for (let i = 0; i < tags.length; i++) {
299
+ let element = tags[i], tagElement = this['tag_' + element.replace(/\./g, '_')];
300
+ if (i === 0 && this[element]) {
301
+ return;
302
+ }
303
+ if (ej.isNullOrUndefined(tagElement)) {
304
+ continue;
305
+ }
306
+ ej.createObject(element, tagElement.getList(), this);
307
+ }
308
+ }
309
+ ngOnChanges(changes) {
310
+ if (this.firstChange) {
311
+ return;
312
+ }
313
+ this.recentChanges = changes;
314
+ this.hasChanges = true;
315
+ }
316
+ getChangesAndReset() {
317
+ if (this.hasChanges === false) {
318
+ return;
319
+ }
320
+ let changes = this.recentChanges || {};
321
+ let contentChanges = Utils.IterateAndGetChanges(this);
322
+ if (!$.isEmptyObject(contentChanges)) {
323
+ for (let key in contentChanges) {
324
+ if (contentChanges.hasOwnProperty(key)) {
325
+ let element = contentChanges[key];
326
+ // this.el.nativeElement.
327
+ if (!ej.isNullOrUndefined(this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key]))
328
+ this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key](element);
329
+ }
330
+ }
331
+ }
332
+ this.hasChanges = false;
333
+ return changes;
334
+ }
335
+ ngAfterContentChecked() {
336
+ let tags = this.tags;
337
+ for (let i = 0, len = tags.length; i < len; i++) {
338
+ let element = tags[i], tagElement = this['tag_' + element.replace(/\./g, '_')];
339
+ if (tagElement && tagElement.hasChanges) {
340
+ this.hasChanges = true;
341
+ }
342
+ }
343
+ }
344
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ComplexTagElement, deps: [{ token: Array }], target: i0.ɵɵFactoryTarget.Injectable });
345
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ComplexTagElement });
346
+ }
347
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ComplexTagElement, decorators: [{
348
+ type: Injectable
349
+ }], ctorParameters: function () { return [{ type: Array }]; } });
350
+ export class ArrayTagElement {
351
+ propertyName;
352
+ list;
353
+ children;
354
+ recentChanges;
355
+ hasChanges;
356
+ constructor(propertyName) {
357
+ this.propertyName = propertyName;
358
+ this.hasChanges = false;
359
+ }
360
+ // TODO: Need to consider dynamic child change
361
+ ngAfterContentInit() {
362
+ let index = 0;
363
+ this.list = this.children.map((child) => {
364
+ child.index = index++;
365
+ child.property = this.propertyName;
366
+ return child;
367
+ });
368
+ }
369
+ getList() {
370
+ let list = this.list;
371
+ for (let i = 0; i < list.length; i++) {
372
+ list[i].ensureCleanObject();
373
+ }
374
+ return list;
375
+ }
376
+ getChangesAndReset() {
377
+ this.hasChanges = false;
378
+ return this.recentChanges;
379
+ }
380
+ ngAfterContentChecked() {
381
+ let changes = {}, res = changes[this.propertyName] = [], childChange;
382
+ for (let i = 0, list = this.list; i < list.length; i++) {
383
+ let child = list[i];
384
+ if (child.hasChanges) {
385
+ childChange = child.getChangesAndReset();
386
+ if (!ej.isNullOrUndefined(childChange)) {
387
+ res.push({
388
+ index: child.index,
389
+ change: childChange
390
+ });
391
+ }
392
+ }
393
+ }
394
+ if (res.length > 0) {
395
+ this.recentChanges = res;
396
+ this.hasChanges = true;
397
+ }
398
+ }
399
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ArrayTagElement, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
400
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ArrayTagElement });
401
+ }
402
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: ArrayTagElement, decorators: [{
403
+ type: Injectable
404
+ }], ctorParameters: function () { return [{ type: undefined }]; } });
405
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxZQUFZLEVBRXlFLFVBQVUsRUFFbEcsTUFBTSxlQUFlLENBQUM7O0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxNQUFNLENBQUMsSUFBSSxzQkFBMkIsQ0FBQztBQWlCdkMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBR2xCLHVCQUF1QjtBQUN2QixNQUFNLE9BQU8sS0FBSztJQUNkLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFlO1FBQ3ZDLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksR0FBRyxHQUFlLEVBQUUsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFTLEdBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM5QztTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUM7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QUVELElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUM7WUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDTCxDQUFDO3VHQXJEUSxlQUFlOzJHQUFmLGVBQWU7OzJGQUFmLGVBQWU7a0JBRDNCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgRXZlbnRFbWl0dGVyLCBRdWVyeUxpc3QsIEVsZW1lbnRSZWYsIFNpbXBsZUNoYW5nZSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLCBJdGVyYWJsZURpZmZlcnMsIEtleVZhbHVlRGlmZmVycywgT25Jbml0LFxyXG4gICAgRG9DaGVjaywgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3ksIEluamVjdGFibGVcclxuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgeyBDb250ZW50Q2hpbGQsIFR5cGUsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBsZXQgY3VycmVudFRlbXBsYXRlRWxlbWVudDogYW55O1xyXG5cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElQYXJlbnRUYWcge1xyXG4gICAgdGFnczogQXJyYXk8YW55PjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ2hpbGRDaGFuZ2Uge1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICAgIGNoYW5nZTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDaGFuZ2VTZXQge1xyXG4gICAgW2tleTogc3RyaW5nXTogQXJyYXk8SUNoaWxkQ2hhbmdlPjtcclxufVxyXG5cclxubGV0IGZpcnN0VmFsID0ge307XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbi8qKiBJbnRlcm5hbCBIZWxwZXJzICovXHJcbmV4cG9ydCBjbGFzcyBVdGlscyB7XHJcbiAgICBzdGF0aWMgSXRlcmF0ZUFuZEdldENoYW5nZXMob2JqOiBJUGFyZW50VGFnKTogSUNoYW5nZVNldCB7XHJcbiAgICAgICAgaWYgKGVqLmlzTnVsbE9yVW5kZWZpbmVkKG9iai50YWdzKSB8fCBvYmoudGFncy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCByZXM6IElDaGFuZ2VTZXQgPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgdGFncyA9IG9iai50YWdzOyBpIDwgdGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGFnID0gdGFnc1tpXSwgdGFnRWxlbWVudCA9ICg8YW55Pm9iailbJ3RhZ18nICsgdGFnLnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuICAgICAgICAgICAgaWYgKCFlai5pc051bGxPclVuZGVmaW5lZCh0YWdFbGVtZW50KSAmJiB0YWdFbGVtZW50Lmhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIHJlc1t0YWddID0gdGFnRWxlbWVudC5nZXRDaGFuZ2VzQW5kUmVzZXQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgfVxyXG5cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXHJcbmV4cG9ydCBjbGFzcyBCb2xkUmVwb3J0Q29tcG9uZW50czxXLCBUPiBpbXBsZW1lbnRzIElQYXJlbnRUYWcsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgRG9DaGVjaywgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRDaGVja2VkLCBPbkRlc3Ryb3kge1xyXG4gICAgcHVibGljIG1vZGVsOiBUID0gPFQ+e307XHJcbiAgICBwdWJsaWMgd2lkZ2V0OiBXO1xyXG4gICAgcHJvdGVjdGVkIG91dHB1dHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIHByb3RlY3RlZCBpbnB1dHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIHByb3RlY3RlZCB0d293YXlzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBwcm90ZWN0ZWQgY29tcGxleFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz47XHJcbiAgICBwcm90ZWN0ZWQgaXNFZGl0b3I6IGJvb2xlYW47XHJcblxyXG4gICAgcHJpdmF0ZSBmaXJzdENoZWNrOiBib29sZWFuO1xyXG4gICAgZWpJdGVyYWJsZTogYW55O1xyXG4gICAgZWpLZXlWYWx1ZURpZjogYW55O1xyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIGJpbmRBbmRSYWlzZUV2ZW50KGluc3RhbmNlOiBhbnksIG1vZGVsOiBhbnksIGV2ZW50OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIWV2ZW50LnN0YXJ0c1dpdGgoJ21vZGVsLicpKSB7Ly8gJiYgaW5zdGFuY2VbZXZlbnRdWydvYnNlcnZlcnMnXS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGxldCBvcmlnaW5hbEV2dCA9IGV2ZW50LnN0YXJ0c1dpdGgoJ2JvbGQnKSA/IGV2ZW50LnN1YnN0cig0KSA6IGV2ZW50O1xyXG4gICAgICAgICAgICBtb2RlbFtvcmlnaW5hbEV2dF0gPSBmdW5jdGlvbiAocGFyYW1zOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIGluc3RhbmNlW2V2ZW50ICsgJ19vdXRwdXQnXVsnZW1pdCddKHBhcmFtcyk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNvbnRyb2xOYW1lOiBzdHJpbmcsIHByb3RlY3RlZCBlbDogRWxlbWVudFJlZiwgcHJvdGVjdGVkIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIHRhZ3M6IEFycmF5PHN0cmluZz4sIHByaXZhdGUgZWpJdGVyYWJsZURpZmZlcnM6IEl0ZXJhYmxlRGlmZmVycywgcHJpdmF0ZSBfZWpLZXlWYWx1ZURpZmZlcnM6IEtleVZhbHVlRGlmZmVycykge1xyXG4gICAgICAgIC8vICAgICAgICB0aGlzLl9fc2hhZG93ID0gdGhpcy5kb20uZ2V0U2hhZG93Um9vdCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIHRoaXMuZmlyc3RDaGVjayA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5lakl0ZXJhYmxlID0gdGhpcy5lakl0ZXJhYmxlRGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XHJcbiAgICAgICAgdGhpcy5laktleVZhbHVlRGlmID0gX2VqS2V5VmFsdWVEaWZmZXJzLmZpbmQoW10pLmNyZWF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBjcmVhdGVUd293YXlzKHR3b3dheXM6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICBpZiAoIXR3b3dheXMpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgbGV0IG1vZGVsID0gdGhpcy5tb2RlbDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR3b3dheXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSB0d293YXlzW2ldLnJlcGxhY2UoL1xcXy9nLCAnLicpO1xyXG4gICAgICAgICAgICBlai5jcmVhdGVPYmplY3QoZWxlbWVudCArICdDaGFuZ2UnLCAoPGFueT50aGlzKVt0d293YXlzW2ldICsgJ190d29DaGFuZ2UnXSwgbW9kZWwpO1xyXG4gICAgICAgICAgICBlai5jcmVhdGVPYmplY3QoZWxlbWVudCwgdGhpcy5hZGRUd293YXlzKGVsZW1lbnQpLCBtb2RlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhZGRUd293YXlzKHByb3A6IHN0cmluZyk6IEZ1bmN0aW9uIHtcclxuICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVsLCB2YWx1ZSA9IGZpcnN0VmFsOyAvLyAsIG9yaWdpbmFsUHJvcCA9IHByb3AucmVwbGFjZSgvLS9nLCAnLicpO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobmV3VmFsOiBhbnksIGlzQXBwOiBib29sZWFuKSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gZmlyc3RWYWwpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gZWouZ2V0T2JqZWN0KHByb3AgKyAnX3R3bycsIG1vZGVsKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBlai5nZXRPYmplY3QocHJvcCwgdGhpcyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuZGVmYXVsdHMgPT09IHVuZGVmaW5lZCA/IHt9IDogdGhpcy5kZWZhdWx0cyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5ld1ZhbCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBuZXdWYWwpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIHZhbHVlID0gbmV3VmFsO1xyXG4gICAgICAgICAgICBpZiAoIWlzQXBwKSB7XHJcbiAgICAgICAgICAgICAgICBlai5jcmVhdGVPYmplY3QocHJvcCArICdfdHdvJywgbmV3VmFsLCBtb2RlbCk7XHJcbiAgICAgICAgICAgICAgICBlai5nZXRPYmplY3QocHJvcCArICdDaGFuZ2UnLCBtb2RlbCkuZW1pdChuZXdWYWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX2lucHV0JykgIT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX291dHB1dCcpICE9IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdfdHdvJykgIT0gLTEgJiYga2V5LmluZGV4T2YoJ190d29DaGFuZ2UnKSA9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMudHdvd2F5cy5wdXNoKGtleS5yZXBsYWNlKCdfdHdvJywgJycpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVqLmlzTnVsbE9yVW5kZWZpbmVkKCg8YW55PnRoaXMpWydvcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVHdvd2F5cyh0aGlzLnR3b3dheXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5maXJzdENoZWNrID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWwsIGV2ZW50cyA9IHRoaXMub3V0cHV0cztcclxuICAgICAgICBpZiAoZXZlbnRzKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXZlbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXZlbnQgPSBldmVudHNbaV0ucmVwbGFjZSgnX291dHB1dCcsICcnKTtcclxuICAgICAgICAgICAgICAgIEJvbGRSZXBvcnRDb21wb25lbnRzLmJpbmRBbmRSYWlzZUV2ZW50KHRoaXMsIG1vZGVsLCBldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVqLmlzTnVsbE9yVW5kZWZpbmVkKCg8YW55PnRoaXMpWydvcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50YWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRoaXMudGFnc1tpXSwgaXRlbSA9ICg8YW55PnRoaXMpWyd0YWdfJyArIGVsZW1lbnQucmVwbGFjZSgvXFwuL2csICdfJyldO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlai5pc051bGxPclVuZGVmaW5lZChpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChlbGVtZW50LCBpdGVtLmdldExpc3QoKSwgdGhpcy5tb2RlbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5pbnB1dHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eSA9IHRoaXMuaW5wdXRzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1vZGVsUHJvcGVydHkgPSB0aGlzLmlucHV0c1tpXS5yZXBsYWNlKCdfaW5wdXQnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDxhbnk+dGhpcylbcHJvcGVydHldICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZWxQcm9wZXJ0eS5pbmRleE9mKCdfJykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCg8YW55PnRoaXMubW9kZWwpW21vZGVsUHJvcGVydHldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCAoPGFueT50aGlzLm1vZGVsKVttb2RlbFByb3BlcnR5XSwgKDxhbnk+dGhpcylbcHJvcGVydHldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMubW9kZWwpW21vZGVsUHJvcGVydHldID0gKDxhbnk+dGhpcylbcHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb2RlbFByb3BlcnR5LmluZGV4T2YoJ190d28nKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcE9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBtb2RlbFByb3BlcnR5LnJlcGxhY2UoL1xcXy9nLCAnLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlai5jcmVhdGVPYmplY3Qoa2V5LCAoPGFueT50aGlzKVtwcm9wZXJ0eV0sIHRlbXBPYmopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm9vdFByb3AgPSBrZXkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCg8YW55PnRoaXMubW9kZWwpW3Jvb3RQcm9wXSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLm1vZGVsKVtyb290UHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgKDxhbnk+dGhpcy5tb2RlbClbcm9vdFByb3BdLCB0ZW1wT2JqW3Jvb3RQcm9wXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50d293YXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdHdvd2F5ID0gdGhpcy50d293YXlzW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IHR3b3dheVByb3BlcnR5ID0gdHdvd2F5ICsgJ190d28nO1xyXG4gICAgICAgICAgICAgICAgaWYgKCg8YW55PnRoaXMpW3R3b3dheVByb3BlcnR5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR3b3dheS5pbmRleE9mKCdfJykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5tb2RlbClbdHdvd2F5UHJvcGVydHldID0gKDxhbnk+dGhpcylbdHdvd2F5UHJvcGVydHldO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wT2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IHR3b3dheS5yZXBsYWNlKC9cXF8vZywgJy4nKSArICdfdHdvJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGtleSwgKDxhbnk+dGhpcylbdHdvd2F5UHJvcGVydHldLCB0ZW1wT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvb3RQcm9wID0gdHdvd2F5UHJvcGVydHkuc3BsaXQoJ18nKVswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgKDxhbnk+dGhpcy5tb2RlbClbcm9vdFByb3BdLCB0ZW1wT2JqW3Jvb3RQcm9wXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IGpRdWVyeS5leHRlbmQodGhpcy5tb2RlbCwgKDxhbnk+dGhpcylbJ29wdGlvbnMnXSk7XHJcblxyXG4gICAgfVxyXG4gICAgbmdEb0NoZWNrKCkge1xyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZCgoPGFueT50aGlzKVsnb3B0aW9ucyddKSkge1xyXG4gICAgICAgICAgICB0aGlzLnR3b3dheXMuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzKVtlbGVtZW50ICsgJ190d28nXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoYW5nZXMgPSB0aGlzLmVqSXRlcmFibGUuZGlmZigoPGFueT50aGlzKVtlbGVtZW50ICsgJ190d28nXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5nQ2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0NoYW5nZXMgPSB0aGlzLmdldFR3b3dheUNoYW5nZXMoY2hhbmdlcy5jb2xsZWN0aW9uLCBuZ0NoYW5nZXMsIGVsZW1lbnQucmVwbGFjZSgvXFxfL2csICcuJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGVsZW1lbnQucmVwbGFjZSgvXFxfL2csICcuJykgKyAnLnR3bycsIGNoYW5nZXMuY29sbGVjdGlvbiwgbmdDaGFuZ2VzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMud2lkZ2V0KVsnc2V0TW9kZWwnXShuZ0NoYW5nZXMsICQuaXNQbGFpbk9iamVjdChuZ0NoYW5nZXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGNoYW5nZXMgPSB0aGlzLmVqS2V5VmFsdWVEaWYuZGlmZigoPGFueT50aGlzKVsnb3B0aW9ucyddKTtcclxuICAgICAgICAgICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLndpZGdldCAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbmdjaGFuZ2VzID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5mb3JFYWNoQ2hhbmdlZEl0ZW0oKGNoYW5nZWRwcm9wOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGNoYW5nZWRwcm9wLmtleSwgY2hhbmdlZHByb3AuY3VycmVudFZhbHVlLCBuZ2NoYW5nZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMud2lkZ2V0KVsnc2V0TW9kZWwnXShuZ2NoYW5nZXMsICQuaXNQbGFpbk9iamVjdChuZ2NoYW5nZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBsZXQgbmF0aXZlRWxlbWVudCA9IHRoaXMuaXNFZGl0b3IgPyAkKHRoaXMuZWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbikgOiAkKHRoaXMuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgbGV0IGNvbnRyb2xOYW1lOiBzdHJpbmcgPSB0aGlzLmxvd2VyQ2FzZUZpcnN0TGV0dGVyKHRoaXMuY29udHJvbE5hbWUpO1xyXG4gICAgICAgIHRoaXMud2lkZ2V0ID0gKCQobmF0aXZlRWxlbWVudCkgYXMgYW55KVtjb250cm9sTmFtZV0odGhpcy5tb2RlbClbY29udHJvbE5hbWVdKCdpbnN0YW5jZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvd2VyQ2FzZUZpcnN0TGV0dGVyKHN0cmluZzogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHN0cmluZ1swXS50b0xvd2VyQ2FzZSgpICsgc3RyaW5nLnNsaWNlKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgICAgICBpZiAodGhpcy5maXJzdENoZWNrKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGxldCBuZ0NoYW5nZXMgPSB7fTtcclxuICAgICAgICBpZiAoZWouaXNOdWxsT3JVbmRlZmluZWQoKDxhbnk+dGhpcylbJ29wdGlvbnMnXSkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gY2hhbmdlc1trZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucHJldmlvdXNWYWx1ZSA9PT0gZWxlbWVudC5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGtleSA9IGtleS5yZXBsYWNlKCdfaW5wdXQnLCAnJykucmVwbGFjZSgvXFxfL2csICcuJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmVuZHNXaXRoKCcudHdvJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgb0tleSA9IGtleS5yZXBsYWNlKCcudHdvJywgJycpO1xyXG4gICAgICAgICAgICAgICAgICAgIG5nQ2hhbmdlcyA9IHRoaXMuZ2V0VHdvd2F5Q2hhbmdlcyhlbGVtZW50LmN1cnJlbnRWYWx1ZSwgbmdDaGFuZ2VzLCBvS2V5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChrZXksIGVsZW1lbnQuY3VycmVudFZhbHVlLCBuZ0NoYW5nZXMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ3NldE1vZGVsJ10obmdDaGFuZ2VzLCAkLmlzUGxhaW5PYmplY3QobmdDaGFuZ2VzKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFR3b3dheUNoYW5nZXModmFsdWU6IGFueSwgbmdDaGFuZ2VzOiBhbnksIHByb3A6IHN0cmluZykge1xyXG4gICAgICAgIGxldCB2YWxGbiA9IGVqLmdldE9iamVjdChwcm9wLCAoPGFueT50aGlzLndpZGdldClbJ21vZGVsJ10pO1xyXG4gICAgICAgIHZhbEZuKHZhbHVlLCB0cnVlKTtcclxuICAgICAgICBlai5jcmVhdGVPYmplY3QocHJvcCwgdmFsRm4sIG5nQ2hhbmdlcyk7XHJcbiAgICAgICAgcmV0dXJuIG5nQ2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKSB7XHJcbiAgICAgICAgLy8gVE9ETzogQ2hhbmdlRGV0ZWN0aW9uIFRoaXJkL011bHRpIGxldmVsXHJcbiAgICAgICAgbGV0IGNoYW5nZXM6IElDaGFuZ2VTZXQgPSBVdGlscy5JdGVyYXRlQW5kR2V0Q2hhbmdlcyh0aGlzKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gY2hhbmdlcykge1xyXG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGNoYW5nZXNba2V5XTtcclxuICAgICAgICAgICAgICAgICg8YW55PnRoaXMud2lkZ2V0KVsnXycgKyBrZXldKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgICg8YW55PnRoaXMud2lkZ2V0KVsnZGVzdHJveSddKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENvbXBsZXhUYWdFbGVtZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gICAgcmVjZW50Q2hhbmdlczogYW55O1xyXG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcclxuICAgIGZpcnN0Q2hhbmdlOiBib29sZWFuO1xyXG4gICAgaW5kZXg6IG51bWJlcjtcclxuICAgIHZhbHVlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIHByb3RlY3RlZCBjb21wbGV4UHJvcGVydGllczogQXJyYXk8c3RyaW5nPjtcclxuICAgIHByb3BlcnR5OiBzdHJpbmc7XHJcbiAgICBwYXJlbnQ6IEJvbGRSZXBvcnRDb21wb25lbnRzPGFueSwgYW55PjtcclxuICAgIGNvbXBsZXhlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuICAgIC8vIHRhZ3M6IEFycmF5PHN0cmluZz47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHRhZ3M6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdwYXJlbnQnLCB7XHJcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgdmFsdWU6IG51bGxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjdXJyZW50VGVtcGxhdGVFbGVtZW50ID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIHRoaXMpIHtcclxuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKCdfJykgIT0gLTEgJiYga2V5LmluZGV4T2YoJ3RhZ18nKSA9PSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxleGVzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbXBsZXhlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB0aGlzLmNvbXBsZXhlc1tpXTtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5LmluZGV4T2YoJ18nKSAhPSAtMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBPYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgbGV0IGtleSA9IHByb3BlcnR5LnJlcGxhY2UoL1xcXy9nLCAnLicpO1xyXG4gICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGtleSwgKDxhbnk+dGhpcylbcHJvcGVydHldLCB0ZW1wT2JqKTtcclxuICAgICAgICAgICAgICAgIGxldCByb290UHJvcCA9IGtleS5zcGxpdCgnLicpWzBdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCg8YW55PnRoaXMpW3Jvb3RQcm9wXSA9PSB1bmRlZmluZWQpICg8YW55PnRoaXMpW3Jvb3RQcm9wXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgKDxhbnk+dGhpcylbcm9vdFByb3BdLCB0ZW1wT2JqW3Jvb3RQcm9wXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZW5zdXJlQ2xlYW5PYmplY3QoKSB7XHJcbiAgICAgICAgbGV0IHRhZ3MgPSB0aGlzLnRhZ3M7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gdGFnc1tpXSwgdGFnRWxlbWVudCA9ICg8YW55PnRoaXMpWyd0YWdfJyArIGVsZW1lbnQucmVwbGFjZSgvXFwuL2csICdfJyldO1xyXG5cclxuICAgICAgICAgICAgaWYgKGkgPT09IDAgJiYgKDxhbnk+dGhpcylbZWxlbWVudF0pIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZCh0YWdFbGVtZW50KSkgeyBjb250aW51ZTsgfVxyXG5cclxuICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGVsZW1lbnQsIHRhZ0VsZW1lbnQuZ2V0TGlzdCgpLCB0aGlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBba2V5OiBzdHJpbmddOiBTaW1wbGVDaGFuZ2UgfSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpcnN0Q2hhbmdlKSB7IHJldHVybjsgfVxyXG4gICAgICAgIHRoaXMucmVjZW50Q2hhbmdlcyA9IGNoYW5nZXM7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGFuZ2VzQW5kUmVzZXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ2hhbmdlcyA9PT0gZmFsc2UpIHsgcmV0dXJuOyB9XHJcblxyXG4gICAgICAgIGxldCBjaGFuZ2VzID0gdGhpcy5yZWNlbnRDaGFuZ2VzIHx8IHt9O1xyXG4gICAgICAgIGxldCBjb250ZW50Q2hhbmdlcyA9IFV0aWxzLkl0ZXJhdGVBbmRHZXRDaGFuZ2VzKHRoaXMpO1xyXG4gICAgICAgIGlmICghJC5pc0VtcHR5T2JqZWN0KGNvbnRlbnRDaGFuZ2VzKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4gY29udGVudENoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50Q2hhbmdlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBjb250ZW50Q2hhbmdlc1trZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZWwubmF0aXZlRWxlbWVudC5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVqLmlzTnVsbE9yVW5kZWZpbmVkKHRoaXMucGFyZW50LndpZGdldFsnXycgKyB0aGlzLnByb3BlcnR5LnJlcGxhY2UoL1xcLi9nLCAnXycpICsgJ18nICsga2V5XSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LndpZGdldFsnXycgKyB0aGlzLnByb3BlcnR5LnJlcGxhY2UoL1xcLi9nLCAnXycpICsgJ18nICsga2V5XShlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xyXG4gICAgICAgIGxldCB0YWdzID0gdGhpcy50YWdzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0YWdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gdGFnc1tpXSwgdGFnRWxlbWVudCA9ICg8YW55PnRoaXMpWyd0YWdfJyArIGVsZW1lbnQucmVwbGFjZSgvXFwuL2csICdfJyldO1xyXG4gICAgICAgICAgICBpZiAodGFnRWxlbWVudCAmJiB0YWdFbGVtZW50Lmhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEFycmF5VGFnRWxlbWVudDxUIGV4dGVuZHMgQ29tcGxleFRhZ0VsZW1lbnQ+IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XHJcbiAgICBsaXN0OiBBcnJheTxUPjtcclxuICAgIGNoaWxkcmVuOiBRdWVyeUxpc3Q8VD47XHJcbiAgICByZWNlbnRDaGFuZ2VzOiBBcnJheTxJQ2hpbGRDaGFuZ2U+O1xyXG4gICAgaGFzQ2hhbmdlczogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcHJvcGVydHlOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiBOZWVkIHRvIGNvbnNpZGVyIGR5bmFtaWMgY2hpbGQgY2hhbmdlXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gMDtcclxuICAgICAgICB0aGlzLmxpc3QgPSB0aGlzLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleCsrO1xyXG4gICAgICAgICAgICBjaGlsZC5wcm9wZXJ0eSA9IHRoaXMucHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGlzdCgpIHtcclxuICAgICAgICBsZXQgbGlzdCA9IHRoaXMubGlzdDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGlzdFtpXS5lbnN1cmVDbGVhbk9iamVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbGlzdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDaGFuZ2VzQW5kUmVzZXQoKTogQXJyYXk8SUNoaWxkQ2hhbmdlPiB7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZW50Q2hhbmdlcztcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XHJcbiAgICAgICAgbGV0IGNoYW5nZXMgPSB7fSwgcmVzOiBBcnJheTxJQ2hpbGRDaGFuZ2U+ID0gKDxhbnk+Y2hhbmdlcylbdGhpcy5wcm9wZXJ0eU5hbWVdID0gW10sIGNoaWxkQ2hhbmdlOiBhbnk7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsaXN0ID0gdGhpcy5saXN0OyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY2hpbGQgPSBsaXN0W2ldO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQuaGFzQ2hhbmdlcykge1xyXG4gICAgICAgICAgICAgICAgY2hpbGRDaGFuZ2UgPSBjaGlsZC5nZXRDaGFuZ2VzQW5kUmVzZXQoKTtcclxuICAgICAgICAgICAgICAgIGlmICghZWouaXNOdWxsT3JVbmRlZmluZWQoY2hpbGRDaGFuZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goPElDaGlsZENoYW5nZT57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjaGlsZC5pbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlOiBjaGlsZENoYW5nZVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNlbnRDaGFuZ2VzID0gcmVzO1xyXG4gICAgICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,7 @@
1
+ export * from './reportviewer.module';
2
+ export * from './reportdesigner.module';
3
+ export * from './reportviewer.component';
4
+ export * from './reportdesigner.component';
5
+ export * from './reports.module';
6
+ export * from './core';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9yZXBvcnR2aWV3ZXIubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9yZXBvcnRkZXNpZ25lci5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JlcG9ydHZpZXdlci5jb21wb25lbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL3JlcG9ydGRlc2lnbmVyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcmVwb3J0cy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvcmUnO1xyXG4iXX0=