igniteui-angular 16.1.29 → 16.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/directives/for-of/for_of.directive.mjs +12 -1
- package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +3 -2
- package/esm2022/lib/grids/grid-base.directive.mjs +5 -8
- package/esm2022/lib/grids/selection/selection.service.mjs +12 -16
- package/esm2022/lib/simple-combo/simple-combo.component.mjs +7 -6
- package/esm2022/lib/slider/slider.component.mjs +10 -8
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +6 -2
- package/fesm2022/igniteui-angular.mjs +47 -35
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/directives/for-of/for_of.directive.d.ts +5 -0
- package/lib/slider/slider.component.d.ts +1 -1
- package/lib/slider/thumb/thumb-slider.component.d.ts +2 -1
- package/package.json +1 -1
|
@@ -210,7 +210,6 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective {
|
|
|
210
210
|
if (event !== undefined) {
|
|
211
211
|
this.filterValue = this.searchValue = typeof event === 'string' ? event : event.target.value;
|
|
212
212
|
}
|
|
213
|
-
this._onChangeCallback(this.searchValue);
|
|
214
213
|
if (this.collapsed && this.comboInput.focused) {
|
|
215
214
|
this.open();
|
|
216
215
|
}
|
|
@@ -244,10 +243,12 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective {
|
|
|
244
243
|
if (filtered === null || filtered === undefined) {
|
|
245
244
|
return;
|
|
246
245
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
246
|
+
if (!this.dropdown.collapsed) {
|
|
247
|
+
this.select(this.dropdown.focusedItem.itemID);
|
|
248
|
+
event.preventDefault();
|
|
249
|
+
event.stopPropagation();
|
|
250
|
+
this.close();
|
|
251
|
+
}
|
|
251
252
|
// manually trigger text selection as it will not be triggered during editing
|
|
252
253
|
this.textSelection.trigger();
|
|
253
254
|
return;
|
|
@@ -499,4 +500,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.8", ngImpor
|
|
|
499
500
|
type: HostListener,
|
|
500
501
|
args: ['keydown.Alt.ArrowDown', ['$event']]
|
|
501
502
|
}] } });
|
|
502
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWNvbWJvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQytCLFNBQVMsRUFBdUIsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQ3BHLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUM5QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FB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Q0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvcixcbiAgICBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElneENvbWJvQWRkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLWFkZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tYm8vY29tYm8tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvQVBJU2VydmljZSB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLmFwaSc7XG5pbXBvcnQgeyBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUsIElHWF9DT01CT19DT01QT05FTlQgfSBmcm9tICcuLi9jb21iby9jb21iby5jb21tb24nO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LXNlbGVjdGlvbi90ZXh0LXNlbGVjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwVHlwZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneENvbWJvRmlsdGVyaW5nUGlwZSwgSWd4Q29tYm9Hcm91cGluZ1BpcGUgfSBmcm9tICcuLi9jb21iby9jb21iby5waXBlcyc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1uYXZpZ2F0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudCc7XG5cbi8qKiBFbWl0dGVkIHdoZW4gYW4gaWd4LXNpbXBsZS1jb21ibydzIHNlbGVjdGlvbiBpcyBjaGFuZ2luZy4gICovXG5leHBvcnQgaW50ZXJmYWNlIElTaW1wbGVDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzIGV4dGVuZHMgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKiBBbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgdmFsdWUgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgKi9cbiAgICBvbGRTZWxlY3Rpb246IGFueTtcbiAgICAvKiogQW4gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBzZWxlY3RlZCBhZnRlciB0aGlzIGV2ZW50ICovXG4gICAgbmV3U2VsZWN0aW9uOiBhbnk7XG4gICAgLyoqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbWJvIHRleHQgYm94ICovXG4gICAgZGlzcGxheVRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZHJvcC1kb3duIGxpc3QgdGhhdCBwcm92aWRlcyBmaWx0ZXJpbmcgZnVuY3Rpb25hbGl0eSwgYWxsb3dpbmcgdXNlcnMgdG8gY2hvb3NlIGEgc2luZ2xlIG9wdGlvbiBmcm9tIGEgcHJlZGVmaW5lZCBsaXN0LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4U2ltcGxlQ29tYm9Nb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY29tYm8tdGhlbWVcbiAqIEBpZ3hLZXl3b3JkcyBjb21ib2JveCwgc2luZ2xlIGNvbWJvIHNlbGVjdGlvblxuICogQGlneEdyb3VwIEdyaWRzICYgTGlzdHNcbiAqXG4gKiBAcmVtYXJrc1xuICogSXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZmlsdGVyIGl0ZW1zIGFzIHdlbGwgYXMgcGVyZm9ybSBzaW5nbGUgc2VsZWN0aW9uIG9uIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQWRkaXRpb25hbGx5LCBpdCBleHBvc2VzIGtleWJvYXJkIG5hdmlnYXRpb24gYW5kIGN1c3RvbSBzdHlsaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXNpbXBsZS1jb21ibyBbaXRlbXNNYXhIZWlnaHRdPVwiMjUwXCIgW2RhdGFdPVwibG9jYXRpb25EYXRhXCJcbiAqICBbZGlzcGxheUtleV09XCInZmllbGQnXCIgW3ZhbHVlS2V5XT1cIidmaWVsZCdcIlxuICogIHBsYWNlaG9sZGVyPVwiTG9jYXRpb25cIiBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxuICogPC9pZ3gtc2ltcGxlLWNvbWJvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXNpbXBsZS1jb21ibycsXG4gICAgdGVtcGxhdGVVcmw6ICdzaW1wbGUtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hDb21ib0FQSVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0NPTUJPX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneFNpbXBsZUNvbWJvQ29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hTaW1wbGVDb21ib0NvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXREaXJlY3RpdmUsIElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmUsIE5nSWYsIElneFN1ZmZpeERpcmVjdGl2ZSwgTmdUZW1wbGF0ZU91dGxldCwgSWd4SWNvbkNvbXBvbmVudCwgSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudCwgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSwgSWd4Rm9yT2ZEaXJlY3RpdmUsIElneENvbWJvSXRlbUNvbXBvbmVudCwgSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50LCBJZ3hCdXR0b25EaXJlY3RpdmUsIElneFJpcHBsZURpcmVjdGl2ZSwgSWd4Q29tYm9GaWx0ZXJpbmdQaXBlLCBJZ3hDb21ib0dyb3VwaW5nUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4U2ltcGxlQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkcm9wZG93bjogSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50KVxuICAgIHB1YmxpYyBhZGRJdGVtOiBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gaXRlbSBzZWxlY3Rpb24gaXMgY2hhbmdpbmcsIGJlZm9yZSB0aGUgc2VsZWN0aW9uIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2ltcGxlLWNvbWJvIChzZWxlY3Rpb25DaGFuZ2luZyk9J2hhbmRsZVNlbGVjdGlvbigpJz48L2lneC1zaW1wbGUtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGlvbkNoYW5naW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJU2ltcGxlQ29tYm9TZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncz4oKTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4VGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHRleHRTZWxlY3Rpb246IElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY29tcG9zaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF91cGRhdGVJbnB1dCA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9jb2xsYXBzaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmVkRGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWREYXRhO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlcmVkRGF0YSh2YWw6IGFueVtdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJlZERhdGEgPSB0aGlzLmdyb3VwS2V5ID8gKHZhbCB8fCBbXSkuZmlsdGVyKChlKSA9PiBlLmlzSGVhZGVyICE9PSB0cnVlKSA6IHZhbDtcbiAgICAgICAgdGhpcy5jaGVja01hdGNoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWFyY2hWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoVmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2VhcmNoVmFsdWUodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoVmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRJdGVtKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0KHRoaXMuaWQpLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlLFxuICAgICAgICBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBfaWNvblNlcnZpY2U6IElneEljb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBzZWxlY3Rpb25TZXJ2aWNlLCBjb21ib0FQSSxcbiAgICAgICAgICAgIF9pY29uU2VydmljZSwgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucywgX2lucHV0R3JvdXBUeXBlLCBfaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmNvbWJvQVBJLnJlZ2lzdGVyKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkFycm93RG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpcnREaXIuaWd4Rm9yT2YubGVuZ3RoID4gMCAmJiAhdGhpcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5hdmlnYXRlTmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFsbG93Q3VzdG9tVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIGRlZmluZWQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0gdG8gYmUgc2VsZWN0ZWRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby5zZWxlY3QoXCJOZXcgWW9ya1wiKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkX2l0ZW1zKHRoaXMuaWQsIGl0ZW0gaW5zdGFuY2VvZiBBcnJheSA/IGl0ZW0gOiBbaXRlbV0sIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW1zIHRvIGJlIGRlc2VsZWN0ZWRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby5kZXNlbGVjdChcIk5ldyBZb3JrXCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RfaXRlbXModGhpcy5pZCwgdGhpcy5pc1ZhbGlkKHZhbHVlKSA/IFt2YWx1ZV0gOiBbXSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHN1cGVyLnNlbGVjdGlvbiwgb2xkU2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlS2V5ID8gc3VwZXIuc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogc3VwZXIuc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5fZGlzcGxheVZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlydERpci5jb250ZW50U2l6ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpcnREaXIuaWd4Rm9yT2YuZmluZEluZGV4KGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IGU/IGVbdGhpcy52YWx1ZUtleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlS2V5ID09PSBudWxsIHx8IHRoaXMudmFsdWVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT09IHRoaXMuc2VsZWN0aW9uWzBdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1JlbW90ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBpdGVtIG9ubHkgaWYgd2UgaGF2ZSBsb2NhbCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzIHdpdGggcmVtb3RlIGRhdGEgdGhpcyB3aWxsIGZpZGRsZSB3aXRoIGlneEZvcidzIHNjcm9sbCBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3aWxsIHRyaWdnZXIgYW5vdGhlciBjaHVuayBsb2FkIHdoaWNoIHdpbGwgYnJlYWsgdGhlIHZpc3VhbGl6YXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5uYXZpZ2F0ZUl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbmluZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdldEVkaXRFbGVtZW50KCkgJiYgIWFyZ3MuZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2xsYXBzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhck9uQmx1cigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW4gcmVhY3RpdmUgZm9ybSB0aGUgY29udHJvbCBpcyBub3QgcHJlc2VudCBpbml0aWFsbHlcbiAgICAgICAgLy8gYW5kIHNldHMgdGhlIHNlbGVjdGlvbiB0byBhbiBpbnZhbGlkIHZhbHVlIGluIHdyaXRlVmFsdWUgbWV0aG9kXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRJdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyKHRoaXMuaWQpO1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoICYmICF0aGlzLl9kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5zZWxlY3Rpb24sIFtdKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZUtleSA/IHRoaXMuc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogdGhpcy5zZWxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSA9IHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgPyBldmVudCA6IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuc2VhcmNoVmFsdWUpO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5jb21ib0lucHV0LmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb21ib0lucHV0LnZhbHVlLnRyaW0oKSAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjbGVhcmluZyBvZiBpbnB1dCBieSBzcGFjZVxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBmaWx0ZXJpbmcgdGhlIGZvY3VzZWQgaXRlbSBzaG91bGQgYmUgdGhlIGZpcnN0IGl0ZW0gb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtXG4gICAgICAgIGlmICghdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSB8fCB0aGlzLmRyb3Bkb3duLmZvY3VzZWRJdGVtLmlkICE9PSB0aGlzLmRyb3Bkb3duLml0ZW1zWzBdLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5hdmlnYXRlRmlyc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5oYW5kbGVJbnB1dENoYW5nZShldmVudCk7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gdGhpcy5wbGF0Zm9ybVV0aWwuS0VZTUFQLkVOVEVSKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQgPT09IG51bGwgfHwgZmlsdGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0KHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0uaXRlbUlEKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIC8vIG1hbnVhbGx5IHRyaWdnZXIgdGV4dCBzZWxlY3Rpb24gYXMgaXQgd2lsbCBub3QgYmUgdHJpZ2dlcmVkIGR1cmluZyBlZGl0aW5nXG4gICAgICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24udHJpZ2dlcigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5CQUNLU1BBQ0VcbiAgICAgICAgICAgIHx8IGV2ZW50LmtleSA9PT0gdGhpcy5wbGF0Zm9ybVV0aWwuS0VZTUFQLkRFTEVURSkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmNvbGxhcHNlZCAmJiBldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5UQUIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJPbkJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICBzdXBlci5oYW5kbGVLZXlEb3duKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlS2V5VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gdGhpcy5wbGF0Zm9ybVV0aWwuS0VZTUFQLkFSUk9XX0RPV04pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5maXJzdF9pdGVtKHRoaXMuaWQpO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSA9IGZpcnN0SXRlbSAmJiB0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyB0aGlzLmRyb3Bkb3duLml0ZW1zLmZpbmQoaSA9PiBpLml0ZW1JRCA9PT0gZmlyc3RJdGVtKVxuICAgICAgICAgICAgICAgIDogdGhpcy5kcm9wZG93bi5pdGVtc1swXTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUl0ZW1LZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5BUlJPV19VUCAmJiBldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5FTlRFUikge1xuICAgICAgICAgICAgdGhpcy5jb21ib0lucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlSXRlbUNsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIC8vIHdoZW4gY2xpY2tpbmcgdGhlIHRvZ2dsZSBidXR0b24gdG8gY2xvc2UgdGhlIGNvbWJvIGFuZCBpbW1lZGlhdGVseSBjbGlja2luZyBvdXRzaWRlIG9mIGl0XG4gICAgICAgIC8vIHRoZSBjb2xsYXBzZWQgc3RhdGUgaXMgbm90IG1vZGlmaWVkIGFzIHRoZSBkcm9wZG93biBpcyBzdGlsbCBub3QgY2xvc2VkXG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCB8fCB0aGlzLl9jb2xsYXBzaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIub25CbHVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm9JbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVDbGVhcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICBpZighdGhpcy5jb2xsYXBzZWQpe1xuICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIHRoaXMuY29tYm9JbnB1dC52YWx1ZSA9IHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmNvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlT3BlbmVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRyaWdnZXJDaGVjaygpO1xuICAgICAgICBpZiAoIXRoaXMuY29tYm9JbnB1dC5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGhhbmRsZUNsb3NpbmcoZTogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChlLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gZXhwbGljaXRseSB1cGRhdGUgc2VsZWN0aW9uIGFuZCB0cmlnZ2VyIHRleHQgc2VsZWN0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBmb3JjZSBDRFxuICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24udHJpZ2dlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBmb2N1c1NlYXJjaElucHV0KG9wZW5pbmc/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIub25DbGljayhldmVudCk7XG4gICAgICAgIGlmICh0aGlzLmNvbWJvSW5wdXQudmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnZpcnREaXIuc2Nyb2xsVG8oMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZEFsbE1hdGNoZXMgPSAoZWxlbWVudDogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5kaXNwbGF5S2V5ID8gZWxlbWVudFt0aGlzLmRpc3BsYXlLZXldIDogZWxlbWVudDtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICAgICAgICAvLyB3ZSBjYW4gYWNjZXB0IG51bGwsIHVuZGVmaW5lZCBhbmQgZW1wdHkgc3RyaW5ncyBhcyBlbXB0eSBkaXNwbGF5IHZhbHVlc1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VhcmNoVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlIHx8IHRoaXMuY29tYm9JbnB1dC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICEhc2VhcmNoVmFsdWUgJiYgdmFsdWUudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgIH07XG5cbiAgICBwcm90ZWN0ZWQgc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbjogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbkFzQXJyYXkgPSBuZXdTZWxlY3Rpb24gPyBBcnJheS5mcm9tKG5ld1NlbGVjdGlvbikgYXMgSWd4Q29tYm9JdGVtQ29tcG9uZW50W10gOiBbXTtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uQXNBcnJheSA9IEFycmF5LmZyb20odGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldCh0aGlzLmlkKSB8fCBbXSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gdGhpcy5jcmVhdGVEaXNwbGF5VGV4dCh0aGlzLmNvbnZlcnRLZXlzVG9JdGVtcyhuZXdTZWxlY3Rpb25Bc0FycmF5KSwgb2xkU2VsZWN0aW9uQXNBcnJheSk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElTaW1wbGVDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uOiBuZXdTZWxlY3Rpb25Bc0FycmF5WzBdLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBvbGRTZWxlY3Rpb25Bc0FycmF5WzBdLFxuICAgICAgICAgICAgZGlzcGxheVRleHQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFyZ3MubmV3U2VsZWN0aW9uICE9PSBhcmdzLm9sZFNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRPRE86IHJlZmFjdG9yIGJlbG93IGNvZGUgYXMgaXQgc2V0cyB0aGUgc2VsZWN0aW9uIGFuZCB0aGUgZGlzcGxheSB0ZXh0XG4gICAgICAgIGlmICghYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgIGxldCBhcmdzU2VsZWN0aW9uID0gdGhpcy5pc1ZhbGlkKGFyZ3MubmV3U2VsZWN0aW9uKVxuICAgICAgICAgICAgICAgID8gYXJncy5uZXdTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgYXJnc1NlbGVjdGlvbiA9IEFycmF5LmlzQXJyYXkoYXJnc1NlbGVjdGlvbikgPyBhcmdzU2VsZWN0aW9uIDogW2FyZ3NTZWxlY3Rpb25dO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdF9pdGVtcyh0aGlzLmlkLCBhcmdzU2VsZWN0aW9uLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gYXJnc1NlbGVjdGlvbjtcbiAgICAgICAgICAgIGlmICh0aGlzLl91cGRhdGVJbnB1dCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC52YWx1ZSA9IHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUgPSBkaXNwbGF5VGV4dCAhPT0gYXJncy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA/IGFyZ3MuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHRoaXMuc2VsZWN0aW9uLCBbYXJncy5vbGRTZWxlY3Rpb25dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soYXJncy5uZXdTZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlSW5wdXQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKG5ld1NlbGVjdGlvbkFzQXJyYXksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBjcmVhdGVEaXNwbGF5VGV4dChuZXdTZWxlY3Rpb246IGFueVtdLCBvbGRTZWxlY3Rpb246IGFueVtdKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMudmFsdWVLZXkgPyBuZXdTZWxlY3Rpb24ubWFwKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlS2V5XSkgOiBuZXdTZWxlY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW1vdGVTZWxlY3Rpb24oc2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUtleSAhPT0gbnVsbFxuICAgICAgICAgICAgJiYgdGhpcy5kaXNwbGF5S2V5ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICYmIG5ld1NlbGVjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3U2VsZWN0aW9uLmZpbHRlcihlID0+IGUpLm1hcChlID0+IGVbdGhpcy5kaXNwbGF5S2V5XSlbMF0/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3U2VsZWN0aW9uWzBdPy50b1N0cmluZygpIHx8ICcnO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBnZXRSZW1vdGVTZWxlY3Rpb24obmV3U2VsZWN0aW9uOiBhbnlbXSwgb2xkU2VsZWN0aW9uOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghbmV3U2VsZWN0aW9uLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclJlbW90ZUVudHJpZXMob2xkU2VsZWN0aW9uLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlZ2lzdGVyUmVtb3RlRW50cmllcyhvbGRTZWxlY3Rpb24sIGZhbHNlKTtcbiAgICAgICAgdGhpcy5yZWdpc3RlclJlbW90ZUVudHJpZXMobmV3U2VsZWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX3JlbW90ZVNlbGVjdGlvbikubWFwKGUgPT4gdGhpcy5fcmVtb3RlU2VsZWN0aW9uW2VdKVswXSB8fCAnJztcbiAgICB9XG5cbiAgICAvKiogQ29udGFpbnMga2V5LXZhbHVlIHBhaXJzIG9mIHRoZSBzZWxlY3RlZCB2YWx1ZUtleXMgYW5kIHRoZWlyIHJlc3AuIGRpc3BsYXlLZXlzICovXG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlZ2lzdGVyUmVtb3RlRW50cmllcyhpZHM6IGFueVtdLCBhZGQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0VmFsdWVEaXNwbGF5UGFpcnMoaWRzKVswXTtcblxuICAgICAgICBpZiAoYWRkICYmIHNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3RlU2VsZWN0aW9uW3NlbGVjdGlvblt0aGlzLnZhbHVlS2V5XV0gPSBzZWxlY3Rpb25bdGhpcy5kaXNwbGF5S2V5XS50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3RlU2VsZWN0aW9uID0ge307XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyU2VsZWN0aW9uKGlnbm9yZUZpbHRlcj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgbGV0IG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXRfZW1wdHkoKTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWREYXRhLmxlbmd0aCAhPT0gdGhpcy5kYXRhLmxlbmd0aCAmJiAhaWdub3JlRmlsdGVyKSB7XG4gICAgICAgICAgICBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZGVsZXRlX2l0ZW1zKHRoaXMuaWQsIHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXRfYWxsX2lkcyh0aGlzLmZpbHRlcmVkRGF0YSwgdGhpcy52YWx1ZUtleSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhck9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSB8fCB0aGlzLmNvbWJvSW5wdXQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCByZW1vdGVWYWx1ZSA9IE9iamVjdC5rZXlzKHRoaXMuX3JlbW90ZVNlbGVjdGlvbikubWFwKGUgPT4gdGhpcy5fcmVtb3RlU2VsZWN0aW9uW2VdKVswXSB8fCAnJztcbiAgICAgICAgICAgIGlmIChzZWFyY2hWYWx1ZSAhPT0gcmVtb3RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kTWF0Y2gpO1xuICAgICAgICAvLyBzZWxlY3RpbmcgbnVsbCBpbiBwcmltaXRpdmUgZGF0YSByZXR1cm5zIHVuZGVmaW5lZCBhcyB0aGUgc2VhcmNoIHRleHQgaXMgJycsIGJ1dCB0aGUgaXRlbSBpcyBudWxsXG4gICAgICAgIGlmIChmaWx0ZXJlZCA9PT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWN0ZWRJdGVtICE9PSBudWxsIHx8ICF0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RWxlbWVudFZhbChlbGVtZW50OiBhbnkpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCBlbGVtZW50VmFsID0gdGhpcy5kaXNwbGF5S2V5ID8gZWxlbWVudFt0aGlzLmRpc3BsYXlLZXldIDogZWxlbWVudDtcbiAgICAgICAgcmV0dXJuIFN0cmluZyhlbGVtZW50VmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICB0aGlzLmNvbWJvSW5wdXQudmFsdWUgPSB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVxdWlyZWRcbiAgICAgICAgPyB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgICA6IHZhbHVlICE9PSB1bmRlZmluZWQ7XG4gICAgfVxufVxuIiwiPGlneC1pbnB1dC1ncm91cCAjaW5wdXRHcm91cCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbdHlwZV09XCJ0eXBlXCI+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiW2lneExhYmVsXVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaWd4TGFiZWxdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeFwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1oaW50LCBbaWd4SGludF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8aW5wdXQgI2NvbWJvSW5wdXQgaWd4SW5wdXQgW3ZhbHVlXT1cImRpc3BsYXlWYWx1ZVswXVwiIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgYXJpYS1yZWFkb25seT1cImZhbHNlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhdGhpcy5kcm9wZG93bi5jb2xsYXBzZWRcIiBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInRoaXMuZHJvcGRvd24ubGlzdElkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRoaXMuYXJpYUxhYmVsbGVkQnkgfHwgdGhpcy5sYWJlbD8uaWQgfHwgdGhpcy5wbGFjZWhvbGRlclwiXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2lneFRleHRTZWxlY3Rpb25dPVwiIWNvbXBvc2luZ1wiXG4gICAgICAgIChpbnB1dCk9XCJoYW5kbGVJbnB1dENoYW5nZSgkZXZlbnQpXCIgKGNsaWNrKT1cImhhbmRsZUlucHV0Q2xpY2soKVwiXG4gICAgICAgIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGJsdXIpPVwib25CbHVyKClcIiAocGFzdGUpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiLz5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtc3VmZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1zdWZmaXhcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInNlbGVjdGlvbi5sZW5ndGhcIiBhcmlhLWxhYmVsPVwiQ2xlYXIgU2VsZWN0aW9uXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2NsZWFyLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbGVhcigkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFySWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhY2xlYXJJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIHt7IGNsZWFySWNvbiB9fVxuICAgICAgICA8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cblxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwic2hvd1NlYXJjaENhc2VJY29uXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJpbXgtaWNvbnNcIiBuYW1lPVwiY2FzZS1zZW5zaXRpdmVcIiBbYWN0aXZlXT1cImZpbHRlcmluZ09wdGlvbnMuY2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2FzZVNlbnNpdGl2ZSgpXCI+XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuXG4gICAgPGlneC1zdWZmaXggY2xhc3M9XCJpZ3gtY29tYm9fX3RvZ2dsZS1idXR0b25cIiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b2dnbGVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2dnbGVJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbGxhcHNlZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ3gtaWNvbiAqbmdJZj1cIiF0b2dnbGVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIHt7IHRvZ2dsZUljb24gfX1cbiAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG5cbjwvaWd4LWlucHV0LWdyb3VwPlxuXG48aWd4LWNvbWJvLWRyb3AtZG93biAjaWd4Q29tYm9Ecm9wRG93biBjbGFzcz1cImlneC1jb21ib19fZHJvcC1kb3duXCIgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCJcbiAgICBbbGFiZWxsZWRCeV09XCJ0aGlzLmFyaWFMYWJlbGxlZEJ5IHx8IHRoaXMubGFiZWw/LmlkIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgJydcIlxuICAgIFt3aWR0aF09XCJpdGVtc1dpZHRoIHx8ICcxMDAlJ1wiIChvcGVuaW5nKT1cImhhbmRsZU9wZW5pbmcoJGV2ZW50KVwiIChjbG9zaW5nKT1cImhhbmRsZUNsb3NpbmcoJGV2ZW50KVwiXG4gICAgKG9wZW5lZCk9XCJoYW5kbGVPcGVuZWQoKVwiIChjbG9zZWQpPVwiaGFuZGxlQ2xvc2VkKClcIiBbc2luZ2xlTW9kZV09XCJ0cnVlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlclRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiAjZHJvcGRvd25JdGVtQ29udGFpbmVyIGNsYXNzPVwiaWd4LWNvbWJvX19jb250ZW50XCIgW3N0eWxlLm92ZXJmbG93XT1cIidoaWRkZW4nXCJcbiAgICAgICAgW3N0eWxlLm1heEhlaWdodC5yZW1dPVwiaXRlbXNNYXhIZWlnaHRJblJlbVwiIFtpZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uXT1cImRyb3Bkb3duXCJcbiAgICAgICAgW3RhYmluZGV4XT1cImRyb3Bkb3duLmNvbGxhcHNlZCA/IC0xIDogMFwiIFthdHRyLmlkXT1cImRyb3Bkb3duLmlkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cInRoaXMuYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgICAgIChmb2N1cyk9XCJkcm9wZG93bi5vbkZvY3VzKClcIiAoa2V5ZG93bik9XCJoYW5kbGVJdGVtS2V5RG93bigkZXZlbnQpXCI+XG4gICAgICAgIDxpZ3gtY29tYm8taXRlbSBbcm9sZV09XCJpdGVtPy5pc0hlYWRlcj8gJ2dyb3VwJyA6ICdvcHRpb24nXCIgW3NpbmdsZU1vZGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbaXRlbUhlaWdodF09XCJpdGVtSGVpZ2h0XCIgKGNsaWNrKT1cImhhbmRsZUl0ZW1DbGljaygpXCIgKmlneEZvcj1cImxldCBpdGVtIG9mIGRhdGFcbiAgICAgICAgICAgICAgICB8IGNvbWJvRmlsdGVyaW5nOmZpbHRlclZhbHVlOmRpc3BsYXlLZXk6ZmlsdGVyaW5nT3B0aW9uczpmaWx0ZXJGdW5jdGlvblxuICAgICAgICAgICAgICAgIHwgY29tYm9Hcm91cGluZzpncm91cEtleTp2YWx1ZUtleTpncm91cFNvcnRpbmdEaXJlY3Rpb247XG4gICAgICAgICAgICAgICAgaW5kZXggYXMgcm93SW5kZXg7IGNvbnRhaW5lclNpemU6IGl0ZW1zTWF4SGVpZ2h0OyBzY3JvbGxPcmllbnRhdGlvbjogJ3ZlcnRpY2FsJzsgaXRlbVNpemU6IGl0ZW1IZWlnaHRcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCIgW2lzSGVhZGVyXT1cIml0ZW0/LmlzSGVhZGVyXCIgW2luZGV4XT1cInJvd0luZGV4XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbT8uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVySXRlbVRlbXBsYXRlID8gaGVhZGVySXRlbVRlbXBsYXRlIDogaGVhZGVySXRlbUJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW0sIGRhdGE6IGRhdGEsIHZhbHVlS2V5OiB2YWx1ZUtleSwgZ3JvdXBLZXk6IGdyb3VwS2V5LCBkaXNwbGF5S2V5OiBkaXNwbGF5S2V5fVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8IS0tIGlmIGl0ZW0gaXMgJ251bGwnIGl0IHNob3VsZCBiZSBkaXNwbGF5ZWQgYW5kICEhKGl0ZW0/LmlzSGVhZGVyKSB3b3VsZCByZXNvbHZlIGl0IHRvICdmYWxzZScgYW5kIG5vdCBkaXNwbGF5IGl0IC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtPy5pc0hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgI2xpc3RJdGVtXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW0sIGRhdGE6IGRhdGEsIHZhbHVlS2V5OiB2YWx1ZUtleSwgZGlzcGxheUtleTogZGlzcGxheUtleX07XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pZ3gtY29tYm8taXRlbT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtY29tYm9fX2FkZFwiICpuZ0lmPVwiZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMCB8fCBpc0FkZEJ1dHRvblZpc2libGUoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNvbWJvX19lbXB0eVwiICpuZ0lmPVwiZmlsdGVyZWREYXRhLmxlbmd0aCA9PT0gMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcHR5VGVtcGxhdGUgPyBlbXB0eVRlbXBsYXRlIDogZW1wdHlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGlneC1jb21iby1hZGQtaXRlbSAjYWRkSXRlbSBbaXRlbUhlaWdodF09XCJpdGVtSGVpZ2h0XCIgKm5nSWY9XCJpc0FkZEJ1dHRvblZpc2libGUoKVwiXG4gICAgICAgICAgICBbdGFiaW5kZXhdPVwiZHJvcGRvd24uY29sbGFwc2VkID8gLTEgOiBjdXN0b21WYWx1ZUZsYWcgPyAxIDogLTFcIiBjbGFzcz1cImlneC1jb21ib19fYWRkLWl0ZW1cIiByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJBZGQgSXRlbVwiIFtpbmRleF09XCJ2aXJ0dWFsU2Nyb2xsQ29udGFpbmVyLmlneEZvck9mLmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZEl0ZW1UZW1wbGF0ZSA/IGFkZEl0ZW1UZW1wbGF0ZSA6IGFkZEl0ZW1EZWZhdWx0XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pZ3gtY29tYm8tYWRkLWl0ZW0+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3RlclRlbXBsYXRlXCI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2lneC1jb21iby1kcm9wLWRvd24+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGxleCBsZXQtZGlzcGxheSBsZXQtZGF0YT1cImRhdGFcIiBsZXQta2V5PVwiZGlzcGxheUtleVwiPlxuICAgIHt7ZGlzcGxheVtrZXldfX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3ByaW1pdGl2ZSBsZXQtZGlzcGxheT5cbiAgICB7e2Rpc3BsYXl9fVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZW1wdHk+XG4gICAgPHNwYW4+e3tyZXNvdXJjZVN0cmluZ3MuaWd4X2NvbWJvX2VtcHR5X21lc3NhZ2V9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2FkZEl0ZW1EZWZhdWx0IGxldC1jb250cm9sPlxuICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGlneEJ1dHRvbj1cImZsYXRcIiBpZ3hSaXBwbGU+QWRkIGl0ZW08L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRlckl0ZW1CYXNlIGxldC1pdGVtIGxldC1rZXk9XCJ2YWx1ZUtleVwiIGxldC1ncm91cEtleT1cImdyb3VwS2V5XCI+XG4gICAge3sgaXRlbVtrZXldIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
503
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWNvbWJvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQytCLFNBQVMsRUFBdUIsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQ3BHLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUM5QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxtQkFBbUIsRUFBMEIsTUFBTSxpQkFBaUIsQ0FBQztBQUc5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx1REFBdUQsQ0FBQztBQUVsRyxPQUFPLEVBQXFCLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDakcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7OztBQVk5RTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBWUgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLHFCQUFxQjtJQTZCOUQsd0JBQXdCO0lBQ3hCLElBQVcsWUFBWTtRQUNuQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUNELHdCQUF3QjtJQUN4QixJQUFXLFlBQVksQ0FBQyxHQUFpQjtRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQzFGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsd0JBQXdCO0lBQ3hCLElBQW9CLFdBQVc7UUFDM0IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFDRCxJQUFvQixXQUFXLENBQUMsR0FBVztRQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLEdBQUcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBWSxZQUFZO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxZQUFZLFVBQXNCLEVBQzlCLEdBQXNCLEVBQ3RCLGdCQUF3QyxFQUN4QyxRQUE0QixFQUM1QixZQUE0QixFQUNwQixZQUEwQixFQUNPLHNCQUE4QyxFQUM3QyxlQUFrQyxFQUNoRSxTQUFtQjtRQUMvQixLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQzdDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFMOUQsaUJBQVksR0FBWixZQUFZLENBQWM7UUEvQ3RDOzs7Ozs7V0FNRztRQUVJLHNCQUFpQixHQUFHLElBQUksWUFBWSxFQUEwQyxDQUFDO1FBS3RGLHdCQUF3QjtRQUNqQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBRXBCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBc1VsQixtQkFBYyxHQUFHLENBQUMsT0FBWSxFQUFXLEVBQUU7WUFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ25FLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZELDBFQUEwRTtnQkFDMUUsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDOUQsT0FBTyxDQUFDLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDL0YsQ0FBQyxDQUFDO1FBM1NFLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCx3QkFBd0I7SUFHakIsV0FBVyxDQUFDLEtBQVk7UUFDM0IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2Y7YUFBTTtZQUNILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3hELElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEQ7aUJBQU0sSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUMvQztTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsSUFBUztRQUNuQixJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDcEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxRQUFRO1FBQ1gsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsVUFBVSxDQUFDLEtBQVU7UUFDeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RGLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2pHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVELHdCQUF3QjtJQUNSLGVBQWU7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDekUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDOUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzlDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7d0JBQ3ZELE9BQU8sR0FBRyxDQUFDLENBQUM7cUJBQ2Y7b0JBQ0QsT0FBTyxPQUFPLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekMsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2hCLDhDQUE4QztvQkFDOUMsb0VBQW9FO29CQUNwRSx5RUFBeUU7b0JBQ3pFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNyQzthQUNKO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3BFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDYixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDN0QsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDNUQsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUM3QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUMvRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDM0I7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLE9BQU87YUFDVjtZQUNELElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDdEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7YUFDM0I7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUM3QjtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7UUFFSCx3REFBd0Q7UUFDeEQsa0VBQWtFO1FBQ2xFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztTQUMzQjtRQUVELEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsd0JBQXdCO0lBQ1IsU0FBUztRQUNyQixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNuRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDbEc7UUFDRCxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELHdCQUF3QjtJQUNSLGlCQUFpQixDQUFDLEtBQVc7UUFDekMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7U0FDaEc7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7WUFDM0MsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDeEQsb0NBQW9DO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDekI7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsMEZBQTBGO1FBQzFGLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzFGLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDakM7UUFDRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixnQkFBZ0I7UUFDbkIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDM0I7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ1IsYUFBYSxDQUFDLEtBQW9CO1FBQzlDLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzdELElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUM3QyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzlDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDdkIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDaEI7WUFDRCw2RUFBNkU7WUFDN0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUM3QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUztlQUM3QyxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtZQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDL0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoQjtRQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixXQUFXLENBQUMsS0FBb0I7UUFDbkMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNuRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxTQUFTLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsQ0FBQztnQkFDakUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsaUJBQWlCLENBQUMsS0FBb0I7UUFDekMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2pFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDeEIsT0FBTztTQUNWO1FBQ0QsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtZQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzNCO0lBQ0wsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixlQUFlO1FBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHdCQUF3QjtJQUNSLE1BQU07UUFDbEIsNEZBQTRGO1FBQzVGLDBFQUEwRTtRQUMxRSxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDdEI7UUFDRCxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixjQUFjO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDekMsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixXQUFXLENBQUMsS0FBWTtRQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFDO1lBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9CO1FBQ0QsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDakUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELHdCQUF3QjtJQUNqQixZQUFZO1FBQ2YsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hEO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsd0JBQXdCO0lBQ1IsYUFBYSxDQUFDLENBQWtDO1FBQzVELE1BQU0sSUFBSSxHQUFvQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDdkIsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ1YsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsMkZBQTJGO1FBQzNGLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCx3QkFBd0I7SUFDakIsZ0JBQWdCLENBQUMsT0FBaUI7UUFDckMsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hEO2FBQU07WUFDSCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUN6QztJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDUixPQUFPLENBQUMsS0FBWTtRQUNoQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFZUyxZQUFZLENBQUMsWUFBaUI7UUFDcEMsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUE0QixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDcEcsTUFBTSxtQkFBbUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ2pGLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQzlHLE1BQU0sSUFBSSxHQUEyQztZQUNqRCxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDcEMsV0FBVztZQUNYLEtBQUssRUFBRSxJQUFJO1lBQ1gsTUFBTSxFQUFFLEtBQUs7U0FDaEIsQ0FBQztRQUNGLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDckM7UUFDRCwwRUFBMEU7UUFDMUUsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDZCxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQy9DLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWTtnQkFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNULGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLEtBQUssSUFBSSxDQUFDLFdBQVc7b0JBQzVGLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVztvQkFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDckU7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzVCO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUMxRDtJQUNMLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxZQUFtQixFQUFFLFlBQW1CO1FBQ2hFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNmLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUMvRixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDM0Q7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSTtlQUNyQixJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVM7ZUFDN0IsWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDNUIsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN4RjtRQUVELE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM3QyxDQUFDO0lBRWtCLGtCQUFrQixDQUFDLFlBQW1CLEVBQUUsWUFBbUI7UUFDMUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDdEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUMxRixDQUFDO0lBRUQscUZBQXFGO0lBQ2xFLHFCQUFxQixDQUFDLEdBQVUsRUFBRSxHQUFHLEdBQUcsSUFBSTtRQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFcEQsSUFBSSxHQUFHLElBQUksU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUMzRjthQUFNO1lBQ0gsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztTQUM5QjtJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsWUFBc0I7UUFDekMsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDaEUsWUFBWSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDbkk7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxXQUFXO1FBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztZQUM5RCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuRyxJQUFJLFdBQVcsS0FBSyxXQUFXLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNoQjtZQUNELE9BQU87U0FDVjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RCxvR0FBb0c7UUFDcEcsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDaEYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxPQUFZO1FBQzlCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sS0FBSztRQUNULElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN2RSxDQUFDO0lBRU8sT0FBTyxDQUFDLEtBQVU7UUFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUTtZQUNwQixDQUFDLENBQUMsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLEtBQUssS0FBSyxTQUFTO1lBQ3ZELENBQUMsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO0lBQzFCLENBQUM7OEdBemRRLHVCQUF1QiwrTUF5RFIsbUJBQW1CLDZCQUNuQixvQkFBb0I7a0dBMURuQyx1QkFBdUIseU9BUnJCO1lBQ1Asa0JBQWtCO1lBQ2xCLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRTtZQUN0RSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsdUJBQXVCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtTQUNwRixvRUFNVSx5QkFBeUIsd0ZBSXpCLHdCQUF3QixnRkFheEIseUJBQXlCLHFGQ3hGeEMsODlMQW9IQSw0Q0RqRGMsc0JBQXNCLG9JQUFFLGlCQUFpQiwwSEFBRSx5QkFBeUIsNkhBQUUsSUFBSSw2RkFBRSxrQkFBa0IsNEVBQUUsZ0JBQWdCLG9KQUFFLGdCQUFnQiwyRkFBRSx5QkFBeUIsd0ZBQUUsa0NBQWtDLCtHQUFFLGlCQUFpQixrWEFBRSxxQkFBcUIsOEdBQUUsd0JBQXdCLCtEQUFFLGtCQUFrQix3TUFBRSxrQkFBa0IsNEpBQUUscUJBQXFCLGtEQUFFLG9CQUFvQjs7MkZBRTNWLHVCQUF1QjtrQkFYbkMsU0FBUzsrQkFDSSxrQkFBa0IsYUFFakI7d0JBQ1Asa0JBQWtCO3dCQUNsQixFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLHlCQUF5QixFQUFFO3dCQUN0RSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLHlCQUF5QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQ3BGLGNBQ1csSUFBSSxXQUNQLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUseUJBQXlCLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLHlCQUF5QixFQUFFLGtDQUFrQyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLGtCQUFrQixFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLG9CQUFvQixDQUFDOzswQkEyRGhXLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDdEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxvQkFBb0I7OzBCQUN2QyxRQUFROzRDQXhETixRQUFRO3NCQURkLFNBQVM7dUJBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUsvQyxPQUFPO3NCQURiLFNBQVM7dUJBQUMsd0JBQXdCO2dCQVc1QixpQkFBaUI7c0JBRHZCLE1BQU07Z0JBSUMsYUFBYTtzQkFEcEIsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBaUQvQyxXQUFXO3NCQUZqQixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsUUFBUSxDQUFDOztzQkFDNUMsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5qZWN0LCBJbmplY3RvcixcbiAgICBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IElneENvbWJvQWRkSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLWFkZC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tYm8vY29tYm8tZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvSXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvQVBJU2VydmljZSB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLmFwaSc7XG5pbXBvcnQgeyBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUsIElHWF9DT01CT19DT01QT05FTlQgfSBmcm9tICcuLi9jb21iby9jb21iby5jb21tb24nO1xuaW1wb3J0IHsgRGlzcGxheURlbnNpdHlUb2tlbiwgSURpc3BsYXlEZW5zaXR5T3B0aW9ucyB9IGZyb20gJy4uL2NvcmUvZGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGb3JPZkRpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UmlwcGxlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LXNlbGVjdGlvbi90ZXh0LXNlbGVjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SWNvblNlcnZpY2UgfSBmcm9tICcuLi9pY29uL2ljb24uc2VydmljZSc7XG5pbXBvcnQgeyBJZ3hJbnB1dEdyb3VwVHlwZSwgSUdYX0lOUFVUX0dST1VQX1RZUEUgfSBmcm9tICcuLi9pbnB1dC1ncm91cC9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneENvbWJvRmlsdGVyaW5nUGlwZSwgSWd4Q29tYm9Hcm91cGluZ1BpcGUgfSBmcm9tICcuLi9jb21iby9jb21iby5waXBlcyc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bkl0ZW1OYXZpZ2F0aW9uRGlyZWN0aXZlIH0gZnJvbSAnLi4vZHJvcC1kb3duL2Ryb3AtZG93bi1uYXZpZ2F0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hJY29uQ29tcG9uZW50IH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hTdWZmaXhEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3N1ZmZpeC9zdWZmaXguZGlyZWN0aXZlJztcbmltcG9ydCB7IElneElucHV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9pbnB1dC9pbnB1dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4SW5wdXRHcm91cENvbXBvbmVudCB9IGZyb20gJy4uL2lucHV0LWdyb3VwL2lucHV0LWdyb3VwLmNvbXBvbmVudCc7XG5cbi8qKiBFbWl0dGVkIHdoZW4gYW4gaWd4LXNpbXBsZS1jb21ibydzIHNlbGVjdGlvbiBpcyBjaGFuZ2luZy4gICovXG5leHBvcnQgaW50ZXJmYWNlIElTaW1wbGVDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzIGV4dGVuZHMgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3Mge1xuICAgIC8qKiBBbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgdmFsdWUgdGhhdCBpcyBjdXJyZW50bHkgc2VsZWN0ZWQgKi9cbiAgICBvbGRTZWxlY3Rpb246IGFueTtcbiAgICAvKiogQW4gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSBzZWxlY3RlZCBhZnRlciB0aGlzIGV2ZW50ICovXG4gICAgbmV3U2VsZWN0aW9uOiBhbnk7XG4gICAgLyoqIFRoZSB0ZXh0IHRoYXQgd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlIGNvbWJvIHRleHQgYm94ICovXG4gICAgZGlzcGxheVRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZHJvcC1kb3duIGxpc3QgdGhhdCBwcm92aWRlcyBmaWx0ZXJpbmcgZnVuY3Rpb25hbGl0eSwgYWxsb3dpbmcgdXNlcnMgdG8gY2hvb3NlIGEgc2luZ2xlIG9wdGlvbiBmcm9tIGEgcHJlZGVmaW5lZCBsaXN0LlxuICpcbiAqIEBpZ3hNb2R1bGUgSWd4U2ltcGxlQ29tYm9Nb2R1bGVcbiAqIEBpZ3hUaGVtZSBpZ3gtY29tYm8tdGhlbWVcbiAqIEBpZ3hLZXl3b3JkcyBjb21ib2JveCwgc2luZ2xlIGNvbWJvIHNlbGVjdGlvblxuICogQGlneEdyb3VwIEdyaWRzICYgTGlzdHNcbiAqXG4gKiBAcmVtYXJrc1xuICogSXQgcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gZmlsdGVyIGl0ZW1zIGFzIHdlbGwgYXMgcGVyZm9ybSBzaW5nbGUgc2VsZWN0aW9uIG9uIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQWRkaXRpb25hbGx5LCBpdCBleHBvc2VzIGtleWJvYXJkIG5hdmlnYXRpb24gYW5kIGN1c3RvbSBzdHlsaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8aWd4LXNpbXBsZS1jb21ibyBbaXRlbXNNYXhIZWlnaHRdPVwiMjUwXCIgW2RhdGFdPVwibG9jYXRpb25EYXRhXCJcbiAqICBbZGlzcGxheUtleV09XCInZmllbGQnXCIgW3ZhbHVlS2V5XT1cIidmaWVsZCdcIlxuICogIHBsYWNlaG9sZGVyPVwiTG9jYXRpb25cIiBzZWFyY2hQbGFjZWhvbGRlcj1cIlNlYXJjaC4uLlwiPlxuICogPC9pZ3gtc2ltcGxlLWNvbWJvPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaWd4LXNpbXBsZS1jb21ibycsXG4gICAgdGVtcGxhdGVVcmw6ICdzaW1wbGUtY29tYm8uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBJZ3hDb21ib0FQSVNlcnZpY2UsXG4gICAgICAgIHsgcHJvdmlkZTogSUdYX0NPTUJPX0NPTVBPTkVOVCwgdXNlRXhpc3Rpbmc6IElneFNpbXBsZUNvbWJvQ29tcG9uZW50IH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hTaW1wbGVDb21ib0NvbXBvbmVudCwgbXVsdGk6IHRydWUgfVxuICAgIF0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbSWd4SW5wdXRHcm91cENvbXBvbmVudCwgSWd4SW5wdXREaXJlY3RpdmUsIElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmUsIE5nSWYsIElneFN1ZmZpeERpcmVjdGl2ZSwgTmdUZW1wbGF0ZU91dGxldCwgSWd4SWNvbkNvbXBvbmVudCwgSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudCwgSWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbkRpcmVjdGl2ZSwgSWd4Rm9yT2ZEaXJlY3RpdmUsIElneENvbWJvSXRlbUNvbXBvbmVudCwgSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50LCBJZ3hCdXR0b25EaXJlY3RpdmUsIElneFJpcHBsZURpcmVjdGl2ZSwgSWd4Q29tYm9GaWx0ZXJpbmdQaXBlLCBJZ3hDb21ib0dyb3VwaW5nUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4U2ltcGxlQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBJZ3hDb21ib0Jhc2VEaXJlY3RpdmUgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB7XG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgQFZpZXdDaGlsZChJZ3hDb21ib0Ryb3BEb3duQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBkcm9wZG93bjogSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50KVxuICAgIHB1YmxpYyBhZGRJdGVtOiBJZ3hDb21ib0FkZEl0ZW1Db21wb25lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0dGVkIHdoZW4gaXRlbSBzZWxlY3Rpb24gaXMgY2hhbmdpbmcsIGJlZm9yZSB0aGUgc2VsZWN0aW9uIGNvbXBsZXRlc1xuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2ltcGxlLWNvbWJvIChzZWxlY3Rpb25DaGFuZ2luZyk9J2hhbmRsZVNlbGVjdGlvbigpJz48L2lneC1zaW1wbGUtY29tYm8+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHNlbGVjdGlvbkNoYW5naW5nID0gbmV3IEV2ZW50RW1pdHRlcjxJU2ltcGxlQ29tYm9TZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncz4oKTtcblxuICAgIEBWaWV3Q2hpbGQoSWd4VGV4dFNlbGVjdGlvbkRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHRleHRTZWxlY3Rpb246IElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgY29tcG9zaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF91cGRhdGVJbnB1dCA9IHRydWU7XG5cbiAgICBwcml2YXRlIF9jb2xsYXBzaW5nID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmVkRGF0YSgpOiBhbnlbXSB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmlsdGVyZWREYXRhO1xuICAgIH1cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgc2V0IGZpbHRlcmVkRGF0YSh2YWw6IGFueVtdIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9maWx0ZXJlZERhdGEgPSB0aGlzLmdyb3VwS2V5ID8gKHZhbCB8fCBbXSkuZmlsdGVyKChlKSA9PiBlLmlzSGVhZGVyICE9PSB0cnVlKSA6IHZhbDtcbiAgICAgICAgdGhpcy5jaGVja01hdGNoKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBzZWFyY2hWYWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoVmFsdWU7XG4gICAgfVxuICAgIHB1YmxpYyBvdmVycmlkZSBzZXQgc2VhcmNoVmFsdWUodmFsOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoVmFsdWUgPSB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRJdGVtKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0KHRoaXMuaWQpLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBzZWxlY3Rpb25TZXJ2aWNlOiBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlLFxuICAgICAgICBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBfaWNvblNlcnZpY2U6IElneEljb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHBsYXRmb3JtVXRpbDogUGxhdGZvcm1VdGlsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KERpc3BsYXlEZW5zaXR5VG9rZW4pIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnM6IElEaXNwbGF5RGVuc2l0eU9wdGlvbnMsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoSUdYX0lOUFVUX0dST1VQX1RZUEUpIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIF9pbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgc3VwZXIoZWxlbWVudFJlZiwgY2RyLCBzZWxlY3Rpb25TZXJ2aWNlLCBjb21ib0FQSSxcbiAgICAgICAgICAgIF9pY29uU2VydmljZSwgX2Rpc3BsYXlEZW5zaXR5T3B0aW9ucywgX2lucHV0R3JvdXBUeXBlLCBfaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmNvbWJvQVBJLnJlZ2lzdGVyKHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24uQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFsdC5BcnJvd0Rvd24nLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBvbkFycm93RG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZpcnREaXIuaWd4Rm9yT2YubGVuZ3RoID4gMCAmJiAhdGhpcy5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5hdmlnYXRlTmV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFsbG93Q3VzdG9tVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtPy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIGRlZmluZWQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW0gdG8gYmUgc2VsZWN0ZWRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby5zZWxlY3QoXCJOZXcgWW9ya1wiKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0KGl0ZW06IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAoaXRlbSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuYWRkX2l0ZW1zKHRoaXMuaWQsIGl0ZW0gaW5zdGFuY2VvZiBBcnJheSA/IGl0ZW0gOiBbaXRlbV0sIHRydWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlc2VsZWN0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gdGhlIGl0ZW1zIHRvIGJlIGRlc2VsZWN0ZWRcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5jb21iby5kZXNlbGVjdChcIk5ldyBZb3JrXCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb2xkU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb247XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RfaXRlbXModGhpcy5pZCwgdGhpcy5pc1ZhbGlkKHZhbHVlKSA/IFt2YWx1ZV0gOiBbXSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLmNyZWF0ZURpc3BsYXlUZXh0KHN1cGVyLnNlbGVjdGlvbiwgb2xkU2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlS2V5ID8gc3VwZXIuc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogc3VwZXIuc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5fZGlzcGxheVZhbHVlPy50b1N0cmluZygpIHx8ICcnO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlydERpci5jb250ZW50U2l6ZUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnZpcnREaXIuaWd4Rm9yT2YuZmluZEluZGV4KGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IGU/IGVbdGhpcy52YWx1ZUtleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlS2V5ID09PSBudWxsIHx8IHRoaXMudmFsdWVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT09IHRoaXMuc2VsZWN0aW9uWzBdO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1JlbW90ZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBpdGVtIG9ubHkgaWYgd2UgaGF2ZSBsb2NhbCBkYXRhXG4gICAgICAgICAgICAgICAgICAgIC8vIGFzIHdpdGggcmVtb3RlIGRhdGEgdGhpcyB3aWxsIGZpZGRsZSB3aXRoIGlneEZvcidzIHNjcm9sbCBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFuZCB3aWxsIHRyaWdnZXIgYW5vdGhlciBjaHVuayBsb2FkIHdoaWNoIHdpbGwgYnJlYWsgdGhlIHZpc3VhbGl6YXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5uYXZpZ2F0ZUl0ZW0oaW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24ub3BlbmluZy5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5jYW5jZWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5kcm9wZG93bi5jbG9zaW5nLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmdldEVkaXRFbGVtZW50KCkgJiYgIWFyZ3MuZXZlbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb2xsYXBzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhck9uQmx1cigpO1xuICAgICAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gaW4gcmVhY3RpdmUgZm9ybSB0aGUgY29udHJvbCBpcyBub3QgcHJlc2VudCBpbml0aWFsbHlcbiAgICAgICAgLy8gYW5kIHNldHMgdGhlIHNlbGVjdGlvbiB0byBhbiBpbnZhbGlkIHZhbHVlIGluIHdyaXRlVmFsdWUgbWV0aG9kXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKHRoaXMuc2VsZWN0ZWRJdGVtKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyKHRoaXMuaWQpO1xuICAgICAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kYXRhPy5sZW5ndGggJiYgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoICYmICF0aGlzLl9kaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5zZWxlY3Rpb24sIFtdKTtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZUtleSA/IHRoaXMuc2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogdGhpcy5zZWxlY3Rpb247XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIubmdEb0NoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGhhbmRsZUlucHV0Q2hhbmdlKGV2ZW50PzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSA9IHR5cGVvZiBldmVudCA9PT0gJ3N0cmluZycgPyBldmVudCA6IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5jb21ib0lucHV0LmZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb21ib0lucHV0LnZhbHVlLnRyaW0oKSAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBjbGVhcmluZyBvZiBpbnB1dCBieSBzcGFjZVxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIodGhpcy5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBmaWx0ZXJpbmcgdGhlIGZvY3VzZWQgaXRlbSBzaG91bGQgYmUgdGhlIGZpcnN0IGl0ZW0gb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtXG4gICAgICAgIGlmICghdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSB8fCB0aGlzLmRyb3Bkb3duLmZvY3VzZWRJdGVtLmlkICE9PSB0aGlzLmRyb3Bkb3duLml0ZW1zWzBdLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5hdmlnYXRlRmlyc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5oYW5kbGVJbnB1dENoYW5nZShldmVudCk7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIGhhbmRsZUtleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gdGhpcy5wbGF0Zm9ybVV0aWwuS0VZTUFQLkVOVEVSKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQgPT09IG51bGwgfHwgZmlsdGVyZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5kcm9wZG93bi5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdCh0aGlzLmRyb3Bkb3duLmZvY3VzZWRJdGVtLml0ZW1JRCk7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBtYW51YWxseSB0cmlnZ2VyIHRleHQgc2VsZWN0aW9uIGFzIGl0IHdpbGwgbm90IGJlIHRyaWdnZXJlZCBkdXJpbmcgZWRpdGluZ1xuICAgICAgICAgICAgdGhpcy50ZXh0U2VsZWN0aW9uLnRyaWdnZXIoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuQkFDS1NQQUNFXG4gICAgICAgICAgICB8fCBldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5ERUxFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuVEFCKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyKCk7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5BUlJPV19ET1dOKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZmlyc3RfaXRlbSh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSBmaXJzdEl0ZW0gJiYgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bi5pdGVtcy5maW5kKGkgPT4gaS5pdGVtSUQgPT09IGZpcnN0SXRlbSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZHJvcGRvd24uaXRlbXNbMF07XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVJdGVtS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuQVJST1dfVVAgJiYgZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUl0ZW1DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICAvLyB3aGVuIGNsaWNraW5nIHRoZSB0b2dnbGUgYnV0dG9uIHRvIGNsb3NlIHRoZSBjb21ibyBhbmQgaW1tZWRpYXRlbHkgY2xpY2tpbmcgb3V0c2lkZSBvZiBpdFxuICAgICAgICAvLyB0aGUgY29sbGFwc2VkIHN0YXRlIGlzIG5vdCBtb2RpZmllZCBhcyB0aGUgZHJvcGRvd24gaXMgc3RpbGwgbm90IGNsb3NlZFxuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5fY29sbGFwc2luZykge1xuICAgICAgICAgICAgdGhpcy5jbGVhck9uQmx1cigpO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyLm9uQmx1cigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbWJvSW5wdXQubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlQ2xlYXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbih0cnVlKTtcbiAgICAgICAgaWYoIXRoaXMuY29sbGFwc2VkKXtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2hJbnB1dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICB0aGlzLmNvbWJvSW5wdXQudmFsdWUgPSB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmZvY3VzZWRJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb21ib0lucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZU9wZW5lZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyQ2hlY2soKTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbWJvSW5wdXQuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcGVuZWQuZW1pdCh7IG93bmVyOiB0aGlzIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBoYW5kbGVDbG9zaW5nKGU6IElCYXNlQ2FuY2VsYWJsZUJyb3dzZXJFdmVudEFyZ3MpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYXJnczogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyA9IHsgb3duZXI6IHRoaXMsIGV2ZW50OiBlLmV2ZW50LCBjYW5jZWw6IGUuY2FuY2VsIH07XG4gICAgICAgIHRoaXMuY2xvc2luZy5lbWl0KGFyZ3MpO1xuICAgICAgICBlLmNhbmNlbCA9IGFyZ3MuY2FuY2VsO1xuICAgICAgICBpZiAoZS5jYW5jZWwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIGV4cGxpY2l0bHkgdXBkYXRlIHNlbGVjdGlvbiBhbmQgdHJpZ2dlciB0ZXh0IHNlbGVjdGlvbiBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gZm9yY2UgQ0RcbiAgICAgICAgdGhpcy50ZXh0U2VsZWN0aW9uLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50ZXh0U2VsZWN0aW9uLnRyaWdnZXIoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZm9jdXNTZWFyY2hJbnB1dChvcGVuaW5nPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAob3BlbmluZykge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG92ZXJyaWRlIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5jb21ib0lucHV0LnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLnNjcm9sbFRvKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRBbGxNYXRjaGVzID0gKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGlzcGxheUtleSA/IGVsZW1lbnRbdGhpcy5kaXNwbGF5S2V5XSA6IGVsZW1lbnQ7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgLy8gd2UgY2FuIGFjY2VwdCBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5IHN0cmluZ3MgYXMgZW1wdHkgZGlzcGxheSB2YWx1ZXNcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSB8fCB0aGlzLmNvbWJvSW5wdXQudmFsdWU7XG4gICAgICAgIHJldHVybiAhIXNlYXJjaFZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb246IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25Bc0FycmF5ID0gbmV3U2VsZWN0aW9uID8gQXJyYXkuZnJvbShuZXdTZWxlY3Rpb24pIGFzIElneENvbWJvSXRlbUNvbXBvbmVudFtdIDogW107XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbkFzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCkgfHwgW10pO1xuICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQodGhpcy5jb252ZXJ0S2V5c1RvSXRlbXMobmV3U2VsZWN0aW9uQXNBcnJheSksIG9sZFNlbGVjdGlvbkFzQXJyYXkpO1xuICAgICAgICBjb25zdCBhcmdzOiBJU2ltcGxlQ29tYm9TZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbjogbmV3U2VsZWN0aW9uQXNBcnJheVswXSxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogb2xkU2VsZWN0aW9uQXNBcnJheVswXSxcbiAgICAgICAgICAgIGRpc3BsYXlUZXh0LFxuICAgICAgICAgICAgb3duZXI6IHRoaXMsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhcmdzLm5ld1NlbGVjdGlvbiAhPT0gYXJncy5vbGRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBUT0RPOiByZWZhY3RvciBiZWxvdyBjb2RlIGFzIGl0IHNldHMgdGhlIHNlbGVjdGlvbiBhbmQgdGhlIGRpc3BsYXkgdGV4dFxuICAgICAgICBpZiAoIWFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICBsZXQgYXJnc1NlbGVjdGlvbiA9IHRoaXMuaXNWYWxpZChhcmdzLm5ld1NlbGVjdGlvbilcbiAgICAgICAgICAgICAgICA/IGFyZ3MubmV3U2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgOiBbXTtcbiAgICAgICAgICAgIGFyZ3NTZWxlY3Rpb24gPSBBcnJheS5pc0FycmF5KGFyZ3NTZWxlY3Rpb24pID8gYXJnc1NlbGVjdGlvbiA6IFthcmdzU2VsZWN0aW9uXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3RfaXRlbXModGhpcy5pZCwgYXJnc1NlbGVjdGlvbiwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IGFyZ3NTZWxlY3Rpb247XG4gICAgICAgICAgICBpZiAodGhpcy5fdXBkYXRlSW5wdXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQudmFsdWUgPSB0aGlzLl9kaXNwbGF5VmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gZGlzcGxheVRleHQgIT09IGFyZ3MuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgPyBhcmdzLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jcmVhdGVEaXNwbGF5VGV4dCh0aGlzLnNlbGVjdGlvbiwgW2FyZ3Mub2xkU2VsZWN0aW9uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGFyZ3MubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyUmVtb3RlRW50cmllcyhuZXdTZWxlY3Rpb25Bc0FycmF5LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlRGlzcGxheVRleHQobmV3U2VsZWN0aW9uOiBhbnlbXSwgb2xkU2VsZWN0aW9uOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLnZhbHVlS2V5ID8gbmV3U2VsZWN0aW9uLm1hcChpdGVtID0+IGl0ZW1bdGhpcy52YWx1ZUtleV0pIDogbmV3U2VsZWN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVtb3RlU2VsZWN0aW9uKHNlbGVjdGlvbiwgb2xkU2VsZWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlLZXkgIT09IG51bGxcbiAgICAgICAgICAgICYmIHRoaXMuZGlzcGxheUtleSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAmJiBuZXdTZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ld1NlbGVjdGlvbi5maWx0ZXIoZSA9PiBlKS5tYXAoZSA9PiBlW3RoaXMuZGlzcGxheUtleV0pWzBdPy50b1N0cmluZygpIHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ld1NlbGVjdGlvblswXT8udG9TdHJpbmcoKSB8fCAnJztcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZ2V0UmVtb3RlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbjogYW55W10sIG9sZFNlbGVjdGlvbjogYW55W10pOiBzdHJpbmcge1xuICAgICAgICBpZiAoIW5ld1NlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKG9sZFNlbGVjdGlvbiwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZWdpc3RlclJlbW90ZUVudHJpZXMob2xkU2VsZWN0aW9uLCBmYWxzZSk7XG4gICAgICAgIHRoaXMucmVnaXN0ZXJSZW1vdGVFbnRyaWVzKG5ld1NlbGVjdGlvbik7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLl9yZW1vdGVTZWxlY3Rpb24pLm1hcChlID0+IHRoaXMuX3JlbW90ZVNlbGVjdGlvbltlXSlbMF0gfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIENvbnRhaW5zIGtleS12YWx1ZSBwYWlycyBvZiB0aGUgc2VsZWN0ZWQgdmFsdWVLZXlzIGFuZCB0aGVpciByZXNwLiBkaXNwbGF5S2V5cyAqL1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSByZWdpc3RlclJlbW90ZUVudHJpZXMoaWRzOiBhbnlbXSwgYWRkID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFZhbHVlRGlzcGxheVBhaXJzKGlkcylbMF07XG5cbiAgICAgICAgaWYgKGFkZCAmJiBzZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW90ZVNlbGVjdGlvbltzZWxlY3Rpb25bdGhpcy52YWx1ZUtleV1dID0gc2VsZWN0aW9uW3RoaXMuZGlzcGxheUtleV0udG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbW90ZVNlbGVjdGlvbiA9IHt9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhclNlbGVjdGlvbihpZ25vcmVGaWx0ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGxldCBuZXdTZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2VtcHR5KCk7XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcmVkRGF0YS5sZW5ndGggIT09IHRoaXMuZGF0YS5sZW5ndGggJiYgIWlnbm9yZUZpbHRlcikge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmRlbGV0ZV9pdGVtcyh0aGlzLmlkLCB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0X2FsbF9pZHModGhpcy5maWx0ZXJlZERhdGEsIHRoaXMudmFsdWVLZXkpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJPbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUgfHwgdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcmVtb3RlVmFsdWUgPSBPYmplY3Qua2V5cyh0aGlzLl9yZW1vdGVTZWxlY3Rpb24pLm1hcChlID0+IHRoaXMuX3JlbW90ZVNlbGVjdGlvbltlXSlbMF0gfHwgJyc7XG4gICAgICAgICAgICBpZiAoc2VhcmNoVmFsdWUgIT09IHJlbW90ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLmZpbHRlcmVkRGF0YS5maW5kKHRoaXMuZmluZE1hdGNoKTtcbiAgICAgICAgLy8gc2VsZWN0aW5nIG51bGwgaW4gcHJpbWl0aXZlIGRhdGEgcmV0dXJucyB1bmRlZmluZWQgYXMgdGhlIHNlYXJjaCB0ZXh0IGlzICcnLCBidXQgdGhlIGl0ZW0gaXMgbnVsbFxuICAgICAgICBpZiAoZmlsdGVyZWQgPT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjdGVkSXRlbSAhPT0gbnVsbCB8fCAhdGhpcy5zZWxlY3Rpb24ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRWYWwoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZWxlbWVudFZhbCA9IHRoaXMuZGlzcGxheUtleSA/IGVsZW1lbnRbdGhpcy5kaXNwbGF5S2V5XSA6IGVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBTdHJpbmcoZWxlbWVudFZhbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbih0cnVlKTtcbiAgICAgICAgdGhpcy5jb21ib0lucHV0LnZhbHVlID0gdGhpcy5fZGlzcGxheVZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmVkXG4gICAgICAgID8gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSB1bmRlZmluZWRcbiAgICAgICAgOiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbn1cbiIsIjxpZ3gtaW5wdXQtZ3JvdXAgI2lucHV0R3JvdXAgW2Rpc3BsYXlEZW5zaXR5XT1cImRpc3BsYXlEZW5zaXR5XCIgW3R5cGVdPVwidHlwZVwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cIltpZ3hMYWJlbF1cIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2lneExhYmVsXVwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJpZ3gtcHJlZml4XCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cImlneC1wcmVmaXhcIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnQsIFtpZ3hIaW50XVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGlucHV0ICNjb21ib0lucHV0IGlneElucHV0IFt2YWx1ZV09XCJkaXNwbGF5VmFsdWVbMF1cIiByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiIGFyaWEtYXV0b2NvbXBsZXRlPVwibGlzdFwiIGFyaWEtcmVhZG9ubHk9XCJmYWxzZVwiXG4gICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIXRoaXMuZHJvcGRvd24uY29sbGFwc2VkXCIgW2F0dHIuYXJpYS1jb250cm9sc109XCJ0aGlzLmRyb3Bkb3duLmxpc3RJZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJ0aGlzLmFyaWFMYWJlbGxlZEJ5IHx8IHRoaXMubGFiZWw/LmlkIHx8IHRoaXMucGxhY2Vob2xkZXJcIlxuICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIFtpZ3hUZXh0U2VsZWN0aW9uXT1cIiFjb21wb3NpbmdcIlxuICAgICAgICAoaW5wdXQpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIChjbGljayk9XCJoYW5kbGVJbnB1dENsaWNrKClcIlxuICAgICAgICAoa2V5dXApPVwiaGFuZGxlS2V5VXAoJGV2ZW50KVwiIChrZXlkb3duKT1cImhhbmRsZUtleURvd24oJGV2ZW50KVwiIChibHVyKT1cIm9uQmx1cigpXCIgKHBhc3RlKT1cImhhbmRsZUlucHV0Q2hhbmdlKCRldmVudClcIi8+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4XCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGlneC1zdWZmaXggKm5nSWY9XCJzZWxlY3Rpb24ubGVuZ3RoXCIgYXJpYS1sYWJlbD1cIkNsZWFyIFNlbGVjdGlvblwiIGNsYXNzPVwiaWd4LWNvbWJvX19jbGVhci1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xlYXIoJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2xlYXJJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjbGVhckljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGlneC1pY29uICpuZ0lmPVwiIWNsZWFySWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7eyBjbGVhckljb24gfX1cbiAgICAgICAgPC9pZ3gtaWNvbj5cbiAgICA8L2lneC1zdWZmaXg+XG5cbiAgICA8aWd4LXN1ZmZpeCAqbmdJZj1cInNob3dTZWFyY2hDYXNlSWNvblwiPlxuICAgICAgICA8aWd4LWljb24gZmFtaWx5PVwiaW14LWljb25zXCIgbmFtZT1cImNhc2Utc2Vuc2l0aXZlXCIgW2FjdGl2ZV09XCJmaWx0ZXJpbmdPcHRpb25zLmNhc2VTZW5zaXRpdmVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhc2VTZW5zaXRpdmUoKVwiPlxuICAgICAgICA8L2lneC1pY29uPlxuICAgIDwvaWd4LXN1ZmZpeD5cblxuICAgIDxpZ3gtc3VmZml4IGNsYXNzPVwiaWd4LWNvbWJvX190b2dnbGUtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidG9nZ2xlSWNvblRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBjb2xsYXBzZWR9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhdG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7eyB0b2dnbGVJY29uIH19XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuXG48L2lneC1pbnB1dC1ncm91cD5cblxuPGlneC1jb21iby1kcm9wLWRvd24gI2lneENvbWJvRHJvcERvd24gY2xhc3M9XCJpZ3gtY29tYm9fX2Ryb3AtZG93blwiIFtkaXNwbGF5RGVuc2l0eV09XCJkaXNwbGF5RGVuc2l0eVwiXG4gICAgW2xhYmVsbGVkQnldPVwidGhpcy5hcmlhTGFiZWxsZWRCeSB8fCB0aGlzLmxhYmVsPy5pZCB8fCB0aGlzLnBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICBbd2lkdGhdPVwiaXRlbXNXaWR0aCB8fCAnMTAwJSdcIiAob3BlbmluZyk9XCJoYW5kbGVPcGVuaW5nKCRldmVudClcIiAoY2xvc2luZyk9XCJoYW5kbGVDbG9zaW5nKCRldmVudClcIlxuICAgIChvcGVuZWQpPVwiaGFuZGxlT3BlbmVkKClcIiAoY2xvc2VkKT1cImhhbmRsZUNsb3NlZCgpXCIgW3NpbmdsZU1vZGVdPVwidHJ1ZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgI2Ryb3Bkb3duSXRlbUNvbnRhaW5lciBjbGFzcz1cImlneC1jb21ib19fY29udGVudFwiIFtzdHlsZS5vdmVyZmxvd109XCInaGlkZGVuJ1wiXG4gICAgICAgIFtzdHlsZS5tYXhIZWlnaHQucmVtXT1cIml0ZW1zTWF4SGVpZ2h0SW5SZW1cIiBbaWd4RHJvcERvd25JdGVtTmF2aWdhdGlvbl09XCJkcm9wZG93blwiXG4gICAgICAgIFt0YWJpbmRleF09XCJkcm9wZG93bi5jb2xsYXBzZWQgPyAtMSA6IDBcIiBbYXR0ci5pZF09XCJkcm9wZG93bi5pZFwiXG4gICAgICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCJ0aGlzLmFjdGl2ZURlc2NlbmRhbnRcIlxuICAgICAgICAoZm9jdXMpPVwiZHJvcGRvd24ub25Gb2N1cygpXCIgKGtleWRvd24pPVwiaGFuZGxlSXRlbUtleURvd24oJGV2ZW50KVwiPlxuICAgICAgICA8aWd4LWNvbWJvLWl0ZW0gW3JvbGVdPVwiaXRlbT8uaXNIZWFkZXI/ICdncm91cCcgOiAnb3B0aW9uJ1wiIFtzaW5nbGVNb2RlXT1cInRydWVcIlxuICAgICAgICAgICAgW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiIChjbGljayk9XCJoYW5kbGVJdGVtQ2xpY2soKVwiICppZ3hGb3I9XCJsZXQgaXRlbSBvZiBkYXRhXG4gICAgICAgICAgICAgICAgfCBjb21ib0ZpbHRlcmluZzpmaWx0ZXJWYWx1ZTpkaXNwbGF5S2V5OmZpbHRlcmluZ09wdGlvbnM6ZmlsdGVyRnVuY3Rpb25cbiAgICAgICAgICAgICAgICB8IGNvbWJvR3JvdXBpbmc6Z3JvdXBLZXk6dmFsdWVLZXk6Z3JvdXBTb3J0aW5nRGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIGluZGV4IGFzIHJvd0luZGV4OyBjb250YWluZXJTaXplOiBpdGVtc01heEhlaWdodDsgc2Nyb2xsT3JpZW50YXRpb246ICd2ZXJ0aWNhbCc7IGl0ZW1TaXplOiBpdGVtSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiIFtpc0hlYWRlcl09XCJpdGVtPy5pc0hlYWRlclwiIFtpbmRleF09XCJyb3dJbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0/LmlzSGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImhlYWRlckl0ZW1UZW1wbGF0ZSA/IGhlYWRlckl0ZW1UZW1wbGF0ZSA6IGhlYWRlckl0ZW1CYXNlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBkYXRhOiBkYXRhLCB2YWx1ZUtleTogdmFsdWVLZXksIGdyb3VwS2V5OiBncm91cEtleSwgZGlzcGxheUtleTogZGlzcGxheUtleX1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPCEtLSBpZiBpdGVtIGlzICdudWxsJyBpdCBzaG91bGQgYmUgZGlzcGxheWVkIGFuZCAhIShpdGVtPy5pc0hlYWRlcikgd291bGQgcmVzb2x2ZSBpdCB0byAnZmFsc2UnIGFuZCBub3QgZGlzcGxheSBpdCAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbT8uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICNsaXN0SXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBkYXRhOiBkYXRhLCB2YWx1ZUtleTogdmFsdWVLZXksIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXl9O1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWl0ZW0+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNvbWJvX19hZGRcIiAqbmdJZj1cImZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDAgfHwgaXNBZGRCdXR0b25WaXNpYmxlKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jb21ib19fZW1wdHlcIiAqbmdJZj1cImZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVRlbXBsYXRlID8gZW1wdHlUZW1wbGF0ZSA6IGVtcHR5XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpZ3gtY29tYm8tYWRkLWl0ZW0gI2FkZEl0ZW0gW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiICpuZ0lmPVwiaXNBZGRCdXR0b25WaXNpYmxlKClcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cImRyb3Bkb3duLmNvbGxhcHNlZCA/IC0xIDogY3VzdG9tVmFsdWVGbGFnID8gMSA6IC0xXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2FkZC1pdGVtXCIgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWRkIEl0ZW1cIiBbaW5kZXhdPVwidmlydHVhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JPZi5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJdGVtVGVtcGxhdGUgPyBhZGRJdGVtVGVtcGxhdGUgOiBhZGRJdGVtRGVmYXVsdFwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWFkZC1pdGVtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtY29tYm8tZHJvcC1kb3duPlxuXG48bmctdGVtcGxhdGUgI2NvbXBsZXggbGV0LWRpc3BsYXkgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImRpc3BsYXlLZXlcIj5cbiAgICB7e2Rpc3BsYXlba2V5XX19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmltaXRpdmUgbGV0LWRpc3BsYXk+XG4gICAge3tkaXNwbGF5fX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgIDxzcGFuPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9jb21ib19lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRJdGVtRGVmYXVsdCBsZXQtY29udHJvbD5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZ3hCdXR0b249XCJmbGF0XCIgaWd4UmlwcGxlPkFkZCBpdGVtPC9idXR0b24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNoZWFkZXJJdGVtQmFzZSBsZXQtaXRlbSBsZXQta2V5PVwidmFsdWVLZXlcIiBsZXQtZ3JvdXBLZXk9XCJncm91cEtleVwiPlxuICAgIHt7IGl0ZW1ba2V5XSB9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|