@boldreports/angular-reporting-components 5.1.28 → 5.2.27
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/README.md +1 -2
- package/boldreports-angular-reporting-components.d.ts +5 -0
- package/core.d.ts +9 -1
- package/esm2020/boldreports-angular-reporting-components.mjs +5 -0
- package/esm2020/core.mjs +380 -0
- package/esm2020/index.mjs +7 -0
- package/esm2020/reportdesigner.component.mjs +305 -0
- package/esm2020/reportdesigner.module.mjs +26 -0
- package/esm2020/reports.module.mjs +34 -0
- package/esm2020/reportviewer.component.mjs +307 -0
- package/esm2020/reportviewer.module.mjs +26 -0
- package/fesm2015/boldreports-angular-reporting-components.mjs +1065 -0
- package/fesm2015/boldreports-angular-reporting-components.mjs.map +1 -0
- package/fesm2020/boldreports-angular-reporting-components.mjs +1065 -0
- package/fesm2020/boldreports-angular-reporting-components.mjs.map +1 -0
- package/index.d.ts +2 -0
- package/package.json +22 -30
- package/reportdesigner.component.d.ts +3 -1
- package/reportdesigner.module.d.ts +6 -0
- package/reports.module.d.ts +7 -0
- package/reportviewer.component.d.ts +4 -0
- package/reportviewer.module.d.ts +6 -0
- package/@boldreports/angular-reporting-components.es5.js +0 -821
- package/@boldreports/angular-reporting-components.es5.js.map +0 -1
- package/@boldreports/angular-reporting-components.js +0 -796
- package/@boldreports/angular-reporting-components.js.map +0 -1
- package/angular-reporting-components.d.ts +0 -6
- package/angular-reporting-components.metadata.json +0 -1
- package/bundles/angular-reporting-components.umd.js +0 -836
- package/bundles/angular-reporting-components.umd.js.map +0 -1
- package/bundles/angular-reporting-components.umd.min.js +0 -2
- package/bundles/angular-reporting-components.umd.min.js.map +0 -1
package/README.md
CHANGED
|
@@ -24,8 +24,7 @@ In case of any questions regarding the use of `Bold Reports Angular`, please [co
|
|
|
24
24
|
|
|
25
25
|
## Release Notes
|
|
26
26
|
|
|
27
|
-
Refer to the online `Bold Reports Angular
|
|
28
|
-
|
|
27
|
+
Refer to the online `Bold Reports Angular Product` [Release Notes](https://www.boldreports.com/release-history/).
|
|
29
28
|
|
|
30
29
|
## License Information
|
|
31
30
|
|
package/core.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { EventEmitter, QueryList, ElementRef, SimpleChange, ChangeDetectorRef, IterableDiffers, KeyValueDiffers, OnInit, DoCheck, AfterContentInit, AfterViewInit, OnChanges, AfterContentChecked, OnDestroy } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
2
3
|
export { ContentChild, Type, forwardRef } from '@angular/core';
|
|
3
4
|
export declare let currentTemplateElement: any;
|
|
4
5
|
export interface IParentTag {
|
|
@@ -11,9 +12,10 @@ export interface IChildChange {
|
|
|
11
12
|
export interface IChangeSet {
|
|
12
13
|
[key: string]: Array<IChildChange>;
|
|
13
14
|
}
|
|
14
|
-
/** Internal Helpers */
|
|
15
15
|
export declare class Utils {
|
|
16
16
|
static IterateAndGetChanges(obj: IParentTag): IChangeSet;
|
|
17
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<Utils, never>;
|
|
18
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<Utils>;
|
|
17
19
|
}
|
|
18
20
|
export declare class BoldReportComponents<W, T> implements IParentTag, OnInit, AfterContentInit, DoCheck, AfterViewInit, OnChanges, AfterContentChecked, OnDestroy {
|
|
19
21
|
protected controlName: string;
|
|
@@ -47,6 +49,8 @@ export declare class BoldReportComponents<W, T> implements IParentTag, OnInit, A
|
|
|
47
49
|
getTwowayChanges(value: any, ngChanges: any, prop: string): any;
|
|
48
50
|
ngAfterContentChecked(): void;
|
|
49
51
|
ngOnDestroy(): void;
|
|
52
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<BoldReportComponents<any, any>, never>;
|
|
53
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<BoldReportComponents<any, any>>;
|
|
50
54
|
}
|
|
51
55
|
export declare class ComplexTagElement implements OnInit, OnChanges, AfterContentChecked {
|
|
52
56
|
tags: Array<string>;
|
|
@@ -67,6 +71,8 @@ export declare class ComplexTagElement implements OnInit, OnChanges, AfterConten
|
|
|
67
71
|
}): void;
|
|
68
72
|
getChangesAndReset(): any;
|
|
69
73
|
ngAfterContentChecked(): void;
|
|
74
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ComplexTagElement, never>;
|
|
75
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ComplexTagElement>;
|
|
70
76
|
}
|
|
71
77
|
export declare class ArrayTagElement<T extends ComplexTagElement> implements AfterContentInit, AfterContentChecked {
|
|
72
78
|
propertyName: string;
|
|
@@ -79,4 +85,6 @@ export declare class ArrayTagElement<T extends ComplexTagElement> implements Aft
|
|
|
79
85
|
getList(): T[];
|
|
80
86
|
getChangesAndReset(): Array<IChildChange>;
|
|
81
87
|
ngAfterContentChecked(): void;
|
|
88
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ArrayTagElement<any>, never>;
|
|
89
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ArrayTagElement<any>>;
|
|
82
90
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9sZHJlcG9ydHMtYW5ndWxhci1yZXBvcnRpbmctY29tcG9uZW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ib2xkcmVwb3J0cy1hbmd1bGFyLXJlcG9ydGluZy1jb21wb25lbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|
package/esm2020/core.mjs
ADDED
|
@@ -0,0 +1,380 @@
|
|
|
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
|
+
}
|
|
22
|
+
Utils.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Utils, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
23
|
+
Utils.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Utils });
|
|
24
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: Utils, decorators: [{
|
|
25
|
+
type: Injectable
|
|
26
|
+
}] });
|
|
27
|
+
// tslint:disable-next-line:max-line-length
|
|
28
|
+
export class BoldReportComponents {
|
|
29
|
+
// tslint:disable-next-line:max-line-length
|
|
30
|
+
constructor(controlName, el, cdRef, tags, ejIterableDiffers, _ejKeyValueDiffers) {
|
|
31
|
+
this.controlName = controlName;
|
|
32
|
+
this.el = el;
|
|
33
|
+
this.cdRef = cdRef;
|
|
34
|
+
this.tags = tags;
|
|
35
|
+
this.ejIterableDiffers = ejIterableDiffers;
|
|
36
|
+
this._ejKeyValueDiffers = _ejKeyValueDiffers;
|
|
37
|
+
this.model = {};
|
|
38
|
+
this.outputs = [];
|
|
39
|
+
this.inputs = [];
|
|
40
|
+
this.twoways = [];
|
|
41
|
+
// this.__shadow = this.dom.getShadowRoot(this.el.nativeElement);
|
|
42
|
+
this.firstCheck = true;
|
|
43
|
+
this.ejIterable = this.ejIterableDiffers.find([]).create(null);
|
|
44
|
+
this.ejKeyValueDif = _ejKeyValueDiffers.find([]).create();
|
|
45
|
+
}
|
|
46
|
+
static bindAndRaiseEvent(instance, model, event) {
|
|
47
|
+
if (!event.startsWith('model.')) { // && instance[event]['observers'].length > 1) {
|
|
48
|
+
let originalEvt = event.startsWith('bold') ? event.substr(4) : event;
|
|
49
|
+
model[originalEvt] = function (params) {
|
|
50
|
+
instance[event + '_output']['emit'](params);
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
createTwoways(twoways) {
|
|
55
|
+
if (!twoways) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
let model = this.model;
|
|
59
|
+
for (let i = 0; i < twoways.length; i++) {
|
|
60
|
+
let element = twoways[i].replace(/\_/g, '.');
|
|
61
|
+
ej.createObject(element + 'Change', this[twoways[i] + '_twoChange'], model);
|
|
62
|
+
ej.createObject(element, this.addTwoways(element), model);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
addTwoways(prop) {
|
|
66
|
+
let model = this.model, value = firstVal; // , originalProp = prop.replace(/-/g, '.');
|
|
67
|
+
return function (newVal, isApp) {
|
|
68
|
+
if (value === firstVal) {
|
|
69
|
+
value = ej.getObject(prop + '_two', model);
|
|
70
|
+
if (value === undefined) {
|
|
71
|
+
value = ej.getObject(prop, this === undefined || this.defaults === undefined ? {} : this.defaults);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (newVal === undefined) {
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
if (value === newVal) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
value = newVal;
|
|
81
|
+
if (!isApp) {
|
|
82
|
+
ej.createObject(prop + '_two', newVal, model);
|
|
83
|
+
ej.getObject(prop + 'Change', model).emit(newVal);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
ngOnInit() {
|
|
88
|
+
for (let key in this) {
|
|
89
|
+
if (key.indexOf('_input') != -1)
|
|
90
|
+
this.inputs.push(key);
|
|
91
|
+
if (key.indexOf('_output') != -1)
|
|
92
|
+
this.outputs.push(key);
|
|
93
|
+
if (key.indexOf('_two') != -1 && key.indexOf('_twoChange') == -1)
|
|
94
|
+
this.twoways.push(key.replace('_two', ''));
|
|
95
|
+
}
|
|
96
|
+
if (ej.isNullOrUndefined(this['options'])) {
|
|
97
|
+
this.createTwoways(this.twoways);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
ngAfterContentInit() {
|
|
101
|
+
this.firstCheck = false;
|
|
102
|
+
let model = this.model, events = this.outputs;
|
|
103
|
+
if (events) {
|
|
104
|
+
for (let i = 0; i < events.length; i++) {
|
|
105
|
+
let event = events[i].replace('_output', '');
|
|
106
|
+
BoldReportComponents.bindAndRaiseEvent(this, model, event);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (ej.isNullOrUndefined(this['options'])) {
|
|
110
|
+
for (let i = 0; i < this.tags.length; i++) {
|
|
111
|
+
let element = this.tags[i], item = this['tag_' + element.replace(/\./g, '_')];
|
|
112
|
+
if (!ej.isNullOrUndefined(item)) {
|
|
113
|
+
ej.createObject(element, item.getList(), this.model);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
for (let i = 0; i < this.inputs.length; i++) {
|
|
117
|
+
let property = this.inputs[i];
|
|
118
|
+
let modelProperty = this.inputs[i].replace('_input', '');
|
|
119
|
+
if (this[property] != null) {
|
|
120
|
+
if (modelProperty.indexOf('_') == -1) {
|
|
121
|
+
if (this.model[modelProperty]) {
|
|
122
|
+
$.extend(true, this.model[modelProperty], this[property]);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.model[modelProperty] = this[property];
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (modelProperty.indexOf('_two') == -1) {
|
|
129
|
+
let tempObj = {};
|
|
130
|
+
let key = modelProperty.replace(/\_/g, '.');
|
|
131
|
+
ej.createObject(key, this[property], tempObj);
|
|
132
|
+
let rootProp = key.split('.')[0];
|
|
133
|
+
if (this.model[rootProp] == undefined)
|
|
134
|
+
this.model[rootProp] = {};
|
|
135
|
+
$.extend(true, this.model[rootProp], tempObj[rootProp]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (let i = 0; i < this.twoways.length; i++) {
|
|
140
|
+
let twoway = this.twoways[i];
|
|
141
|
+
let twowayProperty = twoway + '_two';
|
|
142
|
+
if (this[twowayProperty] != null) {
|
|
143
|
+
if (twoway.indexOf('_') == -1) {
|
|
144
|
+
this.model[twowayProperty] = this[twowayProperty];
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
let tempObj = {};
|
|
148
|
+
let key = twoway.replace(/\_/g, '.') + '_two';
|
|
149
|
+
ej.createObject(key, this[twowayProperty], tempObj);
|
|
150
|
+
let rootProp = twowayProperty.split('_')[0];
|
|
151
|
+
$.extend(true, this.model[rootProp], tempObj[rootProp]);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else
|
|
157
|
+
this.model = jQuery.extend(this.model, this['options']);
|
|
158
|
+
}
|
|
159
|
+
ngDoCheck() {
|
|
160
|
+
if (ej.isNullOrUndefined(this['options'])) {
|
|
161
|
+
this.twoways.forEach(element => {
|
|
162
|
+
if (this[element + '_two'] instanceof Array) {
|
|
163
|
+
let changes = this.ejIterable.diff(this[element + '_two']);
|
|
164
|
+
if (changes) {
|
|
165
|
+
let ngChanges = {};
|
|
166
|
+
if (this.widget != undefined) {
|
|
167
|
+
ngChanges = this.getTwowayChanges(changes.collection, ngChanges, element.replace(/\_/g, '.'));
|
|
168
|
+
ej.createObject(element.replace(/\_/g, '.') + '.two', changes.collection, ngChanges);
|
|
169
|
+
this.widget['setModel'](ngChanges, $.isPlainObject(ngChanges));
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
let changes = this.ejKeyValueDif.diff(this['options']);
|
|
177
|
+
if (changes) {
|
|
178
|
+
if (this.widget != undefined) {
|
|
179
|
+
var ngchanges = {};
|
|
180
|
+
changes.forEachChangedItem((changedprop) => {
|
|
181
|
+
ej.createObject(changedprop.key, changedprop.currentValue, ngchanges);
|
|
182
|
+
});
|
|
183
|
+
this.widget['setModel'](ngchanges, $.isPlainObject(ngchanges));
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
ngAfterViewInit() {
|
|
189
|
+
let nativeElement = this.isEditor ? $(this.el.nativeElement.children) : $(this.el.nativeElement);
|
|
190
|
+
let controlName = this.lowerCaseFirstLetter(this.controlName);
|
|
191
|
+
this.widget = $(nativeElement)[controlName](this.model)[controlName]('instance');
|
|
192
|
+
}
|
|
193
|
+
lowerCaseFirstLetter(string) {
|
|
194
|
+
return string[0].toLowerCase() + string.slice(1);
|
|
195
|
+
}
|
|
196
|
+
ngOnChanges(changes) {
|
|
197
|
+
if (this.firstCheck) {
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
let ngChanges = {};
|
|
201
|
+
if (ej.isNullOrUndefined(this['options'])) {
|
|
202
|
+
for (let key in changes) {
|
|
203
|
+
let element = changes[key];
|
|
204
|
+
if (element.previousValue === element.currentValue) {
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
key = key.replace('_input', '').replace(/\_/g, '.');
|
|
208
|
+
if (key.endsWith('.two')) {
|
|
209
|
+
let oKey = key.replace('.two', '');
|
|
210
|
+
ngChanges = this.getTwowayChanges(element.currentValue, ngChanges, oKey);
|
|
211
|
+
}
|
|
212
|
+
ej.createObject(key, element.currentValue, ngChanges);
|
|
213
|
+
}
|
|
214
|
+
this.widget['setModel'](ngChanges, $.isPlainObject(ngChanges));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
getTwowayChanges(value, ngChanges, prop) {
|
|
218
|
+
let valFn = ej.getObject(prop, this.widget['model']);
|
|
219
|
+
valFn(value, true);
|
|
220
|
+
ej.createObject(prop, valFn, ngChanges);
|
|
221
|
+
return ngChanges;
|
|
222
|
+
}
|
|
223
|
+
ngAfterContentChecked() {
|
|
224
|
+
// TODO: ChangeDetection Third/Multi level
|
|
225
|
+
let changes = Utils.IterateAndGetChanges(this);
|
|
226
|
+
for (let key in changes) {
|
|
227
|
+
if (changes.hasOwnProperty(key)) {
|
|
228
|
+
let element = changes[key];
|
|
229
|
+
this.widget['_' + key](element);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
ngOnDestroy() {
|
|
234
|
+
this.widget['destroy']();
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
BoldReportComponents.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BoldReportComponents, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
|
|
238
|
+
BoldReportComponents.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BoldReportComponents });
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: BoldReportComponents, decorators: [{
|
|
240
|
+
type: Injectable
|
|
241
|
+
}], ctorParameters: function () { return [{ type: undefined }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: Array }, { type: i0.IterableDiffers }, { type: i0.KeyValueDiffers }]; } });
|
|
242
|
+
export class ComplexTagElement {
|
|
243
|
+
// tags: Array<string>;
|
|
244
|
+
constructor(tags) {
|
|
245
|
+
this.tags = tags;
|
|
246
|
+
this.valueChange = new EventEmitter();
|
|
247
|
+
this.complexes = [];
|
|
248
|
+
this.hasChanges = false;
|
|
249
|
+
this.firstChange = true;
|
|
250
|
+
Object.defineProperty(this, 'parent', {
|
|
251
|
+
enumerable: false,
|
|
252
|
+
writable: true,
|
|
253
|
+
value: null
|
|
254
|
+
});
|
|
255
|
+
currentTemplateElement = this;
|
|
256
|
+
}
|
|
257
|
+
ngOnInit() {
|
|
258
|
+
this.firstChange = false;
|
|
259
|
+
for (let key in this) {
|
|
260
|
+
if (key.indexOf('_') != -1 && key.indexOf('tag_') == -1)
|
|
261
|
+
this.complexes.push(key);
|
|
262
|
+
}
|
|
263
|
+
for (let i = 0; i < this.complexes.length; i++) {
|
|
264
|
+
let property = this.complexes[i];
|
|
265
|
+
if (property.indexOf('_') != -1) {
|
|
266
|
+
let tempObj = {};
|
|
267
|
+
let key = property.replace(/\_/g, '.');
|
|
268
|
+
ej.createObject(key, this[property], tempObj);
|
|
269
|
+
let rootProp = key.split('.')[0];
|
|
270
|
+
if (this[rootProp] == undefined)
|
|
271
|
+
this[rootProp] = {};
|
|
272
|
+
$.extend(true, this[rootProp], tempObj[rootProp]);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
ensureCleanObject() {
|
|
277
|
+
let tags = this.tags;
|
|
278
|
+
for (let i = 0; i < tags.length; i++) {
|
|
279
|
+
let element = tags[i], tagElement = this['tag_' + element.replace(/\./g, '_')];
|
|
280
|
+
if (i === 0 && this[element]) {
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (ej.isNullOrUndefined(tagElement)) {
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
ej.createObject(element, tagElement.getList(), this);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
ngOnChanges(changes) {
|
|
290
|
+
if (this.firstChange) {
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
this.recentChanges = changes;
|
|
294
|
+
this.hasChanges = true;
|
|
295
|
+
}
|
|
296
|
+
getChangesAndReset() {
|
|
297
|
+
if (this.hasChanges === false) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
let changes = this.recentChanges || {};
|
|
301
|
+
let contentChanges = Utils.IterateAndGetChanges(this);
|
|
302
|
+
if (!$.isEmptyObject(contentChanges)) {
|
|
303
|
+
for (let key in contentChanges) {
|
|
304
|
+
if (contentChanges.hasOwnProperty(key)) {
|
|
305
|
+
let element = contentChanges[key];
|
|
306
|
+
// this.el.nativeElement.
|
|
307
|
+
if (!ej.isNullOrUndefined(this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key]))
|
|
308
|
+
this.parent.widget['_' + this.property.replace(/\./g, '_') + '_' + key](element);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
this.hasChanges = false;
|
|
313
|
+
return changes;
|
|
314
|
+
}
|
|
315
|
+
ngAfterContentChecked() {
|
|
316
|
+
let tags = this.tags;
|
|
317
|
+
for (let i = 0, len = tags.length; i < len; i++) {
|
|
318
|
+
let element = tags[i], tagElement = this['tag_' + element.replace(/\./g, '_')];
|
|
319
|
+
if (tagElement && tagElement.hasChanges) {
|
|
320
|
+
this.hasChanges = true;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
ComplexTagElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ComplexTagElement, deps: [{ token: Array }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
326
|
+
ComplexTagElement.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ComplexTagElement });
|
|
327
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ComplexTagElement, decorators: [{
|
|
328
|
+
type: Injectable
|
|
329
|
+
}], ctorParameters: function () { return [{ type: Array }]; } });
|
|
330
|
+
export class ArrayTagElement {
|
|
331
|
+
constructor(propertyName) {
|
|
332
|
+
this.propertyName = propertyName;
|
|
333
|
+
this.hasChanges = false;
|
|
334
|
+
}
|
|
335
|
+
// TODO: Need to consider dynamic child change
|
|
336
|
+
ngAfterContentInit() {
|
|
337
|
+
let index = 0;
|
|
338
|
+
this.list = this.children.map((child) => {
|
|
339
|
+
child.index = index++;
|
|
340
|
+
child.property = this.propertyName;
|
|
341
|
+
return child;
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
getList() {
|
|
345
|
+
let list = this.list;
|
|
346
|
+
for (let i = 0; i < list.length; i++) {
|
|
347
|
+
list[i].ensureCleanObject();
|
|
348
|
+
}
|
|
349
|
+
return list;
|
|
350
|
+
}
|
|
351
|
+
getChangesAndReset() {
|
|
352
|
+
this.hasChanges = false;
|
|
353
|
+
return this.recentChanges;
|
|
354
|
+
}
|
|
355
|
+
ngAfterContentChecked() {
|
|
356
|
+
let changes = {}, res = changes[this.propertyName] = [], childChange;
|
|
357
|
+
for (let i = 0, list = this.list; i < list.length; i++) {
|
|
358
|
+
let child = list[i];
|
|
359
|
+
if (child.hasChanges) {
|
|
360
|
+
childChange = child.getChangesAndReset();
|
|
361
|
+
if (!ej.isNullOrUndefined(childChange)) {
|
|
362
|
+
res.push({
|
|
363
|
+
index: child.index,
|
|
364
|
+
change: childChange
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
if (res.length > 0) {
|
|
370
|
+
this.recentChanges = res;
|
|
371
|
+
this.hasChanges = true;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
ArrayTagElement.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ArrayTagElement, deps: "invalid", target: i0.ɵɵFactoryTarget.Injectable });
|
|
376
|
+
ArrayTagElement.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ArrayTagElement });
|
|
377
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.0", ngImport: i0, type: ArrayTagElement, decorators: [{
|
|
378
|
+
type: Injectable
|
|
379
|
+
}], ctorParameters: function () { return [{ type: undefined }]; } });
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxZQUFZLEVBRXlFLFVBQVUsRUFFbEcsTUFBTSxlQUFlLENBQUM7O0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRCxNQUFNLENBQUMsSUFBSSxzQkFBMkIsQ0FBQztBQWlCdkMsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBR2xCLHVCQUF1QjtBQUN2QixNQUFNLE9BQU8sS0FBSztJQUNkLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxHQUFlO1FBQ3ZDLElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDekQsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksR0FBRyxHQUFlLEVBQUUsQ0FBQztRQUN6QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuRCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFTLEdBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM5QztTQUNKO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDOztrR0FiUSxLQUFLO3NHQUFMLEtBQUs7MkZBQUwsS0FBSztrQkFGakIsVUFBVTs7QUFvQlgsMkNBQTJDO0FBQzNDLE1BQU0sT0FBTyxvQkFBb0I7SUFxQjdCLDJDQUEyQztJQUMzQyxZQUFzQixXQUFtQixFQUFZLEVBQWMsRUFBWSxLQUF3QixFQUFTLElBQW1CLEVBQVUsaUJBQWtDLEVBQVUsa0JBQW1DO1FBQXRNLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQVksT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFZLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBZTtRQUFVLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBaUI7UUFBVSx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQWlCO1FBckJyTixVQUFLLEdBQVMsRUFBRSxDQUFDO1FBRWQsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFDNUIsV0FBTSxHQUFrQixFQUFFLENBQUM7UUFDM0IsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFrQmxDLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzlELENBQUM7SUFkTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsUUFBYSxFQUFFLEtBQVUsRUFBRSxLQUFhO1FBQ3JFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUMsZ0RBQWdEO1lBQzlFLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNyRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsVUFBVSxNQUFXO2dCQUN0QyxRQUFRLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2hELENBQUMsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQVNTLGFBQWEsQ0FBQyxPQUFzQjtRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQUUsT0FBTztTQUFFO1FBQ3pCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0MsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsUUFBUSxFQUFRLElBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbkYsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFUyxVQUFVLENBQUMsSUFBWTtRQUM3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyw0Q0FBNEM7UUFDdEYsT0FBTyxVQUFVLE1BQVcsRUFBRSxLQUFjO1lBQ3hDLElBQUksS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDcEIsS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDM0MsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO29CQUNyQixLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQ3RHO2FBQ0o7WUFDRCxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO2dCQUFFLE9BQU87YUFBRTtZQUNqQyxLQUFLLEdBQUcsTUFBTSxDQUFDO1lBQ2YsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDUixFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM5QyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3JEO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUNELFFBQVE7UUFDSixLQUFLLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtZQUNsQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQixJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBTyxJQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV4QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzlDLElBQUksTUFBTSxFQUFFO1lBQ1IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM3QyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO2FBQzlEO1NBQ0o7UUFDRCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBTyxJQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtZQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxHQUFTLElBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDckYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDN0IsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDeEQ7YUFDSjtZQUVELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDekMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxJQUFVLElBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7b0JBQy9CLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTt3QkFDbEMsSUFBVSxJQUFJLENBQUMsS0FBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFOzRCQUNsQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBUSxJQUFJLENBQUMsS0FBTSxDQUFDLGFBQWEsQ0FBQyxFQUFRLElBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3lCQUMzRTs2QkFBTTs0QkFDRyxJQUFJLENBQUMsS0FBTSxDQUFDLGFBQWEsQ0FBQyxHQUFTLElBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzt5QkFDNUQ7cUJBQ0o7eUJBQU0sSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUM1QyxJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUM7d0JBQ3RCLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QyxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBUSxJQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ3JELElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2pDLElBQVUsSUFBSSxDQUFDLEtBQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTOzRCQUNsQyxJQUFJLENBQUMsS0FBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt3QkFDckMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQVEsSUFBSSxDQUFDLEtBQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztxQkFDbEU7aUJBQ0o7YUFDSjtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsSUFBSSxjQUFjLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDckMsSUFBVSxJQUFLLENBQUMsY0FBYyxDQUFDLElBQUksSUFBSSxFQUFFO29CQUNyQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7d0JBQ3JCLElBQUksQ0FBQyxLQUFNLENBQUMsY0FBYyxDQUFDLEdBQVMsSUFBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUNuRTt5QkFBTTt3QkFDSCxJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUM7d0JBQ3RCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQzt3QkFDOUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQVEsSUFBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO3dCQUMzRCxJQUFJLFFBQVEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM1QyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBUSxJQUFJLENBQUMsS0FBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3FCQUNsRTtpQkFDSjthQUNKO1NBQ0o7O1lBRUcsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQVEsSUFBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFdkUsQ0FBQztJQUNELFNBQVM7UUFDTCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBTyxJQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDM0IsSUFBVSxJQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxZQUFZLEtBQUssRUFBRTtvQkFDaEQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQU8sSUFBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxJQUFJLE9BQU8sRUFBRTt3QkFDVCxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7d0JBQ25CLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7NEJBQzFCLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQzs0QkFDOUYsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQzs0QkFDL0UsSUFBSSxDQUFDLE1BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3lCQUN6RTtxQkFDSjtpQkFDSjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBRU47YUFDSTtZQUNELElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFPLElBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQzlELElBQUksT0FBTyxFQUFFO2dCQUNULElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFTLEVBQUU7b0JBQzFCLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsV0FBZ0IsRUFBRSxFQUFFO3dCQUM1QyxFQUFFLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDMUUsQ0FBQyxDQUFDLENBQUM7b0JBQ0csSUFBSSxDQUFDLE1BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUN6RTthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBQ0QsZUFBZTtRQUNYLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakcsSUFBSSxXQUFXLEdBQVcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsTUFBTSxHQUFJLENBQUMsQ0FBQyxhQUFhLENBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELG9CQUFvQixDQUFDLE1BQWM7UUFDL0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXdDO1FBQ2hELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUNoQyxJQUFJLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFDbkIsSUFBSSxFQUFFLENBQUMsaUJBQWlCLENBQU8sSUFBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7WUFDOUMsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUU7Z0JBQ3JCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDM0IsSUFBSSxPQUFPLENBQUMsYUFBYSxLQUFLLE9BQU8sQ0FBQyxZQUFZLEVBQUU7b0JBQ2hELE1BQU07aUJBQ1Q7Z0JBQ0QsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDdEIsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQ25DLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzVFO2dCQUNELEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7YUFDekQ7WUFFSyxJQUFJLENBQUMsTUFBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDekU7SUFDTCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVSxFQUFFLFNBQWMsRUFBRSxJQUFZO1FBQ3JELElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFRLElBQUksQ0FBQyxNQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUM1RCxLQUFLLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25CLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN4QyxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLDBDQUEwQztRQUMxQyxJQUFJLE9BQU8sR0FBZSxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUU7WUFDckIsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxNQUFPLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFDO1NBQ0o7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNELElBQUksQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUNwQyxDQUFDOztpSEFyTlEsb0JBQW9CO3FIQUFwQixvQkFBb0I7MkZBQXBCLG9CQUFvQjtrQkFGaEMsVUFBVTt3SUF3QitHLEtBQUs7QUFtTS9ILE1BQU0sT0FBTyxpQkFBaUI7SUFXMUIsdUJBQXVCO0lBRXZCLFlBQW1CLElBQW1CO1FBQW5CLFNBQUksR0FBSixJQUFJLENBQWU7UUFSdEMsZ0JBQVcsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUlwRCxjQUFTLEdBQWtCLEVBQUUsQ0FBQztRQUsxQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDbEMsVUFBVSxFQUFFLEtBQUs7WUFDakIsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUNILHNCQUFzQixHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLEtBQUssSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ2xCLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEM7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDNUMsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzdCLElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxHQUFHLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFRLElBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDakMsSUFBVSxJQUFLLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUztvQkFBUSxJQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNuRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBUSxJQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7YUFDNUQ7U0FDSjtJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDYixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2xDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQVMsSUFBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXRGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBVSxJQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQUUsT0FBTzthQUFFO1lBQ2hELElBQUksRUFBRSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUFFLFNBQVM7YUFBRTtZQUVuRCxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDeEQ7SUFDTCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXdDO1FBQ2hELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU87U0FBRTtRQUNqQyxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLEtBQUssRUFBRTtZQUFFLE9BQU87U0FBRTtRQUUxQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztRQUN2QyxJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEVBQUU7WUFDbEMsS0FBSyxJQUFJLEdBQUcsSUFBSSxjQUFjLEVBQUU7Z0JBQzVCLElBQUksY0FBYyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDcEMsSUFBSSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNsQyx5QkFBeUI7b0JBQ3pCLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7d0JBQzlGLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUN4RjthQUNKO1NBQ0o7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxHQUFTLElBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN0RixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzthQUMxQjtTQUNKO0lBQ0wsQ0FBQzs7OEdBMUZRLGlCQUFpQixrQkFhRCxLQUFLO2tIQWJyQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVTswREFja0IsS0FBSztBQWlGbEMsTUFBTSxPQUFPLGVBQWU7SUFNeEIsWUFBbUIsWUFBb0I7UUFBcEIsaUJBQVksR0FBWixZQUFZLENBQVE7UUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxrQkFBa0I7UUFDZCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUN0QixLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDbkMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTztRQUNILElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDL0I7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsa0JBQWtCO1FBQ2QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxPQUFPLEdBQUcsRUFBRSxFQUFFLEdBQUcsR0FBOEIsT0FBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBZ0IsQ0FBQztRQUV0RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFO2dCQUNsQixXQUFXLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3BDLEdBQUcsQ0FBQyxJQUFJLENBQWU7d0JBQ25CLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSzt3QkFDbEIsTUFBTSxFQUFFLFdBQVc7cUJBQ3RCLENBQUMsQ0FBQztpQkFDTjthQUNKO1NBQ0o7UUFFRCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsR0FBRyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQzs7NEdBckRRLGVBQWU7Z0hBQWYsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEV2ZW50RW1pdHRlciwgUXVlcnlMaXN0LCBFbGVtZW50UmVmLCBTaW1wbGVDaGFuZ2UsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgSXRlcmFibGVEaWZmZXJzLCBLZXlWYWx1ZURpZmZlcnMsIE9uSW5pdCxcclxuICAgIERvQ2hlY2ssIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25EZXN0cm95LCBJbmplY3RhYmxlXHJcblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuZXhwb3J0IHsgQ29udGVudENoaWxkLCBUeXBlLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5leHBvcnQgbGV0IGN1cnJlbnRUZW1wbGF0ZUVsZW1lbnQ6IGFueTtcclxuXHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJUGFyZW50VGFnIHtcclxuICAgIHRhZ3M6IEFycmF5PGFueT47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNoaWxkQ2hhbmdlIHtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICBjaGFuZ2U6IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ2hhbmdlU2V0IHtcclxuICAgIFtrZXk6IHN0cmluZ106IEFycmF5PElDaGlsZENoYW5nZT47XHJcbn1cclxuXHJcbmxldCBmaXJzdFZhbCA9IHt9O1xyXG5cclxuQEluamVjdGFibGUoKVxyXG4vKiogSW50ZXJuYWwgSGVscGVycyAqL1xyXG5leHBvcnQgY2xhc3MgVXRpbHMge1xyXG4gICAgc3RhdGljIEl0ZXJhdGVBbmRHZXRDaGFuZ2VzKG9iajogSVBhcmVudFRhZyk6IElDaGFuZ2VTZXQge1xyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZChvYmoudGFncykgfHwgb2JqLnRhZ3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmVzOiBJQ2hhbmdlU2V0ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIHRhZ3MgPSBvYmoudGFnczsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRhZyA9IHRhZ3NbaV0sIHRhZ0VsZW1lbnQgPSAoPGFueT5vYmopWyd0YWdfJyArIHRhZy5yZXBsYWNlKC9cXC4vZywgJ18nKV07XHJcbiAgICAgICAgICAgIGlmICghZWouaXNOdWxsT3JVbmRlZmluZWQodGFnRWxlbWVudCkgJiYgdGFnRWxlbWVudC5oYXNDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICByZXNbdGFnXSA9IHRhZ0VsZW1lbnQuZ2V0Q2hhbmdlc0FuZFJlc2V0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH1cclxuXHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxyXG5leHBvcnQgY2xhc3MgQm9sZFJlcG9ydENvbXBvbmVudHM8VywgVD4gaW1wbGVtZW50cyBJUGFyZW50VGFnLCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIERvQ2hlY2ssIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgT25EZXN0cm95IHtcclxuICAgIHB1YmxpYyBtb2RlbDogVCA9IDxUPnt9O1xyXG4gICAgcHVibGljIHdpZGdldDogVztcclxuICAgIHByb3RlY3RlZCBvdXRwdXRzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBwcm90ZWN0ZWQgaW5wdXRzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBwcm90ZWN0ZWQgdHdvd2F5czogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgcHJvdGVjdGVkIGNvbXBsZXhQcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+O1xyXG4gICAgcHJvdGVjdGVkIGlzRWRpdG9yOiBib29sZWFuO1xyXG5cclxuICAgIHByaXZhdGUgZmlyc3RDaGVjazogYm9vbGVhbjtcclxuICAgIGVqSXRlcmFibGU6IGFueTtcclxuICAgIGVqS2V5VmFsdWVEaWY6IGFueTtcclxuXHJcbiAgICBwcml2YXRlIHN0YXRpYyBiaW5kQW5kUmFpc2VFdmVudChpbnN0YW5jZTogYW55LCBtb2RlbDogYW55LCBldmVudDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFldmVudC5zdGFydHNXaXRoKCdtb2RlbC4nKSkgey8vICYmIGluc3RhbmNlW2V2ZW50XVsnb2JzZXJ2ZXJzJ10ubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBsZXQgb3JpZ2luYWxFdnQgPSBldmVudC5zdGFydHNXaXRoKCdib2xkJykgPyBldmVudC5zdWJzdHIoNCkgOiBldmVudDtcclxuICAgICAgICAgICAgbW9kZWxbb3JpZ2luYWxFdnRdID0gZnVuY3Rpb24gKHBhcmFtczogYW55KSB7XHJcbiAgICAgICAgICAgICAgICBpbnN0YW5jZVtldmVudCArICdfb3V0cHV0J11bJ2VtaXQnXShwYXJhbXMpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjb250cm9sTmFtZTogc3RyaW5nLCBwcm90ZWN0ZWQgZWw6IEVsZW1lbnRSZWYsIHByb3RlY3RlZCBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHB1YmxpYyB0YWdzOiBBcnJheTxzdHJpbmc+LCBwcml2YXRlIGVqSXRlcmFibGVEaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsIHByaXZhdGUgX2VqS2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMpIHtcclxuICAgICAgICAvLyAgICAgICAgdGhpcy5fX3NoYWRvdyA9IHRoaXMuZG9tLmdldFNoYWRvd1Jvb3QodGhpcy5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB0aGlzLmZpcnN0Q2hlY2sgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWpJdGVyYWJsZSA9IHRoaXMuZWpJdGVyYWJsZURpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xyXG4gICAgICAgIHRoaXMuZWpLZXlWYWx1ZURpZiA9IF9laktleVZhbHVlRGlmZmVycy5maW5kKFtdKS5jcmVhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgY3JlYXRlVHdvd2F5cyh0d293YXlzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgaWYgKCF0d293YXlzKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGxldCBtb2RlbCA9IHRoaXMubW9kZWw7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0d293YXlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBlbGVtZW50ID0gdHdvd2F5c1tpXS5yZXBsYWNlKC9cXF8vZywgJy4nKTtcclxuICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGVsZW1lbnQgKyAnQ2hhbmdlJywgKDxhbnk+dGhpcylbdHdvd2F5c1tpXSArICdfdHdvQ2hhbmdlJ10sIG1vZGVsKTtcclxuICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGVsZW1lbnQsIHRoaXMuYWRkVHdvd2F5cyhlbGVtZW50KSwgbW9kZWwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYWRkVHdvd2F5cyhwcm9wOiBzdHJpbmcpOiBGdW5jdGlvbiB7XHJcbiAgICAgICAgbGV0IG1vZGVsID0gdGhpcy5tb2RlbCwgdmFsdWUgPSBmaXJzdFZhbDsgLy8gLCBvcmlnaW5hbFByb3AgPSBwcm9wLnJlcGxhY2UoLy0vZywgJy4nKTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG5ld1ZhbDogYW55LCBpc0FwcDogYm9vbGVhbikge1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGZpcnN0VmFsKSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGVqLmdldE9iamVjdChwcm9wICsgJ190d28nLCBtb2RlbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZWouZ2V0T2JqZWN0KHByb3AsIHRoaXMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLmRlZmF1bHRzID09PSB1bmRlZmluZWQgPyB7fSA6IHRoaXMuZGVmYXVsdHMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChuZXdWYWwgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbmV3VmFsKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbDtcclxuICAgICAgICAgICAgaWYgKCFpc0FwcCkge1xyXG4gICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KHByb3AgKyAnX3R3bycsIG5ld1ZhbCwgbW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgZWouZ2V0T2JqZWN0KHByb3AgKyAnQ2hhbmdlJywgbW9kZWwpLmVtaXQobmV3VmFsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGhpcykge1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19pbnB1dCcpICE9IC0xKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2YoJ19vdXRwdXQnKSAhPSAtMSlcclxuICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0cy5wdXNoKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignX3R3bycpICE9IC0xICYmIGtleS5pbmRleE9mKCdfdHdvQ2hhbmdlJykgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnR3b3dheXMucHVzaChrZXkucmVwbGFjZSgnX3R3bycsICcnKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZCgoPGFueT50aGlzKVsnb3B0aW9ucyddKSkge1xyXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVR3b3dheXModGhpcy50d293YXlzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIHRoaXMuZmlyc3RDaGVjayA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgbW9kZWwgPSB0aGlzLm1vZGVsLCBldmVudHMgPSB0aGlzLm91dHB1dHM7XHJcbiAgICAgICAgaWYgKGV2ZW50cykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGV2ZW50ID0gZXZlbnRzW2ldLnJlcGxhY2UoJ19vdXRwdXQnLCAnJyk7XHJcbiAgICAgICAgICAgICAgICBCb2xkUmVwb3J0Q29tcG9uZW50cy5iaW5kQW5kUmFpc2VFdmVudCh0aGlzLCBtb2RlbCwgZXZlbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlai5pc051bGxPclVuZGVmaW5lZCgoPGFueT50aGlzKVsnb3B0aW9ucyddKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSB0aGlzLnRhZ3NbaV0sIGl0ZW0gPSAoPGFueT50aGlzKVsndGFnXycgKyBlbGVtZW50LnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuICAgICAgICAgICAgICAgIGlmICghZWouaXNOdWxsT3JVbmRlZmluZWQoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBlai5jcmVhdGVPYmplY3QoZWxlbWVudCwgaXRlbS5nZXRMaXN0KCksIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcGVydHkgPSB0aGlzLmlucHV0c1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCBtb2RlbFByb3BlcnR5ID0gdGhpcy5pbnB1dHNbaV0ucmVwbGFjZSgnX2lucHV0JywgJycpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCg8YW55PnRoaXMpW3Byb3BlcnR5XSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGVsUHJvcGVydHkuaW5kZXhPZignXycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzLm1vZGVsKVttb2RlbFByb3BlcnR5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQodHJ1ZSwgKDxhbnk+dGhpcy5tb2RlbClbbW9kZWxQcm9wZXJ0eV0sICg8YW55PnRoaXMpW3Byb3BlcnR5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLm1vZGVsKVttb2RlbFByb3BlcnR5XSA9ICg8YW55PnRoaXMpW3Byb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobW9kZWxQcm9wZXJ0eS5pbmRleE9mKCdfdHdvJykgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBPYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gbW9kZWxQcm9wZXJ0eS5yZXBsYWNlKC9cXF8vZywgJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWouY3JlYXRlT2JqZWN0KGtleSwgKDxhbnk+dGhpcylbcHJvcGVydHldLCB0ZW1wT2JqKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvb3RQcm9wID0ga2V5LnNwbGl0KCcuJylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzLm1vZGVsKVtyb290UHJvcF0gPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxhbnk+dGhpcy5tb2RlbClbcm9vdFByb3BdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsICg8YW55PnRoaXMubW9kZWwpW3Jvb3RQcm9wXSwgdGVtcE9ialtyb290UHJvcF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHdvd2F5cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHR3b3dheSA9IHRoaXMudHdvd2F5c1tpXTtcclxuICAgICAgICAgICAgICAgIGxldCB0d293YXlQcm9wZXJ0eSA9IHR3b3dheSArICdfdHdvJztcclxuICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzKVt0d293YXlQcm9wZXJ0eV0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0d293YXkuaW5kZXhPZignXycpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICg8YW55PnRoaXMubW9kZWwpW3R3b3dheVByb3BlcnR5XSA9ICg8YW55PnRoaXMpW3R3b3dheVByb3BlcnR5XTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcE9iajogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSB0d293YXkucmVwbGFjZSgvXFxfL2csICcuJykgKyAnX3R3byc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChrZXksICg8YW55PnRoaXMpW3R3b3dheVByb3BlcnR5XSwgdGVtcE9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb290UHJvcCA9IHR3b3dheVByb3BlcnR5LnNwbGl0KCdfJylbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsICg8YW55PnRoaXMubW9kZWwpW3Jvb3RQcm9wXSwgdGVtcE9ialtyb290UHJvcF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSBqUXVlcnkuZXh0ZW5kKHRoaXMubW9kZWwsICg8YW55PnRoaXMpWydvcHRpb25zJ10pO1xyXG5cclxuICAgIH1cclxuICAgIG5nRG9DaGVjaygpIHtcclxuICAgICAgICBpZiAoZWouaXNOdWxsT3JVbmRlZmluZWQoKDxhbnk+dGhpcylbJ29wdGlvbnMnXSkpIHtcclxuICAgICAgICAgICAgdGhpcy50d293YXlzLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoKDxhbnk+dGhpcylbZWxlbWVudCArICdfdHdvJ10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGFuZ2VzID0gdGhpcy5lakl0ZXJhYmxlLmRpZmYoKDxhbnk+dGhpcylbZWxlbWVudCArICdfdHdvJ10pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZ0NoYW5nZXMgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0ICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdDaGFuZ2VzID0gdGhpcy5nZXRUd293YXlDaGFuZ2VzKGNoYW5nZXMuY29sbGVjdGlvbiwgbmdDaGFuZ2VzLCBlbGVtZW50LnJlcGxhY2UoL1xcXy9nLCAnLicpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChlbGVtZW50LnJlcGxhY2UoL1xcXy9nLCAnLicpICsgJy50d28nLCBjaGFuZ2VzLmNvbGxlY3Rpb24sIG5nQ2hhbmdlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ3NldE1vZGVsJ10obmdDaGFuZ2VzLCAkLmlzUGxhaW5PYmplY3QobmdDaGFuZ2VzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjaGFuZ2VzID0gdGhpcy5laktleVZhbHVlRGlmLmRpZmYoKDxhbnk+dGhpcylbJ29wdGlvbnMnXSk7XHJcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy53aWRnZXQgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5nY2hhbmdlcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZXMuZm9yRWFjaENoYW5nZWRJdGVtKChjaGFuZ2VkcHJvcDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChjaGFuZ2VkcHJvcC5rZXksIGNoYW5nZWRwcm9wLmN1cnJlbnRWYWx1ZSwgbmdjaGFuZ2VzKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ3NldE1vZGVsJ10obmdjaGFuZ2VzLCAkLmlzUGxhaW5PYmplY3QobmdjaGFuZ2VzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgbGV0IG5hdGl2ZUVsZW1lbnQgPSB0aGlzLmlzRWRpdG9yID8gJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW4pIDogJCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIGxldCBjb250cm9sTmFtZTogc3RyaW5nID0gdGhpcy5sb3dlckNhc2VGaXJzdExldHRlcih0aGlzLmNvbnRyb2xOYW1lKTtcclxuICAgICAgICB0aGlzLndpZGdldCA9ICgkKG5hdGl2ZUVsZW1lbnQpIGFzIGFueSlbY29udHJvbE5hbWVdKHRoaXMubW9kZWwpW2NvbnRyb2xOYW1lXSgnaW5zdGFuY2UnKTtcclxuICAgIH1cclxuXHJcbiAgICBsb3dlckNhc2VGaXJzdExldHRlcihzdHJpbmc6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiBzdHJpbmdbMF0udG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlyc3RDaGVjaykgeyByZXR1cm47IH1cclxuICAgICAgICBsZXQgbmdDaGFuZ2VzID0ge307XHJcbiAgICAgICAgaWYgKGVqLmlzTnVsbE9yVW5kZWZpbmVkKCg8YW55PnRoaXMpWydvcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBjaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudCA9IGNoYW5nZXNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnByZXZpb3VzVmFsdWUgPT09IGVsZW1lbnQuY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBrZXkgPSBrZXkucmVwbGFjZSgnX2lucHV0JywgJycpLnJlcGxhY2UoL1xcXy9nLCAnLicpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleS5lbmRzV2l0aCgnLnR3bycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9LZXkgPSBrZXkucmVwbGFjZSgnLnR3bycsICcnKTtcclxuICAgICAgICAgICAgICAgICAgICBuZ0NoYW5nZXMgPSB0aGlzLmdldFR3b3dheUNoYW5nZXMoZWxlbWVudC5jdXJyZW50VmFsdWUsIG5nQ2hhbmdlcywgb0tleSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlai5jcmVhdGVPYmplY3Qoa2V5LCBlbGVtZW50LmN1cnJlbnRWYWx1ZSwgbmdDaGFuZ2VzKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgKDxhbnk+dGhpcy53aWRnZXQpWydzZXRNb2RlbCddKG5nQ2hhbmdlcywgJC5pc1BsYWluT2JqZWN0KG5nQ2hhbmdlcykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRUd293YXlDaGFuZ2VzKHZhbHVlOiBhbnksIG5nQ2hhbmdlczogYW55LCBwcm9wOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgdmFsRm4gPSBlai5nZXRPYmplY3QocHJvcCwgKDxhbnk+dGhpcy53aWRnZXQpWydtb2RlbCddKTtcclxuICAgICAgICB2YWxGbih2YWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgZWouY3JlYXRlT2JqZWN0KHByb3AsIHZhbEZuLCBuZ0NoYW5nZXMpO1xyXG4gICAgICAgIHJldHVybiBuZ0NoYW5nZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCkge1xyXG4gICAgICAgIC8vIFRPRE86IENoYW5nZURldGVjdGlvbiBUaGlyZC9NdWx0aSBsZXZlbFxyXG4gICAgICAgIGxldCBjaGFuZ2VzOiBJQ2hhbmdlU2V0ID0gVXRpbHMuSXRlcmF0ZUFuZEdldENoYW5nZXModGhpcyk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IGluIGNoYW5nZXMpIHtcclxuICAgICAgICAgICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGVsZW1lbnQgPSBjaGFuZ2VzW2tleV07XHJcbiAgICAgICAgICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ18nICsga2V5XShlbGVtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICAoPGFueT50aGlzLndpZGdldClbJ2Rlc3Ryb3knXSgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDb21wbGV4VGFnRWxlbWVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICAgIHJlY2VudENoYW5nZXM6IGFueTtcclxuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XHJcbiAgICBmaXJzdENoYW5nZTogYm9vbGVhbjtcclxuICAgIGluZGV4OiBudW1iZXI7XHJcbiAgICB2YWx1ZUNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBwcm90ZWN0ZWQgY29tcGxleFByb3BlcnRpZXM6IEFycmF5PHN0cmluZz47XHJcbiAgICBwcm9wZXJ0eTogc3RyaW5nO1xyXG4gICAgcGFyZW50OiBCb2xkUmVwb3J0Q29tcG9uZW50czxhbnksIGFueT47XHJcbiAgICBjb21wbGV4ZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICAvLyB0YWdzOiBBcnJheTxzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB0YWdzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IHRydWU7XHJcblxyXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAncGFyZW50Jywge1xyXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcclxuICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBudWxsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3VycmVudFRlbXBsYXRlRWxlbWVudCA9IHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBpbiB0aGlzKSB7XHJcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZignXycpICE9IC0xICYmIGtleS5pbmRleE9mKCd0YWdfJykgPT0gLTEpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXhlcy5wdXNoKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb21wbGV4ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHByb3BlcnR5ID0gdGhpcy5jb21wbGV4ZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5pbmRleE9mKCdfJykgIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ZW1wT2JqOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBwcm9wZXJ0eS5yZXBsYWNlKC9cXF8vZywgJy4nKTtcclxuICAgICAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChrZXksICg8YW55PnRoaXMpW3Byb3BlcnR5XSwgdGVtcE9iaik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcm9vdFByb3AgPSBrZXkuc3BsaXQoJy4nKVswXTtcclxuICAgICAgICAgICAgICAgIGlmICgoPGFueT50aGlzKVtyb290UHJvcF0gPT0gdW5kZWZpbmVkKSAoPGFueT50aGlzKVtyb290UHJvcF0gPSB7fTtcclxuICAgICAgICAgICAgICAgICQuZXh0ZW5kKHRydWUsICg8YW55PnRoaXMpW3Jvb3RQcm9wXSwgdGVtcE9ialtyb290UHJvcF0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVuc3VyZUNsZWFuT2JqZWN0KCkge1xyXG4gICAgICAgIGxldCB0YWdzID0gdGhpcy50YWdzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRhZ3NbaV0sIHRhZ0VsZW1lbnQgPSAoPGFueT50aGlzKVsndGFnXycgKyBlbGVtZW50LnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChpID09PSAwICYmICg8YW55PnRoaXMpW2VsZW1lbnRdKSB7IHJldHVybjsgfVxyXG4gICAgICAgICAgICBpZiAoZWouaXNOdWxsT3JVbmRlZmluZWQodGFnRWxlbWVudCkpIHsgY29udGludWU7IH1cclxuXHJcbiAgICAgICAgICAgIGVqLmNyZWF0ZU9iamVjdChlbGVtZW50LCB0YWdFbGVtZW50LmdldExpc3QoKSwgdGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IHsgW2tleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgICAgICBpZiAodGhpcy5maXJzdENoYW5nZSkgeyByZXR1cm47IH1cclxuICAgICAgICB0aGlzLnJlY2VudENoYW5nZXMgPSBjaGFuZ2VzO1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhbmdlc0FuZFJlc2V0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXMgPT09IGZhbHNlKSB7IHJldHVybjsgfVxyXG5cclxuICAgICAgICBsZXQgY2hhbmdlcyA9IHRoaXMucmVjZW50Q2hhbmdlcyB8fCB7fTtcclxuICAgICAgICBsZXQgY29udGVudENoYW5nZXMgPSBVdGlscy5JdGVyYXRlQW5kR2V0Q2hhbmdlcyh0aGlzKTtcclxuICAgICAgICBpZiAoISQuaXNFbXB0eU9iamVjdChjb250ZW50Q2hhbmdlcykpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQga2V5IGluIGNvbnRlbnRDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudENoYW5nZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlbGVtZW50ID0gY29udGVudENoYW5nZXNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlai5pc051bGxPclVuZGVmaW5lZCh0aGlzLnBhcmVudC53aWRnZXRbJ18nICsgdGhpcy5wcm9wZXJ0eS5yZXBsYWNlKC9cXC4vZywgJ18nKSArICdfJyArIGtleV0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC53aWRnZXRbJ18nICsgdGhpcy5wcm9wZXJ0eS5yZXBsYWNlKC9cXC4vZywgJ18nKSArICdfJyArIGtleV0oZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBjaGFuZ2VzO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpIHtcclxuICAgICAgICBsZXQgdGFncyA9IHRoaXMudGFncztcclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGFncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgZWxlbWVudCA9IHRhZ3NbaV0sIHRhZ0VsZW1lbnQgPSAoPGFueT50aGlzKVsndGFnXycgKyBlbGVtZW50LnJlcGxhY2UoL1xcLi9nLCAnXycpXTtcclxuICAgICAgICAgICAgaWYgKHRhZ0VsZW1lbnQgJiYgdGFnRWxlbWVudC5oYXNDaGFuZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBcnJheVRhZ0VsZW1lbnQ8VCBleHRlbmRzIENvbXBsZXhUYWdFbGVtZW50PiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyQ29udGVudENoZWNrZWQge1xyXG4gICAgbGlzdDogQXJyYXk8VD47XHJcbiAgICBjaGlsZHJlbjogUXVlcnlMaXN0PFQ+O1xyXG4gICAgcmVjZW50Q2hhbmdlczogQXJyYXk8SUNoaWxkQ2hhbmdlPjtcclxuICAgIGhhc0NoYW5nZXM6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIHByb3BlcnR5TmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETzogTmVlZCB0byBjb25zaWRlciBkeW5hbWljIGNoaWxkIGNoYW5nZVxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgdGhpcy5saXN0ID0gdGhpcy5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgICAgICAgIGNoaWxkLmluZGV4ID0gaW5kZXgrKztcclxuICAgICAgICAgICAgY2hpbGQucHJvcGVydHkgPSB0aGlzLnByb3BlcnR5TmFtZTtcclxuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExpc3QoKSB7XHJcbiAgICAgICAgbGV0IGxpc3QgPSB0aGlzLmxpc3Q7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxpc3RbaV0uZW5zdXJlQ2xlYW5PYmplY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGxpc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hhbmdlc0FuZFJlc2V0KCk6IEFycmF5PElDaGlsZENoYW5nZT4ge1xyXG4gICAgICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlY2VudENoYW5nZXM7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGxldCBjaGFuZ2VzID0ge30sIHJlczogQXJyYXk8SUNoaWxkQ2hhbmdlPiA9ICg8YW55PmNoYW5nZXMpW3RoaXMucHJvcGVydHlOYW1lXSA9IFtdLCBjaGlsZENoYW5nZTogYW55O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbGlzdCA9IHRoaXMubGlzdDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gbGlzdFtpXTtcclxuICAgICAgICAgICAgaWYgKGNoaWxkLmhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgICAgIGNoaWxkQ2hhbmdlID0gY2hpbGQuZ2V0Q2hhbmdlc0FuZFJlc2V0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVqLmlzTnVsbE9yVW5kZWZpbmVkKGNoaWxkQ2hhbmdlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKDxJQ2hpbGRDaGFuZ2U+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogY2hpbGQuaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZTogY2hpbGRDaGFuZ2VcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVjZW50Q2hhbmdlcyA9IHJlcztcclxuICAgICAgICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -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=
|