igniteui-angular 14.1.0-rc.0 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/combo/combo.common.mjs +3 -2
- package/esm2020/lib/simple-combo/simple-combo.component.mjs +6 -8
- package/fesm2015/igniteui-angular.mjs +8 -8
- package/fesm2015/igniteui-angular.mjs.map +1 -1
- package/fesm2020/igniteui-angular.mjs +7 -8
- package/fesm2020/igniteui-angular.mjs.map +1 -1
- package/lib/simple-combo/simple-combo.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -399,17 +399,15 @@ export class IgxSimpleComboComponent extends IgxComboBaseDirective {
|
|
|
399
399
|
this.setSelection(newSelection);
|
|
400
400
|
}
|
|
401
401
|
clearOnBlur() {
|
|
402
|
-
const filtered = this.filteredData.find(this.
|
|
403
|
-
if (filtered === undefined || filtered === null || this.
|
|
402
|
+
const filtered = this.filteredData.find(this.findMatch);
|
|
403
|
+
if (filtered === undefined || filtered === null || this.getElementKey(filtered) !== this.selectedItem) {
|
|
404
404
|
this.clearAndClose();
|
|
405
405
|
return;
|
|
406
406
|
}
|
|
407
|
-
if (this.isPartialMatch(filtered) || this.getElementVal(filtered) !== this._internalFilter) {
|
|
408
|
-
this.clearAndClose();
|
|
409
|
-
}
|
|
410
407
|
}
|
|
411
|
-
|
|
412
|
-
|
|
408
|
+
getElementKey(element) {
|
|
409
|
+
const elementVal = this.valueKey ? element[this.valueKey] : element;
|
|
410
|
+
return elementVal;
|
|
413
411
|
}
|
|
414
412
|
getElementVal(element) {
|
|
415
413
|
const elementVal = this.displayKey ? element[this.displayKey] : element;
|
|
@@ -494,4 +492,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.1", ngImpor
|
|
|
494
492
|
exports: [IgxSimpleComboComponent, IgxComboModule]
|
|
495
493
|
}]
|
|
496
494
|
}] });
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWNvbWJvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQytCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFDM0YsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUN4QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLHdCQUF3QixDQUFDO0FBR3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUs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d0JBQ0wsY0FBYyxFQUFFLGVBQWUsRUFBRSxZQUFZO3dCQUM3QyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsbUJBQW1CO3dCQUNyRCxjQUFjLEVBQUUsZUFBZSxFQUFFLGlCQUFpQjt3QkFDbEQsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLGFBQWE7d0JBQ2pELHNCQUFzQjtxQkFDekI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDO2lCQUNyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLFxuICAgIE5nTW9kdWxlLCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Q2hlY2tib3hNb2R1bGUgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tYm8vY29tYm8tYWRkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvRHJvcERvd25Db21wb25lbnQgfSBmcm9tICcuLi9jb21iby9jb21iby1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tYm8vY29tYm8taXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29tYm8vY29tYm8uYXBpJztcbmltcG9ydCB7IElneENvbWJvQmFzZURpcmVjdGl2ZSwgSUdYX0NPTUJPX0NPTVBPTkVOVCB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb21ib01vZHVsZSB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGb3JPZk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UmlwcGxlTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlLCBJZ3hUZXh0U2VsZWN0aW9uTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LXNlbGVjdGlvbi90ZXh0LXNlbGVjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4VG9nZ2xlTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bk1vZHVsZSB9IGZyb20gJy4uL2Ryb3AtZG93bi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEljb25Nb2R1bGUsIElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaWNvbi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneElucHV0R3JvdXBNb2R1bGUsIElneElucHV0R3JvdXBUeXBlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuXG4vKiogRW1pdHRlZCB3aGVuIGFuIGlneC1zaW1wbGUtY29tYm8ncyBzZWxlY3Rpb24gaXMgY2hhbmdpbmcuICAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2ltcGxlQ29tYm9TZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKiogQW4gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkICovXG4gICAgb2xkU2VsZWN0aW9uOiBhbnk7XG4gICAgLyoqIEFuIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgc2VsZWN0ZWQgYWZ0ZXIgdGhpcyBldmVudCAqL1xuICAgIG5ld1NlbGVjdGlvbjogYW55O1xuICAgIC8qKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBjb21ibyB0ZXh0IGJveCAqL1xuICAgIGRpc3BsYXlUZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRyb3AtZG93biBsaXN0IHRoYXQgcHJvdmlkZXMgZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHksIGFsbG93aW5nIHVzZXJzIHRvIGNob29zZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBhIHByZWRlZmluZWQgbGlzdC5cbiAqXG4gKiBAaWd4TW9kdWxlIElneFNpbXBsZUNvbWJvTW9kdWxlXG4gKiBAaWd4VGhlbWUgaWd4LWNvbWJvLXRoZW1lXG4gKiBAaWd4S2V5d29yZHMgY29tYm9ib3gsIHNpbmdsZSBjb21ibyBzZWxlY3Rpb25cbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKlxuICogQHJlbWFya3NcbiAqIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGZpbHRlciBpdGVtcyBhcyB3ZWxsIGFzIHBlcmZvcm0gc2luZ2xlIHNlbGVjdGlvbiBvbiB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEFkZGl0aW9uYWxseSwgaXQgZXhwb3NlcyBrZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBjdXN0b20gc3R5bGluZyBjYXBhYmlsaXRpZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1zaW1wbGUtY29tYm8gW2l0ZW1zTWF4SGVpZ2h0XT1cIjI1MFwiIFtkYXRhXT1cImxvY2F0aW9uRGF0YVwiXG4gKiAgW2Rpc3BsYXlLZXldPVwiJ2ZpZWxkJ1wiIFt2YWx1ZUtleV09XCInZmllbGQnXCJcbiAqICBwbGFjZWhvbGRlcj1cIkxvY2F0aW9uXCIgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIj5cbiAqIDwvaWd4LXNpbXBsZS1jb21ibz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1zaW1wbGUtY29tYm8nLFxuICAgIHRlbXBsYXRlVXJsOiAnc2ltcGxlLWNvbWJvLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICB7IHByb3ZpZGU6IElHWF9DT01CT19DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBJZ3hTaW1wbGVDb21ib0NvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4U2ltcGxlQ29tYm9Db21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneFNpbXBsZUNvbWJvQ29tcG9uZW50IGV4dGVuZHMgSWd4Q29tYm9CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZHJvcGRvd246IElneENvbWJvRHJvcERvd25Db21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneENvbWJvQWRkSXRlbUNvbXBvbmVudClcbiAgICBwdWJsaWMgYWRkSXRlbTogSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGl0ZW0gc2VsZWN0aW9uIGlzIGNoYW5naW5nLCBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNpbXBsZS1jb21ibyAoc2VsZWN0aW9uQ2hhbmdpbmcpPSdoYW5kbGVTZWxlY3Rpb24oKSc+PC9pZ3gtc2ltcGxlLWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVNpbXBsZUNvbWJvU2VsZWN0aW9uQ2hhbmdpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBAVmlld0NoaWxkKElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSB0ZXh0U2VsZWN0aW9uOiBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNvbXBvc2luZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdXBkYXRlSW5wdXQgPSB0cnVlO1xuXG4gICAgLy8gc3RvcmVzIHRoZSBsYXN0IGZpbHRlcmVkIHZhbHVlIC0gbW92ZSB0byBjb21tb24/XG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxGaWx0ZXIgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVyZWREYXRhKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZERhdGE7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgZmlsdGVyZWREYXRhKHZhbDogYW55W10gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlcmVkRGF0YSA9IHRoaXMuZ3JvdXBLZXkgPyAodmFsIHx8IFtdKS5maWx0ZXIoKGUpID0+IGUuaXNIZWFkZXIgIT09IHRydWUpIDogdmFsO1xuICAgICAgICB0aGlzLmNoZWNrTWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hWYWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBzZWFyY2hWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzZWxlY3RlZEl0ZW0oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCkudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2U6IElneFNlbGVjdGlvbkFQSVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2ljb25TZXJ2aWNlOiBJZ3hJY29uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgcHJvdGVjdGVkIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkciwgc2VsZWN0aW9uU2VydmljZSwgY29tYm9BUEksXG4gICAgICAgICAgICBfaWNvblNlcnZpY2UsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSwgX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5jb21ib0FQSS5yZWdpc3Rlcih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BbHQuQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25BcnJvd0Rvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0RGlyLmlneEZvck9mLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWxsb3dDdXN0b21WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGEgZGVmaW5lZCBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBiZSBzZWxlY3RlZFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbWJvLnNlbGVjdChcIk5ldyBZb3JrXCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFkZF9pdGVtcyh0aGlzLmlkLCBpdGVtIGluc3RhbmNlb2YgQXJyYXkgPyBpdGVtIDogW2l0ZW1dLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIHRoZSBpdGVtcyB0byBiZSBkZXNlbGVjdGVkXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29tYm8uZGVzZWxlY3QoXCJOZXcgWW9ya1wiKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIHZhbHVlID8gW3ZhbHVlXSA6IFtdLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5jcmVhdGVEaXNwbGF5VGV4dCh0aGlzLnNlbGVjdGlvbiwgb2xkU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpcnREaXIuY29udGVudFNpemVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52aXJ0RGlyLmlneEZvck9mLmZpbmRJbmRleChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSBlW3RoaXMudmFsdWVLZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUtleSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09PSB0aGlzLnNlbGVjdGlvblswXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbmF2aWdhdGUgdG8gaXRlbSBvbmx5IGlmIHdlIGhhdmUgbG9jYWwgZGF0YVxuICAgICAgICAgICAgICAgICAgICAvLyBhcyB3aXRoIHJlbW90ZSBkYXRhIHRoaXMgd2lsbCBmaWRkbGUgd2l0aCBpZ3hGb3IncyBzY3JvbGwgaGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2lsbCB0cmlnZ2VyIGFub3RoZXIgY2h1bmsgbG9hZCB3aGljaCB3aWxsIGJyZWFrIHRoZSB2aXN1YWxpemF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ubmF2aWdhdGVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW5pbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSB0aGlzLmNvbWJvSW5wdXQudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSAmJiAhYXJncy5ldmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHRoaXMuX2ludGVybmFsRmlsdGVyID0gdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLl9pbnRlcm5hbEZpbHRlciA9IHRoaXMuc2VhcmNoVmFsdWUgPSB0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnID8gZXZlbnQgOiBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlYXJjaFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkICYmIHRoaXMuY29tYm9JbnB1dC5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY29tYm9JbnB1dC52YWx1ZS50cmltKCkgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNpemUodGhpcy5pZCkgPiAwKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgY2xlYXJpbmcgb2YgaW5wdXQgYnkgc3BhY2VcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBmaWx0ZXJpbmcgdGhlIGZvY3VzZWQgaXRlbSBzaG91bGQgYmUgdGhlIGZpcnN0IGl0ZW0gb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtXG4gICAgICAgIGlmICghdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSB8fCB0aGlzLmRyb3Bkb3duLmZvY3VzZWRJdGVtLmlkICE9PSB0aGlzLmRyb3Bkb3duLml0ZW1zWzBdLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5hdmlnYXRlRmlyc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5oYW5kbGVJbnB1dENoYW5nZShldmVudCk7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5maWx0ZXJlZERhdGEuZmluZCh0aGlzLmZpbmRBbGxNYXRjaGVzKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZCA9PT0gbnVsbCB8fCBmaWx0ZXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbS5pdGVtSUQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgdHJpZ2dlciB0ZXh0IHNlbGVjdGlvbiBhcyBpdCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgZHVyaW5nIGVkaXRpbmdcbiAgICAgICAgICAgIHRoaXMudGV4dFNlbGVjdGlvbi50cmlnZ2VyKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5nZXRFbGVtZW50VmFsKGZpbHRlcmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuQkFDS1NQQUNFXG4gICAgICAgICAgICB8fCBldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5ERUxFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuVEFCKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5BUlJPV19ET1dOKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZmlyc3RfaXRlbSh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSBmaXJzdEl0ZW0gJiYgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bi5pdGVtcy5maW5kKGkgPT4gaS5pdGVtSUQgPT09IGZpcnN0SXRlbSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZHJvcGRvd24uaXRlbXNbMF07XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVJdGVtS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuQVJST1dfVVAgJiYgZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUl0ZW1DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSB0aGlzLmNvbWJvSW5wdXQudmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm9JbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVDbGVhcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoSW5wdXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5jb21ib0lucHV0LnZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVPcGVuZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudHJpZ2dlckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUNsb3NpbmcoZTogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChlLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gZXhwbGljaXRseSB1cGRhdGUgc2VsZWN0aW9uIGFuZCB0cmlnZ2VyIHRleHQgc2VsZWN0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBmb3JjZSBDRFxuICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24udHJpZ2dlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBmb2N1c1NlYXJjaElucHV0KG9wZW5pbmc/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5jb21ib0lucHV0LnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLnNjcm9sbFRvKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRBbGxNYXRjaGVzID0gKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGlzcGxheUtleSA/IGVsZW1lbnRbdGhpcy5kaXNwbGF5S2V5XSA6IGVsZW1lbnQ7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgLy8gd2UgY2FuIGFjY2VwdCBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5IHN0cmluZ3MgYXMgZW1wdHkgZGlzcGxheSB2YWx1ZXNcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSB8fCB0aGlzLmNvbWJvSW5wdXQudmFsdWU7XG4gICAgICAgIHJldHVybiAhIXNlYXJjaFZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb246IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25Bc0FycmF5ID0gbmV3U2VsZWN0aW9uID8gQXJyYXkuZnJvbShuZXdTZWxlY3Rpb24pIGFzIElneENvbWJvSXRlbUNvbXBvbmVudFtdIDogW107XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbkFzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCkgfHwgW10pO1xuICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQobmV3U2VsZWN0aW9uQXNBcnJheSwgb2xkU2VsZWN0aW9uQXNBcnJheSk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElTaW1wbGVDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uOiBuZXdTZWxlY3Rpb25Bc0FycmF5WzBdLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBvbGRTZWxlY3Rpb25Bc0FycmF5WzBdLFxuICAgICAgICAgICAgZGlzcGxheVRleHQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYWRkaXRpb25hbCBjaGVja3Mgd2hlbiBzZWxlY3RpbmcgYW5kIGNsZWFyaW5nIGFuIGl0ZW0gd2l0aCB2YWx1ZUtleT11bmRlZmluZWRcbiAgICAgICAgLy8gYXMgdGhlIGV2ZW50IHNob3VsZCBlbWl0IHdoZW4gYXJncy5uZXdTZWxlY3Rpb24gZGlmZmVycyBmcm9tIGFyZ3Mub2xkU2VsZWN0aW9uXG4gICAgICAgIC8vIGhvd2V2ZXIgaW4gdGhpcyBjYXNlIGJvdGggYXJncy5uZXdTZWxlY3Rpb24gYW5kIGFyZ3Mub2xkU2VsZWN0aW9uIGFyZSAndW5kZWZpbmVkJ1xuICAgICAgICBpZiAoYXJncy5uZXdTZWxlY3Rpb24gIT09IGFyZ3Mub2xkU2VsZWN0aW9uXG4gICAgICAgICAgICB8fCBhcmdzLm5ld1NlbGVjdGlvbiA9PT0gdW5kZWZpbmVkICYmIG5ld1NlbGVjdGlvbj8uc2l6ZSA+IDBcbiAgICAgICAgICAgIHx8IGFyZ3Mub2xkU2VsZWN0aW9uID09PSB1bmRlZmluZWQgJiYgb2xkU2VsZWN0aW9uQXNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogcmVmYWN0b3IgYmVsb3cgY29kZSBhcyBpdCBzZXRzIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBkaXNwbGF5IHRleHRcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgbGV0IGFyZ3NTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb24/LnNpemUgPiAwXG4gICAgICAgICAgICAgICAgPyBhcmdzLm5ld1NlbGVjdGlvblxuICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICBhcmdzU2VsZWN0aW9uID0gQXJyYXkuaXNBcnJheShhcmdzU2VsZWN0aW9uKSA/IGFyZ3NTZWxlY3Rpb24gOiBbYXJnc1NlbGVjdGlvbl07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIGFyZ3NTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21ib0lucHV0LnZhbHVlID0gdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSB0aGlzLl92YWx1ZSA9IGRpc3BsYXlUZXh0ICE9PSBhcmdzLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gYXJncy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY3JlYXRlRGlzcGxheVRleHQoYXJnc1NlbGVjdGlvbiwgW2FyZ3Mub2xkU2VsZWN0aW9uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGFyZ3MubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyUmVtb3RlRW50cmllcyhuZXdTZWxlY3Rpb25Bc0FycmF5LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlRGlzcGxheVRleHQobmV3U2VsZWN0aW9uOiBhbnlbXSwgb2xkU2VsZWN0aW9uOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW1vdGVTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUtleSAhPT0gbnVsbCAmJiB0aGlzLmRpc3BsYXlLZXkgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgJiYgbmV3U2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRLZXlzVG9JdGVtcyhuZXdTZWxlY3Rpb24pLm1hcChlID0+IGVbdGhpcy5kaXNwbGF5S2V5XSlbMF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3U2VsZWN0aW9uWzBdPy50b1N0cmluZygpIHx8ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJTZWxlY3Rpb24oaWdub3JlRmlsdGVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldF9lbXB0eSgpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoICE9PSB0aGlzLmRhdGEubGVuZ3RoICYmICFpZ25vcmVGaWx0ZXIpIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5kZWxldGVfaXRlbXModGhpcy5pZCwgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldF9hbGxfaWRzKHRoaXMuZmlsdGVyZWREYXRhLCB0aGlzLnZhbHVlS2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyT25CbHVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgIGlmIChmaWx0ZXJlZCA9PT0gdW5kZWZpbmVkIHx8IGZpbHRlcmVkID09PSBudWxsIHx8IHRoaXMuc2VsZWN0aW9uU2VydmljZS5zaXplKHRoaXMuaWQpID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc1BhcnRpYWxNYXRjaChmaWx0ZXJlZCkgfHwgdGhpcy5nZXRFbGVtZW50VmFsKGZpbHRlcmVkKSAhPT0gdGhpcy5faW50ZXJuYWxGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbmRDbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1BhcnRpYWxNYXRjaChmaWx0ZXJlZDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2ludGVybmFsRmlsdGVyICYmIHRoaXMuX2ludGVybmFsRmlsdGVyLmxlbmd0aCAhPT0gdGhpcy5nZXRFbGVtZW50VmFsKGZpbHRlcmVkKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50VmFsKGVsZW1lbnQ6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRWYWwgPSB0aGlzLmRpc3BsYXlLZXkgPyBlbGVtZW50W3RoaXMuZGlzcGxheUtleV0gOiBlbGVtZW50O1xuICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnRWYWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJBbmRDbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbih0cnVlKTtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSAnJztcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4U2ltcGxlQ29tYm9Db21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWd4Q29tYm9Nb2R1bGUsIElneFJpcHBsZU1vZHVsZSwgQ29tbW9uTW9kdWxlLFxuICAgICAgICBJZ3hJbnB1dEdyb3VwTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgSWd4Rm9yT2ZNb2R1bGUsIElneFRvZ2dsZU1vZHVsZSwgSWd4Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIElneERyb3BEb3duTW9kdWxlLCBJZ3hCdXR0b25Nb2R1bGUsIElneEljb25Nb2R1bGUsXG4gICAgICAgIElneFRleHRTZWxlY3Rpb25Nb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtJZ3hTaW1wbGVDb21ib0NvbXBvbmVudCwgSWd4Q29tYm9Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFNpbXBsZUNvbWJvTW9kdWxlIHsgfVxuIiwiPGlneC1pbnB1dC1ncm91cCAjaW5wdXRHcm91cCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbc3VwcHJlc3NJbnB1dEF1dG9mb2N1c109XCJ0cnVlXCIgW3R5cGVdPVwidHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeFwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnQsIFtpZ3hIaW50XVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGlucHV0ICNjb21ib0lucHV0IGlneElucHV0IFt2YWx1ZV09XCJ2YWx1ZVwiIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgYXJpYS1yZWFkb25seT1cImZhbHNlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhdGhpcy5kcm9wZG93bi5jb2xsYXBzZWRcIiBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInRoaXMuZHJvcGRvd24ubGlzdElkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRoaXMuYXJpYUxhYmVsbGVkQnkgfHwgdGhpcy5sYWJlbD8uaWQgfHwgdGhpcy5wbGFjZWhvbGRlclwiXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2lneFRleHRTZWxlY3Rpb25dPVwiIWNvbXBvc2luZ1wiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoaW5wdXQpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGJsdXIpPVwib25CbHVyKClcIi8+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4XCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiY29tYm9JbnB1dC52YWx1ZS5sZW5ndGhcIiBhcmlhLWxhYmVsPVwiQ2xlYXIgU2VsZWN0aW9uXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2NsZWFyLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbGVhcigkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFySWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhY2xlYXJJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIGNsZWFyXG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwic2hvd1NlYXJjaENhc2VJY29uXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJpbXgtaWNvbnNcIiBuYW1lPVwiY2FzZS1zZW5zaXRpdmVcIiBbYWN0aXZlXT1cImZpbHRlcmluZ09wdGlvbnMuY2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2FzZVNlbnNpdGl2ZSgpXCI+XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuICAgIDxpZ3gtc3VmZml4IGNsYXNzPVwiaWd4LWNvbWJvX190b2dnbGUtYnV0dG9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b2dnbGVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2dnbGVJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbGxhcHNlZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ3gtaWNvbiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCIgKm5nSWY9XCIhdG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7eyBkcm9wZG93bi5jb2xsYXBzZWQgPyAnYXJyb3dfZHJvcF9kb3duJyA6ICdhcnJvd19kcm9wX3VwJ319XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG5cbjxpZ3gtY29tYm8tZHJvcC1kb3duICNpZ3hDb21ib0Ryb3BEb3duIGNsYXNzPVwiaWd4LWNvbWJvX19kcm9wLWRvd25cIiBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIlxuICAgIFtsYWJlbGxlZEJ5XT1cInRoaXMuYXJpYUxhYmVsbGVkQnkgfHwgdGhpcy5sYWJlbD8uaWQgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgW3dpZHRoXT1cIml0ZW1zV2lkdGggfHwgJzEwMCUnXCIgKG9wZW5pbmcpPVwiaGFuZGxlT3BlbmluZygkZXZlbnQpXCIgKGNsb3NpbmcpPVwiaGFuZGxlQ2xvc2luZygkZXZlbnQpXCJcbiAgICAob3BlbmVkKT1cImhhbmRsZU9wZW5lZCgpXCIgKGNsb3NlZCk9XCJoYW5kbGVDbG9zZWQoKVwiIFtzaW5nbGVNb2RlXT1cInRydWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICNkcm9wZG93bkl0ZW1Db250YWluZXIgY2xhc3M9XCJpZ3gtY29tYm9fX2NvbnRlbnRcIiBbc3R5bGUub3ZlcmZsb3ddPVwiJ2hpZGRlbidcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIml0ZW1zTWF4SGVpZ2h0XCIgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwiZHJvcGRvd25cIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZHJvcGRvd24uY29sbGFwc2VkID8gLTEgOiAwXCIgW2F0dHIuaWRdPVwiZHJvcGRvd24uaWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwidGhpcy5hY3RpdmVEZXNjZW5kYW50XCJcbiAgICAgICAgKGZvY3VzKT1cImRyb3Bkb3duLm9uRm9jdXMoKVwiIChrZXlkb3duKT1cImhhbmRsZUl0ZW1LZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgPGlneC1jb21iby1pdGVtICBbcm9sZV09XCJpdGVtLmlzSGVhZGVyPyAnZ3JvdXAnIDogJ29wdGlvbidcIiBbc2luZ2xlTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpdGVtSGVpZ2h0XT1cIml0ZW1IZWlnaHRcIiAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKClcIiAqaWd4Rm9yPVwibGV0IGl0ZW0gb2YgZGF0YVxuICAgICAgICAgICAgICAgIHwgY29tYm9GaWx0ZXJpbmc6ZmlsdGVyVmFsdWU6ZGlzcGxheUtleTpmaWx0ZXJpbmdPcHRpb25zOmZpbHRlckZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgfCBjb21ib0dyb3VwaW5nOmdyb3VwS2V5OnZhbHVlS2V5Omdyb3VwU29ydGluZ0RpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICBpbmRleCBhcyByb3dJbmRleDsgY29udGFpbmVyU2l6ZTogaXRlbXNNYXhIZWlnaHQ7IHNjcm9sbE9yaWVudGF0aW9uOiAndmVydGljYWwnOyBpdGVtU2l6ZTogaXRlbUhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIiBbaXNIZWFkZXJdPVwiaXRlbS5pc0hlYWRlclwiIFtpbmRleF09XCJyb3dJbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVySXRlbVRlbXBsYXRlID8gaGVhZGVySXRlbVRlbXBsYXRlIDogaGVhZGVySXRlbUJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW0sIGRhdGE6IGRhdGEsIHZhbHVlS2V5OiB2YWx1ZUtleSwgZ3JvdXBLZXk6IGdyb3VwS2V5LCBkaXNwbGF5S2V5OiBkaXNwbGF5S2V5fVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICNsaXN0SXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBkYXRhOiBkYXRhLCB2YWx1ZUtleTogdmFsdWVLZXksIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXl9O1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWl0ZW0+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNvbWJvX19hZGRcIiAqbmdJZj1cImZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDAgfHwgaXNBZGRCdXR0b25WaXNpYmxlKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jb21ib19fZW1wdHlcIiAqbmdJZj1cImZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVRlbXBsYXRlID8gZW1wdHlUZW1wbGF0ZSA6IGVtcHR5XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpZ3gtY29tYm8tYWRkLWl0ZW0gI2FkZEl0ZW0gW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiICpuZ0lmPVwiaXNBZGRCdXR0b25WaXNpYmxlKClcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cImRyb3Bkb3duLmNvbGxhcHNlZCA/IC0xIDogY3VzdG9tVmFsdWVGbGFnID8gMSA6IC0xXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2FkZC1pdGVtXCIgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWRkIEl0ZW1cIiBbaW5kZXhdPVwidmlydHVhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JPZi5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJdGVtVGVtcGxhdGUgPyBhZGRJdGVtVGVtcGxhdGUgOiBhZGRJdGVtRGVmYXVsdFwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWFkZC1pdGVtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtY29tYm8tZHJvcC1kb3duPlxuXG48bmctdGVtcGxhdGUgI2NvbXBsZXggbGV0LWRpc3BsYXkgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImRpc3BsYXlLZXlcIj5cbiAgICB7e2Rpc3BsYXlba2V5XX19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmltaXRpdmUgbGV0LWRpc3BsYXk+XG4gICAge3tkaXNwbGF5fX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgIDxzcGFuPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9jb21ib19lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRJdGVtRGVmYXVsdCBsZXQtY29udHJvbD5cbiAgICA8YnV0dG9uIGlneEJ1dHRvbj1cImZsYXRcIiBpZ3hSaXBwbGU+QWRkIGl0ZW08L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRlckl0ZW1CYXNlIGxldC1pdGVtIGxldC1rZXk9XCJ2YWx1ZUtleVwiIGxldC1ncm91cEtleT1cImdyb3VwS2V5XCI+XG4gICAge3sgaXRlbVtrZXldIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ltcGxlLWNvbWJvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zaW1wbGUtY29tYm8vc2ltcGxlLWNvbWJvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQytCLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFDM0YsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUN4QyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUU5RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUEwQixNQUFNLHdCQUF3QixDQUFDO0FBR3JGLE9BQU8sRUFBRSxlQUFlLEVBQUUs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Q2pELHNCQUFzQjtxQkFDekI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDO2lCQUNyRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIEluamVjdG9yLFxuICAgIE5nTW9kdWxlLCBPcHRpb25hbCwgT3V0cHV0LCBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Q2hlY2tib3hNb2R1bGUgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tYm8vY29tYm8tYWRkLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbWJvRHJvcERvd25Db21wb25lbnQgfSBmcm9tICcuLi9jb21iby9jb21iby1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tYm8vY29tYm8taXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29tYm9BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29tYm8vY29tYm8uYXBpJztcbmltcG9ydCB7IElneENvbWJvQmFzZURpcmVjdGl2ZSwgSUdYX0NPTUJPX0NPTVBPTkVOVCB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hDb21ib01vZHVsZSB9IGZyb20gJy4uL2NvbWJvL2NvbWJvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5RGVuc2l0eVRva2VuLCBJRGlzcGxheURlbnNpdHlPcHRpb25zIH0gZnJvbSAnLi4vY29yZS9kaXNwbGF5RGVuc2l0eSc7XG5pbXBvcnQgeyBJZ3hTZWxlY3Rpb25BUElTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgQ2FuY2VsYWJsZUV2ZW50QXJncywgSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncywgSUJhc2VFdmVudEFyZ3MsIFBsYXRmb3JtVXRpbCB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4QnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hGb3JPZk1vZHVsZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvZm9yLW9mL2Zvcl9vZi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4UmlwcGxlTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9yaXBwbGUvcmlwcGxlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlLCBJZ3hUZXh0U2VsZWN0aW9uTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90ZXh0LXNlbGVjdGlvbi90ZXh0LXNlbGVjdGlvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSWd4VG9nZ2xlTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy90b2dnbGUvdG9nZ2xlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hEcm9wRG93bk1vZHVsZSB9IGZyb20gJy4uL2Ryb3AtZG93bi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneEljb25Nb2R1bGUsIElneEljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaWNvbi9wdWJsaWNfYXBpJztcbmltcG9ydCB7IElneElucHV0R3JvdXBNb2R1bGUsIElneElucHV0R3JvdXBUeXBlLCBJR1hfSU5QVVRfR1JPVVBfVFlQRSB9IGZyb20gJy4uL2lucHV0LWdyb3VwL3B1YmxpY19hcGknO1xuXG4vKiogRW1pdHRlZCB3aGVuIGFuIGlneC1zaW1wbGUtY29tYm8ncyBzZWxlY3Rpb24gaXMgY2hhbmdpbmcuICAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2ltcGxlQ29tYm9TZWxlY3Rpb25DaGFuZ2luZ0V2ZW50QXJncyBleHRlbmRzIENhbmNlbGFibGVFdmVudEFyZ3MsIElCYXNlRXZlbnRBcmdzIHtcbiAgICAvKiogQW4gb2JqZWN0IHdoaWNoIHJlcHJlc2VudHMgdGhlIHZhbHVlIHRoYXQgaXMgY3VycmVudGx5IHNlbGVjdGVkICovXG4gICAgb2xkU2VsZWN0aW9uOiBhbnk7XG4gICAgLyoqIEFuIG9iamVjdCB3aGljaCByZXByZXNlbnRzIHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgc2VsZWN0ZWQgYWZ0ZXIgdGhpcyBldmVudCAqL1xuICAgIG5ld1NlbGVjdGlvbjogYW55O1xuICAgIC8qKiBUaGUgdGV4dCB0aGF0IHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBjb21ibyB0ZXh0IGJveCAqL1xuICAgIGRpc3BsYXlUZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGRyb3AtZG93biBsaXN0IHRoYXQgcHJvdmlkZXMgZmlsdGVyaW5nIGZ1bmN0aW9uYWxpdHksIGFsbG93aW5nIHVzZXJzIHRvIGNob29zZSBhIHNpbmdsZSBvcHRpb24gZnJvbSBhIHByZWRlZmluZWQgbGlzdC5cbiAqXG4gKiBAaWd4TW9kdWxlIElneFNpbXBsZUNvbWJvTW9kdWxlXG4gKiBAaWd4VGhlbWUgaWd4LWNvbWJvLXRoZW1lXG4gKiBAaWd4S2V5d29yZHMgY29tYm9ib3gsIHNpbmdsZSBjb21ibyBzZWxlY3Rpb25cbiAqIEBpZ3hHcm91cCBHcmlkcyAmIExpc3RzXG4gKlxuICogQHJlbWFya3NcbiAqIEl0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGZpbHRlciBpdGVtcyBhcyB3ZWxsIGFzIHBlcmZvcm0gc2luZ2xlIHNlbGVjdGlvbiBvbiB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEFkZGl0aW9uYWxseSwgaXQgZXhwb3NlcyBrZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBjdXN0b20gc3R5bGluZyBjYXBhYmlsaXRpZXMuXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlneC1zaW1wbGUtY29tYm8gW2l0ZW1zTWF4SGVpZ2h0XT1cIjI1MFwiIFtkYXRhXT1cImxvY2F0aW9uRGF0YVwiXG4gKiAgW2Rpc3BsYXlLZXldPVwiJ2ZpZWxkJ1wiIFt2YWx1ZUtleV09XCInZmllbGQnXCJcbiAqICBwbGFjZWhvbGRlcj1cIkxvY2F0aW9uXCIgc2VhcmNoUGxhY2Vob2xkZXI9XCJTZWFyY2guLi5cIj5cbiAqIDwvaWd4LXNpbXBsZS1jb21ibz5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1zaW1wbGUtY29tYm8nLFxuICAgIHRlbXBsYXRlVXJsOiAnc2ltcGxlLWNvbWJvLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICB7IHByb3ZpZGU6IElHWF9DT01CT19DT01QT05FTlQsIHVzZUV4aXN0aW5nOiBJZ3hTaW1wbGVDb21ib0NvbXBvbmVudCB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4U2ltcGxlQ29tYm9Db21wb25lbnQsIG11bHRpOiB0cnVlIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElneFNpbXBsZUNvbWJvQ29tcG9uZW50IGV4dGVuZHMgSWd4Q29tYm9CYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQge1xuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIEBWaWV3Q2hpbGQoSWd4Q29tYm9Ecm9wRG93bkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgZHJvcGRvd246IElneENvbWJvRHJvcERvd25Db21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBAVmlld0NoaWxkKElneENvbWJvQWRkSXRlbUNvbXBvbmVudClcbiAgICBwdWJsaWMgYWRkSXRlbTogSWd4Q29tYm9BZGRJdGVtQ29tcG9uZW50O1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGl0ZW0gc2VsZWN0aW9uIGlzIGNoYW5naW5nLCBiZWZvcmUgdGhlIHNlbGVjdGlvbiBjb21wbGV0ZXNcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNpbXBsZS1jb21ibyAoc2VsZWN0aW9uQ2hhbmdpbmcpPSdoYW5kbGVTZWxlY3Rpb24oKSc+PC9pZ3gtc2ltcGxlLWNvbWJvPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3Rpb25DaGFuZ2luZyA9IG5ldyBFdmVudEVtaXR0ZXI8SVNpbXBsZUNvbWJvU2VsZWN0aW9uQ2hhbmdpbmdFdmVudEFyZ3M+KCk7XG5cbiAgICBAVmlld0NoaWxkKElneFRleHRTZWxlY3Rpb25EaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSB0ZXh0U2VsZWN0aW9uOiBJZ3hUZXh0U2VsZWN0aW9uRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGNvbXBvc2luZyA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBfdXBkYXRlSW5wdXQgPSB0cnVlO1xuXG4gICAgLy8gc3RvcmVzIHRoZSBsYXN0IGZpbHRlcmVkIHZhbHVlIC0gbW92ZSB0byBjb21tb24/XG4gICAgcHJpdmF0ZSBfaW50ZXJuYWxGaWx0ZXIgPSAnJztcblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBnZXQgZmlsdGVyZWREYXRhKCk6IGFueVtdIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJlZERhdGE7XG4gICAgfVxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBzZXQgZmlsdGVyZWREYXRhKHZhbDogYW55W10gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlcmVkRGF0YSA9IHRoaXMuZ3JvdXBLZXkgPyAodmFsIHx8IFtdKS5maWx0ZXIoKGUpID0+IGUuaXNIZWFkZXIgIT09IHRydWUpIDogdmFsO1xuICAgICAgICB0aGlzLmNoZWNrTWF0Y2goKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgZ2V0IHNlYXJjaFZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWFyY2hWYWx1ZTtcbiAgICB9XG4gICAgcHVibGljIHNldCBzZWFyY2hWYWx1ZSh2YWw6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zZWFyY2hWYWx1ZSA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBzZWxlY3RlZEl0ZW0oKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCkudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcm90ZWN0ZWQgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJvdGVjdGVkIHNlbGVjdGlvblNlcnZpY2U6IElneFNlbGVjdGlvbkFQSVNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBjb21ib0FQSTogSWd4Q29tYm9BUElTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgX2ljb25TZXJ2aWNlOiBJZ3hJY29uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBwbGF0Zm9ybVV0aWw6IFBsYXRmb3JtVXRpbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChEaXNwbGF5RGVuc2l0eVRva2VuKSBwcm90ZWN0ZWQgX2Rpc3BsYXlEZW5zaXR5T3B0aW9uczogSURpc3BsYXlEZW5zaXR5T3B0aW9ucyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfSU5QVVRfR1JPVVBfVFlQRSkgcHJvdGVjdGVkIF9pbnB1dEdyb3VwVHlwZTogSWd4SW5wdXRHcm91cFR5cGUsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkciwgc2VsZWN0aW9uU2VydmljZSwgY29tYm9BUEksXG4gICAgICAgICAgICBfaWNvblNlcnZpY2UsIF9kaXNwbGF5RGVuc2l0eU9wdGlvbnMsIF9pbnB1dEdyb3VwVHlwZSwgX2luamVjdG9yKTtcbiAgICAgICAgdGhpcy5jb21ib0FQSS5yZWdpc3Rlcih0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLkFycm93RG93bicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5BbHQuQXJyb3dEb3duJywgWyckZXZlbnQnXSlcbiAgICBwdWJsaWMgb25BcnJvd0Rvd24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy52aXJ0RGlyLmlneEZvck9mLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRJdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWxsb3dDdXN0b21WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEl0ZW0/LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGEgZGVmaW5lZCBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSB0aGUgaXRlbSB0byBiZSBzZWxlY3RlZFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLmNvbWJvLnNlbGVjdChcIk5ldyBZb3JrXCIpO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3QoaXRlbTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtICE9PSBudWxsICYmIGl0ZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmFkZF9pdGVtcyh0aGlzLmlkLCBpdGVtIGluc3RhbmNlb2YgQXJyYXkgPyBpdGVtIDogW2l0ZW1dLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXNlbGVjdCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIHRoZSBpdGVtcyB0byBiZSBkZXNlbGVjdGVkXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuY29tYm8uZGVzZWxlY3QoXCJOZXcgWW9ya1wiKTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZGVzZWxlY3QoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIHZhbHVlID8gW3ZhbHVlXSA6IFtdLCB0cnVlKTtcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5jcmVhdGVEaXNwbGF5VGV4dCh0aGlzLnNlbGVjdGlvbiwgb2xkU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZpcnREaXIuY29udGVudFNpemVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy52aXJ0RGlyLmlneEZvck9mLmZpbmRJbmRleChlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSBlW3RoaXMudmFsdWVLZXldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy52YWx1ZUtleSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09PSB0aGlzLnNlbGVjdGlvblswXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNSZW1vdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbmF2aWdhdGUgdG8gaXRlbSBvbmx5IGlmIHdlIGhhdmUgbG9jYWwgZGF0YVxuICAgICAgICAgICAgICAgICAgICAvLyBhcyB3aXRoIHJlbW90ZSBkYXRhIHRoaXMgd2lsbCBmaWRkbGUgd2l0aCBpZ3hGb3IncyBzY3JvbGwgaGFuZGxlclxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgd2lsbCB0cmlnZ2VyIGFub3RoZXIgY2h1bmsgbG9hZCB3aGljaCB3aWxsIGJyZWFrIHRoZSB2aXN1YWxpemF0aW9uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ubmF2aWdhdGVJdGVtKGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW5pbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kQWxsTWF0Y2hlcyk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyZWQgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJlZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLnNlYXJjaFZhbHVlID0gJyc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLm9wZW5lZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbXBvc2luZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSB0aGlzLmNvbWJvSW5wdXQudmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmRyb3Bkb3duLmNsb3NpbmcucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0RWRpdEVsZW1lbnQoKSAmJiAhYXJncy5ldmVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZHJvcGRvd24uY2xvc2VkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHRoaXMuX2ludGVybmFsRmlsdGVyID0gdGhpcy5jb21ib0lucHV0LnZhbHVlO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlSW5wdXRDaGFuZ2UoZXZlbnQ/OiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLl9pbnRlcm5hbEZpbHRlciA9IHRoaXMuc2VhcmNoVmFsdWUgPSB0eXBlb2YgZXZlbnQgPT09ICdzdHJpbmcnID8gZXZlbnQgOiBldmVudC50YXJnZXQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLnNlYXJjaFZhbHVlKTtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkICYmIHRoaXMuY29tYm9JbnB1dC5mb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuY29tYm9JbnB1dC52YWx1ZS50cmltKCkgJiYgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNpemUodGhpcy5pZCkgPiAwKSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgY2xlYXJpbmcgb2YgaW5wdXQgYnkgc3BhY2VcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gd2hlbiBmaWx0ZXJpbmcgdGhlIGZvY3VzZWQgaXRlbSBzaG91bGQgYmUgdGhlIGZpcnN0IGl0ZW0gb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtXG4gICAgICAgIGlmICghdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSB8fCB0aGlzLmRyb3Bkb3duLmZvY3VzZWRJdGVtLmlkICE9PSB0aGlzLmRyb3Bkb3duLml0ZW1zWzBdLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm5hdmlnYXRlRmlyc3QoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5oYW5kbGVJbnB1dENoYW5nZShldmVudCk7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkID0gdGhpcy5maWx0ZXJlZERhdGEuZmluZCh0aGlzLmZpbmRBbGxNYXRjaGVzKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZCA9PT0gbnVsbCB8fCBmaWx0ZXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbS5pdGVtSUQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgLy8gbWFudWFsbHkgdHJpZ2dlciB0ZXh0IHNlbGVjdGlvbiBhcyBpdCB3aWxsIG5vdCBiZSB0cmlnZ2VyZWQgZHVyaW5nIGVkaXRpbmdcbiAgICAgICAgICAgIHRoaXMudGV4dFNlbGVjdGlvbi50cmlnZ2VyKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlID0gdGhpcy5nZXRFbGVtZW50VmFsKGZpbHRlcmVkKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuQkFDS1NQQUNFXG4gICAgICAgICAgICB8fCBldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5ERUxFVEUpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5jb2xsYXBzZWQgJiYgZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuVEFCKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyT25CbHVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgc3VwZXIuaGFuZGxlS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUtleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09IHRoaXMucGxhdGZvcm1VdGlsLktFWU1BUC5BUlJPV19ET1dOKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZmlyc3RfaXRlbSh0aGlzLmlkKTtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZm9jdXNlZEl0ZW0gPSBmaXJzdEl0ZW0gJiYgdGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bi5pdGVtcy5maW5kKGkgPT4gaS5pdGVtSUQgPT09IGZpcnN0SXRlbSlcbiAgICAgICAgICAgICAgICA6IHRoaXMuZHJvcGRvd24uaXRlbXNbMF07XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVJdGVtS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuQVJST1dfVVAgJiYgZXZlbnQuYWx0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLnBsYXRmb3JtVXRpbC5LRVlNQVAuRU5URVIpIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUl0ZW1DbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB0aGlzLmNvbWJvSW5wdXQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSB0aGlzLmNvbWJvSW5wdXQudmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGdldEVkaXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tYm9JbnB1dC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVDbGVhcihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKHRydWUpO1xuICAgICAgICBpZiAodGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5uYXZpZ2F0ZUZpcnN0KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoSW5wdXQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5jb21ib0lucHV0LnZhbHVlID0gdGhpcy5maWx0ZXJWYWx1ZSA9IHRoaXMuc2VhcmNoVmFsdWUgPSAnJztcbiAgICAgICAgdGhpcy5kcm9wZG93bi5mb2N1c2VkSXRlbSA9IG51bGw7XG4gICAgICAgIHRoaXMuY29tcG9zaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29tYm9JbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBoYW5kbGVPcGVuZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudHJpZ2dlckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZHJvcGRvd25Db250YWluZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLm9wZW5lZC5lbWl0KHsgb3duZXI6IHRoaXMgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIGhhbmRsZUNsb3NpbmcoZTogSUJhc2VDYW5jZWxhYmxlQnJvd3NlckV2ZW50QXJncyk6IHZvaWQge1xuICAgICAgICBjb25zdCBhcmdzOiBJQmFzZUNhbmNlbGFibGVCcm93c2VyRXZlbnRBcmdzID0geyBvd25lcjogdGhpcywgZXZlbnQ6IGUuZXZlbnQsIGNhbmNlbDogZS5jYW5jZWwgfTtcbiAgICAgICAgdGhpcy5jbG9zaW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGUuY2FuY2VsID0gYXJncy5jYW5jZWw7XG4gICAgICAgIGlmIChlLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gZXhwbGljaXRseSB1cGRhdGUgc2VsZWN0aW9uIGFuZCB0cmlnZ2VyIHRleHQgc2VsZWN0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBmb3JjZSBDRFxuICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRleHRTZWxlY3Rpb24udHJpZ2dlcigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xuICAgIHB1YmxpYyBmb2N1c1NlYXJjaElucHV0KG9wZW5pbmc/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChvcGVuaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29tYm9JbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICBpZiAodGhpcy5jb21ib0lucHV0LnZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy52aXJ0RGlyLnNjcm9sbFRvKDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRBbGxNYXRjaGVzID0gKGVsZW1lbnQ6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGlzcGxheUtleSA/IGVsZW1lbnRbdGhpcy5kaXNwbGF5S2V5XSA6IGVsZW1lbnQ7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgLy8gd2UgY2FuIGFjY2VwdCBudWxsLCB1bmRlZmluZWQgYW5kIGVtcHR5IHN0cmluZ3MgYXMgZW1wdHkgZGlzcGxheSB2YWx1ZXNcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlYXJjaFZhbHVlID0gdGhpcy5zZWFyY2hWYWx1ZSB8fCB0aGlzLmNvbWJvSW5wdXQudmFsdWU7XG4gICAgICAgIHJldHVybiAhIXNlYXJjaFZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2hWYWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICB9O1xuXG4gICAgcHJvdGVjdGVkIHNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb246IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb25Bc0FycmF5ID0gbmV3U2VsZWN0aW9uID8gQXJyYXkuZnJvbShuZXdTZWxlY3Rpb24pIGFzIElneENvbWJvSXRlbUNvbXBvbmVudFtdIDogW107XG4gICAgICAgIGNvbnN0IG9sZFNlbGVjdGlvbkFzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuc2VsZWN0aW9uU2VydmljZS5nZXQodGhpcy5pZCkgfHwgW10pO1xuICAgICAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHRoaXMuY3JlYXRlRGlzcGxheVRleHQobmV3U2VsZWN0aW9uQXNBcnJheSwgb2xkU2VsZWN0aW9uQXNBcnJheSk7XG4gICAgICAgIGNvbnN0IGFyZ3M6IElTaW1wbGVDb21ib1NlbGVjdGlvbkNoYW5naW5nRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uOiBuZXdTZWxlY3Rpb25Bc0FycmF5WzBdLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBvbGRTZWxlY3Rpb25Bc0FycmF5WzBdLFxuICAgICAgICAgICAgZGlzcGxheVRleHQsXG4gICAgICAgICAgICBvd25lcjogdGhpcyxcbiAgICAgICAgICAgIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYWRkaXRpb25hbCBjaGVja3Mgd2hlbiBzZWxlY3RpbmcgYW5kIGNsZWFyaW5nIGFuIGl0ZW0gd2l0aCB2YWx1ZUtleT11bmRlZmluZWRcbiAgICAgICAgLy8gYXMgdGhlIGV2ZW50IHNob3VsZCBlbWl0IHdoZW4gYXJncy5uZXdTZWxlY3Rpb24gZGlmZmVycyBmcm9tIGFyZ3Mub2xkU2VsZWN0aW9uXG4gICAgICAgIC8vIGhvd2V2ZXIgaW4gdGhpcyBjYXNlIGJvdGggYXJncy5uZXdTZWxlY3Rpb24gYW5kIGFyZ3Mub2xkU2VsZWN0aW9uIGFyZSAndW5kZWZpbmVkJ1xuICAgICAgICBpZiAoYXJncy5uZXdTZWxlY3Rpb24gIT09IGFyZ3Mub2xkU2VsZWN0aW9uXG4gICAgICAgICAgICB8fCBhcmdzLm5ld1NlbGVjdGlvbiA9PT0gdW5kZWZpbmVkICYmIG5ld1NlbGVjdGlvbj8uc2l6ZSA+IDBcbiAgICAgICAgICAgIHx8IGFyZ3Mub2xkU2VsZWN0aW9uID09PSB1bmRlZmluZWQgJiYgb2xkU2VsZWN0aW9uQXNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVE9ETzogcmVmYWN0b3IgYmVsb3cgY29kZSBhcyBpdCBzZXRzIHRoZSBzZWxlY3Rpb24gYW5kIHRoZSBkaXNwbGF5IHRleHRcbiAgICAgICAgaWYgKCFhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgbGV0IGFyZ3NTZWxlY3Rpb24gPSBuZXdTZWxlY3Rpb24/LnNpemUgPiAwXG4gICAgICAgICAgICAgICAgPyBhcmdzLm5ld1NlbGVjdGlvblxuICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICBhcmdzU2VsZWN0aW9uID0gQXJyYXkuaXNBcnJheShhcmdzU2VsZWN0aW9uKSA/IGFyZ3NTZWxlY3Rpb24gOiBbYXJnc1NlbGVjdGlvbl07XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0X2l0ZW1zKHRoaXMuaWQsIGFyZ3NTZWxlY3Rpb24sIHRydWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX3VwZGF0ZUlucHV0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21ib0lucHV0LnZhbHVlID0gdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSB0aGlzLl92YWx1ZSA9IGRpc3BsYXlUZXh0ICE9PSBhcmdzLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gYXJncy5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuY3JlYXRlRGlzcGxheVRleHQoYXJnc1NlbGVjdGlvbiwgW2FyZ3Mub2xkU2VsZWN0aW9uXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGFyZ3MubmV3U2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUlucHV0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyUmVtb3RlRW50cmllcyhuZXdTZWxlY3Rpb25Bc0FycmF5LCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgY3JlYXRlRGlzcGxheVRleHQobmV3U2VsZWN0aW9uOiBhbnlbXSwgb2xkU2VsZWN0aW9uOiBhbnlbXSk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVtb3RlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRSZW1vdGVTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCBvbGRTZWxlY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUtleSAhPT0gbnVsbCAmJiB0aGlzLmRpc3BsYXlLZXkgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgJiYgbmV3U2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRLZXlzVG9JdGVtcyhuZXdTZWxlY3Rpb24pLm1hcChlID0+IGVbdGhpcy5kaXNwbGF5S2V5XSlbMF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3U2VsZWN0aW9uWzBdPy50b1N0cmluZygpIHx8ICcnO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJTZWxlY3Rpb24oaWdub3JlRmlsdGVyPzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBsZXQgbmV3U2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldF9lbXB0eSgpO1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJlZERhdGEubGVuZ3RoICE9PSB0aGlzLmRhdGEubGVuZ3RoICYmICFpZ25vcmVGaWx0ZXIpIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5kZWxldGVfaXRlbXModGhpcy5pZCwgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldF9hbGxfaWRzKHRoaXMuZmlsdGVyZWREYXRhLCB0aGlzLnZhbHVlS2V5KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsZWFyT25CbHVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHRoaXMuZmlsdGVyZWREYXRhLmZpbmQodGhpcy5maW5kTWF0Y2gpO1xuICAgICAgICBpZiAoZmlsdGVyZWQgPT09IHVuZGVmaW5lZCB8fCBmaWx0ZXJlZCA9PT0gbnVsbCB8fCB0aGlzLmdldEVsZW1lbnRLZXkoZmlsdGVyZWQpICE9PSB0aGlzLnNlbGVjdGVkSXRlbSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckFuZENsb3NlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVsZW1lbnRLZXkoZWxlbWVudDogYW55KTogYW55IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFZhbCA9IHRoaXMudmFsdWVLZXkgPyBlbGVtZW50W3RoaXMudmFsdWVLZXldIDogZWxlbWVudDtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRWYWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50VmFsKGVsZW1lbnQ6IGFueSk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRWYWwgPSB0aGlzLmRpc3BsYXlLZXkgPyBlbGVtZW50W3RoaXMuZGlzcGxheUtleV0gOiBlbGVtZW50O1xuICAgICAgICByZXR1cm4gU3RyaW5nKGVsZW1lbnRWYWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xlYXJBbmRDbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbih0cnVlKTtcbiAgICAgICAgdGhpcy5faW50ZXJuYWxGaWx0ZXIgPSAnJztcbiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgICBpZiAoIXRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbSWd4U2ltcGxlQ29tYm9Db21wb25lbnRdLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgSWd4Q29tYm9Nb2R1bGUsIElneFJpcHBsZU1vZHVsZSwgQ29tbW9uTW9kdWxlLFxuICAgICAgICBJZ3hJbnB1dEdyb3VwTW9kdWxlLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgSWd4Rm9yT2ZNb2R1bGUsIElneFRvZ2dsZU1vZHVsZSwgSWd4Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIElneERyb3BEb3duTW9kdWxlLCBJZ3hCdXR0b25Nb2R1bGUsIElneEljb25Nb2R1bGUsXG4gICAgICAgIElneFRleHRTZWxlY3Rpb25Nb2R1bGVcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtJZ3hTaW1wbGVDb21ib0NvbXBvbmVudCwgSWd4Q29tYm9Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFNpbXBsZUNvbWJvTW9kdWxlIHsgfVxuIiwiPGlneC1pbnB1dC1ncm91cCAjaW5wdXRHcm91cCBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIiBbc3VwcHJlc3NJbnB1dEF1dG9mb2N1c109XCJ0cnVlXCIgW3R5cGVdPVwidHlwZVwiPlxuICAgIDxuZy1jb250YWluZXIgbmdQcm9qZWN0QXM9XCJbaWd4TGFiZWxdXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltpZ3hMYWJlbF1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBuZ1Byb2plY3RBcz1cImlneC1wcmVmaXhcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiaWd4LXByZWZpeFwiPjwvbmctY29udGVudD5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LWhpbnQsIFtpZ3hIaW50XVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtaGludCwgW2lneEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGlucHV0ICNjb21ib0lucHV0IGlneElucHV0IFt2YWx1ZV09XCJ2YWx1ZVwiIHJvbGU9XCJjb21ib2JveFwiXG4gICAgICAgIGFyaWEtaGFzcG9wdXA9XCJsaXN0Ym94XCIgYXJpYS1hdXRvY29tcGxldGU9XCJsaXN0XCIgYXJpYS1yZWFkb25seT1cImZhbHNlXCJcbiAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCIhdGhpcy5kcm9wZG93bi5jb2xsYXBzZWRcIiBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cInRoaXMuZHJvcGRvd24ubGlzdElkXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInRoaXMuYXJpYUxhYmVsbGVkQnkgfHwgdGhpcy5sYWJlbD8uaWQgfHwgdGhpcy5wbGFjZWhvbGRlclwiXG4gICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCIgW2lneFRleHRTZWxlY3Rpb25dPVwiIWNvbXBvc2luZ1wiXG4gICAgICAgIChmb2N1cyk9XCJvbkZvY3VzKClcIiAoaW5wdXQpPVwiaGFuZGxlSW5wdXRDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChrZXl1cCk9XCJoYW5kbGVLZXlVcCgkZXZlbnQpXCIgKGtleWRvd24pPVwiaGFuZGxlS2V5RG93bigkZXZlbnQpXCIgKGJsdXIpPVwib25CbHVyKClcIi8+XG5cbiAgICA8bmctY29udGFpbmVyIG5nUHJvamVjdEFzPVwiaWd4LXN1ZmZpeFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJpZ3gtc3VmZml4XCI+PC9uZy1jb250ZW50PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwiY29tYm9JbnB1dC52YWx1ZS5sZW5ndGhcIiBhcmlhLWxhYmVsPVwiQ2xlYXIgU2VsZWN0aW9uXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2NsZWFyLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVDbGVhcigkZXZlbnQpXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjbGVhckljb25UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNsZWFySWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8aWd4LWljb24gKm5nSWY9XCIhY2xlYXJJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIGNsZWFyXG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuICAgIDxpZ3gtc3VmZml4ICpuZ0lmPVwic2hvd1NlYXJjaENhc2VJY29uXCI+XG4gICAgICAgIDxpZ3gtaWNvbiBmYW1pbHk9XCJpbXgtaWNvbnNcIiBuYW1lPVwiY2FzZS1zZW5zaXRpdmVcIiBbYWN0aXZlXT1cImZpbHRlcmluZ09wdGlvbnMuY2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2FzZVNlbnNpdGl2ZSgpXCI+XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuICAgIDxpZ3gtc3VmZml4IGNsYXNzPVwiaWd4LWNvbWJvX190b2dnbGUtYnV0dG9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0b2dnbGVJY29uVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b2dnbGVJY29uVGVtcGxhdGU7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGNvbGxhcHNlZH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxpZ3gtaWNvbiAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCIgKm5nSWY9XCIhdG9nZ2xlSWNvblRlbXBsYXRlXCI+XG4gICAgICAgICAgICB7eyBkcm9wZG93bi5jb2xsYXBzZWQgPyAnYXJyb3dfZHJvcF9kb3duJyA6ICdhcnJvd19kcm9wX3VwJ319XG4gICAgICAgIDwvaWd4LWljb24+XG4gICAgPC9pZ3gtc3VmZml4PlxuPC9pZ3gtaW5wdXQtZ3JvdXA+XG5cbjxpZ3gtY29tYm8tZHJvcC1kb3duICNpZ3hDb21ib0Ryb3BEb3duIGNsYXNzPVwiaWd4LWNvbWJvX19kcm9wLWRvd25cIiBbZGlzcGxheURlbnNpdHldPVwiZGlzcGxheURlbnNpdHlcIlxuICAgIFtsYWJlbGxlZEJ5XT1cInRoaXMuYXJpYUxhYmVsbGVkQnkgfHwgdGhpcy5sYWJlbD8uaWQgfHwgdGhpcy5wbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgW3dpZHRoXT1cIml0ZW1zV2lkdGggfHwgJzEwMCUnXCIgKG9wZW5pbmcpPVwiaGFuZGxlT3BlbmluZygkZXZlbnQpXCIgKGNsb3NpbmcpPVwiaGFuZGxlQ2xvc2luZygkZXZlbnQpXCJcbiAgICAob3BlbmVkKT1cImhhbmRsZU9wZW5lZCgpXCIgKGNsb3NlZCk9XCJoYW5kbGVDbG9zZWQoKVwiIFtzaW5nbGVNb2RlXT1cInRydWVcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGVtcGxhdGVcIj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8ZGl2ICNkcm9wZG93bkl0ZW1Db250YWluZXIgY2xhc3M9XCJpZ3gtY29tYm9fX2NvbnRlbnRcIiBbc3R5bGUub3ZlcmZsb3ddPVwiJ2hpZGRlbidcIlxuICAgICAgICBbc3R5bGUubWF4SGVpZ2h0LnB4XT1cIml0ZW1zTWF4SGVpZ2h0XCIgW2lneERyb3BEb3duSXRlbU5hdmlnYXRpb25dPVwiZHJvcGRvd25cIlxuICAgICAgICBbdGFiaW5kZXhdPVwiZHJvcGRvd24uY29sbGFwc2VkID8gLTEgOiAwXCIgW2F0dHIuaWRdPVwiZHJvcGRvd24uaWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwidGhpcy5hY3RpdmVEZXNjZW5kYW50XCJcbiAgICAgICAgKGZvY3VzKT1cImRyb3Bkb3duLm9uRm9jdXMoKVwiIChrZXlkb3duKT1cImhhbmRsZUl0ZW1LZXlEb3duKCRldmVudClcIj5cbiAgICAgICAgPGlneC1jb21iby1pdGVtICBbcm9sZV09XCJpdGVtLmlzSGVhZGVyPyAnZ3JvdXAnIDogJ29wdGlvbidcIiBbc2luZ2xlTW9kZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtpdGVtSGVpZ2h0XT1cIml0ZW1IZWlnaHRcIiAoY2xpY2spPVwiaGFuZGxlSXRlbUNsaWNrKClcIiAqaWd4Rm9yPVwibGV0IGl0ZW0gb2YgZGF0YVxuICAgICAgICAgICAgICAgIHwgY29tYm9GaWx0ZXJpbmc6ZmlsdGVyVmFsdWU6ZGlzcGxheUtleTpmaWx0ZXJpbmdPcHRpb25zOmZpbHRlckZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgfCBjb21ib0dyb3VwaW5nOmdyb3VwS2V5OnZhbHVlS2V5Omdyb3VwU29ydGluZ0RpcmVjdGlvbjtcbiAgICAgICAgICAgICAgICBpbmRleCBhcyByb3dJbmRleDsgY29udGFpbmVyU2l6ZTogaXRlbXNNYXhIZWlnaHQ7IHNjcm9sbE9yaWVudGF0aW9uOiAndmVydGljYWwnOyBpdGVtU2l6ZTogaXRlbUhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cIml0ZW1cIiBbaXNIZWFkZXJdPVwiaXRlbS5pc0hlYWRlclwiIFtpbmRleF09XCJyb3dJbmRleFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVySXRlbVRlbXBsYXRlID8gaGVhZGVySXRlbVRlbXBsYXRlIDogaGVhZGVySXRlbUJhc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHskaW1wbGljaXQ6IGl0ZW0sIGRhdGE6IGRhdGEsIHZhbHVlS2V5OiB2YWx1ZUtleSwgZ3JvdXBLZXk6IGdyb3VwS2V5LCBkaXNwbGF5S2V5OiBkaXNwbGF5S2V5fVwiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uaXNIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICNsaXN0SXRlbVxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7JGltcGxpY2l0OiBpdGVtLCBkYXRhOiBkYXRhLCB2YWx1ZUtleTogdmFsdWVLZXksIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXl9O1wiPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWl0ZW0+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LWNvbWJvX19hZGRcIiAqbmdJZj1cImZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDAgfHwgaXNBZGRCdXR0b25WaXNpYmxlKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jb21ib19fZW1wdHlcIiAqbmdJZj1cImZpbHRlcmVkRGF0YS5sZW5ndGggPT09IDBcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXB0eVRlbXBsYXRlID8gZW1wdHlUZW1wbGF0ZSA6IGVtcHR5XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpZ3gtY29tYm8tYWRkLWl0ZW0gI2FkZEl0ZW0gW2l0ZW1IZWlnaHRdPVwiaXRlbUhlaWdodFwiICpuZ0lmPVwiaXNBZGRCdXR0b25WaXNpYmxlKClcIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cImRyb3Bkb3duLmNvbGxhcHNlZCA/IC0xIDogY3VzdG9tVmFsdWVGbGFnID8gMSA6IC0xXCIgY2xhc3M9XCJpZ3gtY29tYm9fX2FkZC1pdGVtXCIgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiQWRkIEl0ZW1cIiBbaW5kZXhdPVwidmlydHVhbFNjcm9sbENvbnRhaW5lci5pZ3hGb3JPZi5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJdGVtVGVtcGxhdGUgPyBhZGRJdGVtVGVtcGxhdGUgOiBhZGRJdGVtRGVmYXVsdFwiPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaWd4LWNvbWJvLWFkZC1pdGVtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJUZW1wbGF0ZVwiPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9pZ3gtY29tYm8tZHJvcC1kb3duPlxuXG48bmctdGVtcGxhdGUgI2NvbXBsZXggbGV0LWRpc3BsYXkgbGV0LWRhdGE9XCJkYXRhXCIgbGV0LWtleT1cImRpc3BsYXlLZXlcIj5cbiAgICB7e2Rpc3BsYXlba2V5XX19XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmltaXRpdmUgbGV0LWRpc3BsYXk+XG4gICAge3tkaXNwbGF5fX1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2VtcHR5PlxuICAgIDxzcGFuPnt7cmVzb3VyY2VTdHJpbmdzLmlneF9jb21ib19lbXB0eV9tZXNzYWdlfX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNhZGRJdGVtRGVmYXVsdCBsZXQtY29udHJvbD5cbiAgICA8YnV0dG9uIGlneEJ1dHRvbj1cImZsYXRcIiBpZ3hSaXBwbGU+QWRkIGl0ZW08L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2hlYWRlckl0ZW1CYXNlIGxldC1pdGVtIGxldC1rZXk9XCJ2YWx1ZUtleVwiIGxldC1ncm91cEtleT1cImdyb3VwS2V5XCI+XG4gICAge3sgaXRlbVtrZXldIH19XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -35808,8 +35808,10 @@ class IgxComboBaseDirective extends DisplayDensityBase {
|
|
|
35808
35808
|
this.manageRequiredAsterisk();
|
|
35809
35809
|
};
|
|
35810
35810
|
this.findMatch = (element) => {
|
|
35811
|
+
var _a;
|
|
35811
35812
|
const value = this.displayKey ? element[this.displayKey] : element;
|
|
35812
|
-
|
|
35813
|
+
const searchValue = this.searchValue || ((_a = this.comboInput) === null || _a === void 0 ? void 0 : _a.value);
|
|
35814
|
+
return (value === null || value === void 0 ? void 0 : value.toString().toLowerCase()) === searchValue.trim().toLowerCase();
|
|
35813
35815
|
};
|
|
35814
35816
|
}
|
|
35815
35817
|
/**
|
|
@@ -37677,17 +37679,15 @@ class IgxSimpleComboComponent extends IgxComboBaseDirective {
|
|
|
37677
37679
|
this.setSelection(newSelection);
|
|
37678
37680
|
}
|
|
37679
37681
|
clearOnBlur() {
|
|
37680
|
-
const filtered = this.filteredData.find(this.
|
|
37681
|
-
if (filtered === undefined || filtered === null || this.
|
|
37682
|
+
const filtered = this.filteredData.find(this.findMatch);
|
|
37683
|
+
if (filtered === undefined || filtered === null || this.getElementKey(filtered) !== this.selectedItem) {
|
|
37682
37684
|
this.clearAndClose();
|
|
37683
37685
|
return;
|
|
37684
37686
|
}
|
|
37685
|
-
if (this.isPartialMatch(filtered) || this.getElementVal(filtered) !== this._internalFilter) {
|
|
37686
|
-
this.clearAndClose();
|
|
37687
|
-
}
|
|
37688
37687
|
}
|
|
37689
|
-
|
|
37690
|
-
|
|
37688
|
+
getElementKey(element) {
|
|
37689
|
+
const elementVal = this.valueKey ? element[this.valueKey] : element;
|
|
37690
|
+
return elementVal;
|
|
37691
37691
|
}
|
|
37692
37692
|
getElementVal(element) {
|
|
37693
37693
|
const elementVal = this.displayKey ? element[this.displayKey] : element;
|