@energycap/components 0.40.2-rxjs-7-upgrade.20241216-1200 → 0.40.2-rxjs-7-upgrade.20241219-1425

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.
@@ -876,4 +876,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
876
876
  type: ViewChild,
877
877
  args: ['addNewButton']
878
878
  }] } });
879
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFtRCxTQUFTLEVBQWMsWUFBWSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzFLLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRCxPQUFPLEVBQXNELGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNHLE9BQU8sRUFBRSx1QkFBdUIsRUFBZSxNQUFNLHlEQUF5RCxDQUFDOzs7Ozs7Ozs7Ozs7O0FBMEIvRzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQU1ILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUFlO0lBRXJEOzs7OztPQUtHO0lBQzRCLFFBQVE7UUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQXdPRCxZQUNXLHdCQUFrRCxFQUNsRCxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixhQUE0QjtRQUV0QyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFMdkMsNkJBQXdCLEdBQXhCLHdCQUF3QixD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YUFBYTtzQkFBNUIsS0FBSztnQkFLVyxhQUFhO3NCQUE1QixLQUFLO2dCQUtTLGFBQWE7c0JBQTVCLEtBQUs7Z0JBU1csV0FBVztzQkFBM0IsTUFBTTtnQkFNVSxNQUFNO3NCQUF0QixNQUFNO2dCQUdzQixPQUFPO3NCQUFuQyxTQUFTO3VCQUFDLFNBQVM7Z0JBS3dCLEtBQUs7c0JBQWhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQU1DLFlBQVk7c0JBQTlDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gJy4uL2Zvcm0tY29udHJvbC1iYXNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cEhlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtLWdyb3VwLmhlbHBlcic7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51VGVtcGxhdGVUeXBlLCBNZW51SG9zdEVsZW1lbnRDbGFzc2VzLCBNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlLCBQb3B1cFN0YXR1cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXJlY3RpdmVzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCBQb3BwZXIgZnJvbSAncG9wcGVyLmpzJztcclxuXHJcbi8qKlxyXG4gKiBQb3NpdGlvbiBvZiB0aGUgbWVudSByZWxhdGl2ZSB0byB0aGUgaW5wdXRcclxuICovXHJcbmV4cG9ydCB0eXBlIENvbWJvYm94TWVudVBvc2l0aW9uID0gXCJ0b3BfcmlnaHRcIiB8IFwidG9wX2xlZnRcIiB8IFwiYm90dG9tX2xlZnRcIiB8IFwiYm90dG9tX3JpZ2h0XCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSB0eXBlIG9mIGFkZCBuZXcgaW1wbGVtZW50YXRpb24uIFN0YXRpYyBkaXNwbGF5cyBhIHNpbXBsZSBzdGF0aWMgYnV0dG9uIHdoaWxlIGR5bmFtaWMgdXBkYXRlc1xyXG4gKiB0aGUgbGFiZWwgb2YgdGhlIGJ1dHRvbiB3aXRoIHZhbHVlIG9mIHRoZSB0ZXh0Ym94XHJcbiAqL1xyXG50eXBlIEFkZE5ld1R5cGUgPSBcImR5bmFtaWNcIiB8IFwic3RhdGljXCIgfCBib29sZWFuO1xyXG5cclxuLyoqXHJcbiAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBcIkFkZCBuZXdcIiBidXR0b24gd2hlbiBpbiBzdGF0aWMgbW9kZVxyXG4gKi9cclxudHlwZSBBZGROZXdPcHRpb25zID0ge1xyXG5cdGxhYmVsPzogc3RyaW5nOyBcdC8qKiBBIGN1c3RvbSBsYWJlbCB0byBkaXNwbGF5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0IFwiQWRkIG5ldy4uLlwiICovXHJcblx0Y2xhc3NMaXN0Pzogc3RyaW5nOyBcdC8qKiBBIHN0cmluZyBvZiBzcGFjZS1zZXBhcmF0ZWQgdXRpbGl0eSBjbGFzc2VzIHdlJ2xsIGFwcGx5IHRvIHRoZSBsYWJlbCAqL1xyXG5cdGljb24/OiBzdHJpbmc7IFx0LyoqIEEgY3VzdG9tIGljb24gdG8gZGlzcGxheSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdCAnaWNvbi1hZGQnICovXHJcbn07XHJcblxyXG5cclxuLyoqXHJcbiAqIFNlbGVjdCBib3ggKHNlbGVjdCwgYXV0b2NvbXBsZXRlLCBjb21ib2JveClcclxuICpcclxuICogTk9URTogTWluL21heCBsZW5ndGggdmFsaWRhdGlvbiBpcyBpbXBsZW1lbnRlZCBvbiB0aGUgaW50ZXJuYWwgZWMtdGV4dGJveC5cclxuICogVmFsdWVzIHBhc3NlZCBpbiB2aWEgaW5wdXQgcHJvcGVydGllcyAoQHNlZSBtYXhsZW5ndGggLCBAc2VlIG1pbmxlbmd0aCApXHJcbiAqIGFyZSB1c2VkIHRvIGNyZWF0ZSB2YWxpZGF0b3JzIG9uIHRoZSB0ZXh0Ym94LiAgV2hlbiB0aGUgdmFsaWRhdGlvbiBvbiB0aGVcclxuICogdGV4dGJveCBmYWlscywgdGhlIHZhbGlkYXRpb24gZXJyb3IocykgZ2V0IHBhc3NlZCB1cCB0byB0aGUge0BzZWUgZm9ybU1vZGVsIH0uXHJcbiAqIFdoZW4gc2V0dGluZyB1cCB0aGlzIGNvbXBvbmVudCdzIHtAc2VlIEZvcm1Db250cm9sIH0sIHlvdSBkbyBOT1QgbmVlZCB0byBzZXQgdGhlXHJcbiAqIFZhbGlkYXRvcnMubWluTGVuZ3RoIG9yIFZhbGlkYXRvcnMubWF4TGVuZ3RoIHZhbGlkYXRvcnMuXHJcbiAqXHJcbiAqIFJlcXVpcmVkIGlzIGFsc28gcGFzc2VkIHZpYSBpbnB1dCBwcm9wZXJ0eSwgYnV0IHlvdSBTSE9VTEQgYWxzbyBzZXQgdXAgdGhlXHJcbiAqIFZhbGlkYXRvcnMucmVxdWlyZWQgdmFsaWRhdG9yIG9uIHRoaXMgY29tcG9uZW50J3MgRm9ybUNvbnRyb2wuXHJcbiAqXHJcbiAqIEBleHBvcnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAnZWMtY29tYm9ib3gnLFxyXG5cdHRlbXBsYXRlVXJsOiAnY29tYm9ib3guY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL2NvbWJvYm94LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIENvbWJvYm94Q29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG5cclxuXHQvKipcclxuXHQgKiBDbG9zZSB0aGUgcG9wdXAgbWVudSBvbiByZXNpemUgc28gdGhlIHdpZHRoIGFuZCBwb3NpdGlvbmluZyBjYW4gYmUgcmVjYWxjdWxhdGVkXHJcblx0ICogY29ycmVjdGx5LiBDYW5ub3QgYmUgcGxhY2VkIG9uIHRoZSBwb3B1cERpcmVjdGl2ZSBiZWNhdXNlIG9mIGEgYnVnIHdoZXJlXHJcblx0ICogSG9zdExpc3RlbmVycyBmb3IgZ2xvYmFsIGV2ZW50cyBkb24ndCBmaXJlXHJcblx0ICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xNDE5MVxyXG5cdCAqL1xyXG5cdEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKSBvblJlc2l6ZSgpIHtcclxuXHRcdGlmICh0aGlzLnBvcHVwKSB0aGlzLnBvcHVwLmhpZGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3cgdGhlIGFkZCBuZXcgYnV0dG9uIGluIHRoZSBwb3B1cFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBhZGROZXc/OiBBZGROZXdUeXBlO1xyXG5cclxuXHQvKiogQ29uZmlndXJlIHRoZSBhZGROZXcgYnV0dG9uIGxhYmVsICYgaWNvbiB3aGVuIGFkZE5ldyBpcyB0cnVlIGFuZCBzZXQgdG8gc3RhdGljXHJcblx0ICogRGVmYXVsdCBpcyBzZXQgdG86IHsgbGFiZWw6ICdBbGwgbmV3Li4uJywgaWNvbjogJ2ljb24tYWRkJ31cclxuXHQgKiBAc2VlIEFkZE5ld09wdGlvbnNcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKiBAZXhhbXBsZVxyXG5cdCAqIDxlYy1jb21ib2JveCBbYWRkTmV3XT1cInRydWVcIiBcclxuXHQgKiBcdCAgICAgICAgIFthZGROZXdPcHRpb25zXT1cInsgXHJcbiogXHRcdFx0XHRcdFx0bGFiZWw6ICdIZWxwIG1lIGNob29zZS4uLicsXHJcbiogXHRcdFx0XHRcdFx0aWNvbjogJ2ljb24tc2VhcmNoJyxcclxuKiBcdFx0XHRcdFx0XHRjbGFzc0xpc3Q6ICd0ZXh0LWJvZHktMiB0ZXh0LWxpbmsnIH1cIj5cclxuXHQgKiA8L2VjLWNvbWJvYm94PlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBhZGROZXdPcHRpb25zPzogQWRkTmV3T3B0aW9ucyA9IHsgXHJcblx0XHRsYWJlbDogJ0FkZCBuZXcuLi4nLFxyXG5cdFx0aWNvbjogJ2ljb24tYWRkJyxcclxuXHR9O1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSBpbnB1dC5cclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBUZXh0Ym94Q29tcG9uZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIG1heGxlbmd0aD86IG51bWJlcjtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFBvc2l0aW9uIG9mIHRoZSBtZW51IHJlbGF0aXZlIHRvIHRoZSB0ZXh0IGJveFxyXG5cdCAqIEBkZWZhdWx0ICdib3R0b21fcmlnaHQnXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIG1lbnVQb3NpdGlvbj86IENvbWJvYm94TWVudVBvc2l0aW9uID0gJ2JvdHRvbV9yaWdodCc7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbGxvd2VkIGluIHRoZSBpbnB1dFxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIFRleHRib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgbWlubGVuZ3RoPzogbnVtYmVyO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogSXRlbXMgdG8gc2hvdyBpbiBjb21ib2JveCBtZW51XHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgb3B0aW9uczogQXJyYXk8TWVudUl0ZW0+ID0gW107XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwbGF5IHRlbXBsYXRlIGZvciBtZW51IGl0ZW1zXHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgdGVtcGxhdGVUeXBlOiBNZW51VGVtcGxhdGVUeXBlID0gJ2xhYmVsJztcclxuXHJcblx0LyoqXHJcbiAgICAgKiBPcHRpb25hbCBjdXN0b20gdGVtcGxhdGUgZm9yIHRoZSBtZW51IGl0ZW1zLiBNdXN0IGRlY2xhcmUgYSB0ZW1wbGF0ZVxyXG5cdCAqIGlucHV0IHZhcmlhYmxlIGNhbGxlZCBcIml0ZW1cIiBsaWtlIHNvOiA8bmctdGVtcGxhdGUgI3RlbXBsYXRlTmFtZSBsZXQtaXRlbT4sXHJcblx0ICogd2hlcmUgaXRlbSByZXByZXNlbnRzIHRoZSBtZW51SXRlbS5cclxuICAgICAqIFdpbGwgb3ZlcnJpZGUgdGhlIGNob2ljZSBmb3IgdGVtcGxhdGVUeXBlIGlmIHByb3ZpZGVkLlxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21NZW51VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuXHQvKipcclxuXHQgKiBXaGVuIHRydWUsIHRoZSBtZW51IGl0ZW1zIHdpbGwgcHJlc2VydmUgdGhlIGljb24gc3BhY2Ugd2hlbiB0aGVyZSBpcyBubyBpY29uXHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIHByZXNlcnZlSWNvblNwYWNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBvc2l0aW9uIHRoZSBtZW51IGFzIGZpeGVkLCBpZGVhbCB3aGVuIGNvbWJvYm94ZXMgYXJlIGluc2lkZSBkaWFsb2dzXHJcblx0ICogRGVmYXVsdGluZyB0byB0cnVlIHNvIGFsbCBtZW51cyB3aWxsIGJlIGF0IGxlYXN0IHRoZSB3aWR0aCBvZiB0aGVcclxuXHQgKiB0ZXh0Ym94ICsgYnV0dG9uLCBidXQgY2FuIGdyb3cgd2lkZXIgaWYgdGhlIGlubmVyIGVsZW1lbnRzIG5lZWQgaXRcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgcG9wdXBGaXhlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJlY29yZHMgZnJvbSB0aGUgZGF0YXNvdXJjZVxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyB0b3RhbFJlY29yZHM/OiBudW1iZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHNldCB0byB0cnVlLCB3ZSB3aWxsIHVwcGVyQ2FzZSB0aGUgdGV4dCBib3ggYW5kIGFwcGx5IHRoZSBjbGFzcyBvbiB0aGUgYWRkIGJveFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyB1cHBlckNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG5cdC8qKlRoZSBwbGFjZWhvbGRlciB0byBzaG93IGluIHRoZSBjb21ib2JveC4gTGVhdmUgZW1wdHkgdG8gdXNlIGRlZmF1bHQgYmVoYXZpb3IgZGV0ZXJtaW5lZFxyXG5cdCAqIGJ5IHdoZXRoZXIgQWRkIE5ldyBpcyBlbmFibGVkXHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqIE9ic2VydmFibGUgdG8gc3Vic2NyaWJlIHRvIHdoZW4gdGhlIGNvbWJvYm94IG1lbnUgaXMgb3BlbmVkIGZvciB0aGUgZmlyc3QgdGltZSAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBsb2FkT25PcGVuT2JzZXJ2YWJsZT86IE9ic2VydmFibGU8TWVudUl0ZW1bXT4gfCB1bmRlZmluZWQ7XHJcblxyXG5cdC8qKiBEbyBub3QgZGlzcGxheSB0aGUgdG9nZ2xlIGJ1dHRvbiB3aGVuIHRydWUgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgaGlkZVRvZ2dsZUJ1dHRvbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBBbHdheXMgc2hvdyB0aGUgbWVudSB3aGVuIHRoZSBmb3JtTW9kZWwgaGFzIGEgdmFsdWUuIFNldHNcclxuXHQgKiBoaWRlVG9nZ2xlQnV0dG9uIHRvIHRydWUgYW5kIG1lbnVTdGF0dXMgdG8gdmlzaWJsZSBhcyB3ZWxsLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBhbHdheXNPcGVuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZGl0b25hbCBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSBlYy1tZW51IGVsZW1lbnRcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgbWVudUVsZW1lbnRDbGFzc2VzOiBNZW51SG9zdEVsZW1lbnRDbGFzc2VzIHwgc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogQWRkaXRpb25hbCBjbGFzc2VzIHRvIGFwcGx5IHRvIHRoZSAudGV4dGJveC1ncm91cCBlbGVtZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIHRleHRib3hFbGVtZW50Q2xhc3Nlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqIEhpZGUgJ05vIG1hdGNoZXMnIG1lc3NhZ2Ugd2hlbiB0cnVlICovXHJcblx0QElucHV0KCkgcHVibGljIGhpZGVOb01hdGNoZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcbiAgICogVGV4dCB0byBzaG93IHdoZW4gdGhlIG1lbnUgaXMgZW1wdHkuIFwiTm8gbWF0Y2hlc1wiIGlzIHRoZSBkZWZhdWx0LlxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBub01hdGNoZXNUZXh0OiBzdHJpbmcgPSAnTm9NYXRjaGVzX1NDJztcclxuXHJcblx0LyoqXHJcblx0ICogVHJ1bmNhdGUgbWVudSBpdGVtcyB3aGVuIHRydWVcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgdHJ1bmNhdGVJdGVtczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBOb3RpZnkgdGhlIHBhcmVudCB0aGF0IHRoZSBhZGQgbmV3IGJ1dHRvbiB3YXMgY2xpY2tlZFxyXG5cdCAqIEB0b2RvIGRpc2N1c3MgaWYgd2UgbmVlZCB0byBzZW5kIGFsb25nIHRoZSB2YWx1ZSBvciBzaG91bGRcclxuXHQgKiB0aGUgcGFyZW50IGdldCBpdCBmcm9tIHRoZSBmb3JtTW9kZWxcclxuXHQgKiAobHdmIDIwMTcuMDcuMTMpOiBJIHRoaW5rIHdlIG1pZ2h0IGFzIHdlbGwgc2VuZCB0aGUgdmFsdWUgYWxvbmcgYW5kXHJcblx0ICogbGVhdmUgaXQgdXAgdG8gdGhlIHBhcmVudCB0byBkZWNpZGUgaG93IHRvIGhhbmRsZSBpdC5cclxuXHQgKi9cclxuXHRAT3V0cHV0KCkgcHVibGljIGFkZE5ld0NsaWNrOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogTm90aWZ5IHBhcmVudCB3aGVuIHRleHQgdHlwZWQgaW50byB0ZXh0Ym94XHJcblx0ICovXHJcblx0QE91dHB1dCgpIHB1YmxpYyBzZWFyY2g6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cclxuXHRAVmlld0NoaWxkKCd0ZXh0Ym94JykgcHVibGljIHRleHRib3ghOiBUZXh0Ym94Q29tcG9uZW50O1xyXG5cclxuXHQvKipcclxuXHQgKiBBY2Nlc3MgdG8gdGhlIG1lbnUncyBjb21wb25lbnQgdmlhIHRoZSAge0BsaW5rIFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlfVxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoUG9wdXBDb250YWluZXJEaXJlY3RpdmUpIHByaXZhdGUgcG9wdXA/OiBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlZmVyZW5jZSB0aGUgYWRkLW5ldyBidXR0b24gZWxlbWVudFxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGQoJ2FkZE5ld0J1dHRvbicpIHByaXZhdGUgYWRkTmV3QnV0dG9uITogRWxlbWVudFJlZjtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEZpbHRlcmVkIEl0ZW1zIHRvIHNob3cgaW4gY29tYm9ib3ggbWVudVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnM6IEFycmF5PE1lbnVJdGVtPiA9IFtdO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVHJhY2tzIGlmIHRoZSBtZW51IGlzIG9wZW4gb3IgaGlkZGVuXHJcblx0ICovXHJcblx0cHVibGljIG1lbnVTdGF0dXM6IFBvcHVwU3RhdHVzID0gJ2hpZGRlbic7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBQbGFjZWhvbGRlciB0byBhc3NpZ24gdG8gdGV4dGJveFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZmZlY3RpdmVQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBtZW51IGl0ZW1cclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0ZWRJdGVtOiBNZW51SXRlbSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRm9ybUNvbnRyb2wgZm9yIHRoZSB0ZXh0Ym94XHJcblx0ICovXHJcblx0cHVibGljIHRleHRib3hGb3JtTW9kZWw6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woJycpO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVHJhY2tzIHdoZXRoZXIgdGhlIGFkZCBuZXcgYnV0dG9uIGlzIHNlbGVjdGVkXHJcblx0ICovXHJcblx0cHVibGljIGFkZE5ld1NlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBUcmFja3Mgd2hldGhlciB0aGUgdGV4dGJveEZvcm1Nb2RlbCB2YWx1ZSBtYXRjaGVzIGFuIGl0ZW0gaW4gdGhlIGZpbHRlcmVkT3B0aW9uc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBmb3VuZE1hdGNoOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE51bWJlciBvZiBmaWx0ZXJlZCBvcHRpb25zIHRvIGRpc3BsYXkgaW4gdGhlIGZvb3Rlci4gIEV4Y2x1ZGVzIGhlYWRpbmdzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWx0ZXJlZE9wdGlvbkNvdW50OiBudW1iZXIgPSAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBGbGF0IGxpc3Qgb2Ygc2VsZWN0YWJsZSBpdGVtcyBpbiB0aGUgY29tYm9ib3guXHJcblx0ICogRG9lcyBub3QgaW5jbHVkZSBoZWFkaW5ncyBvciBkaXZpZGVyLXNlY3Rpb24gaXRlbXMuXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzZWxlY3RhYmxlSXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kZXggb2YgdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBvcHRpb25zXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzZWxlY3RlZEl0ZW1JbmRleDogbnVtYmVyID0gLTE7XHJcblxyXG5cdC8qKiBQbGFjZWhvbGRlciB0ZXh0IGZvciAnQ2hvb3NlIG9yIEFkZC4uLicgKi9cclxuXHRwcml2YXRlIGNob29zZU9yQWRkUGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG5cclxuXHQvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgJ0Nob29zZScgKi9cclxuXHRwcml2YXRlIGNob29zZVBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuXHJcblx0cHJpdmF0ZSBoYXNEYXRhQmVlbkxvYWRlZE9uT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByb3RlY3RlZCB2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2U6IFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCBmb3JtR3JvdXBIZWxwZXI6IEZvcm1Hcm91cEhlbHBlcixcclxuXHRcdHByb3RlY3RlZCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgc2Nyb2xsU2VydmljZTogU2Nyb2xsU2VydmljZVxyXG5cdCkge1xyXG5cdFx0c3VwZXIodmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlLCBmb3JtR3JvdXBIZWxwZXIpO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBhbmd1bGFyIG9uQ2hhbmdlcyBsaWZlY3ljbGUgZXZlbnRcclxuXHQgKiBAc2VlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9saWZlY3ljbGUtaG9va3NcclxuXHQgKi9cclxuXHRwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkNoYW5nZXMoY2hhbmdlcyk7XHJcblxyXG5cdFx0Ly8gd2hlbiBvcHRpb25zIGNoYW5nZXNcclxuXHRcdGlmIChjaGFuZ2VzLm9wdGlvbnMpIHtcclxuXHRcdFx0dGhpcy5yZXNldE9wdGlvbnMoKTtcclxuXHJcblx0XHRcdC8vIFVwZGF0ZSB0aGUgcG9wdXAgcG9zaXRpb25cclxuXHRcdFx0aWYgKHRoaXMucG9wdXApIHtcclxuXHRcdFx0XHR0aGlzLnBvcHVwLnVwZGF0ZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gdXBkYXRlIHZhbGlkYXRvcnMgb24gdGhlIHRleHRib3hcclxuXHRcdGlmIChjaGFuZ2VzLnJlcXVpcmVkIHx8IGNoYW5nZXMubWlubGVuZ3RoIHx8IGNoYW5nZXMubWF4bGVuZ3RoKSB7XHJcblx0XHRcdHRoaXMuc2V0VGV4dGJveEZvcm1Nb2RlbFZhbGlkYXRvcnMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBVcGRhdGUgcGxhY2Vob2xkZXIgdGV4dCB3aGVuICdBZGQgTmV3JyBpcyBjb25kaXRpb25hbC5cclxuXHRcdC8vIG5nT25DaGFuZ2VzKCkga2lja3Mgb2ZmIGJlZm9yZSBuZ09uSW5pdCwgc28gaW4gb3JkZXJcclxuXHRcdC8vIHRvIG5vdCBvdmVyd3JpdGUgYSB1c2VyLXByb3ZpZGVkIHBsYWNlaG9sZGVyLCBkbyBub3RcclxuXHRcdC8vIHVwZGF0ZSBwbGFjZWhvbGRlciBvbiBmaXJzdCBjaGFuZ2UgKG5nT25Jbml0IHdpbGwgdGFrZSBjYXJlIG9mIGl0KS5cclxuXHRcdGlmICgoY2hhbmdlcy5hZGROZXcgJiYgIWNoYW5nZXMuYWRkTmV3LmlzRmlyc3RDaGFuZ2UoKSkgfHwgY2hhbmdlcy5wbGFjZWhvbGRlcikge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZVBsYWNlaG9sZGVyVGV4dCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGFuZ3VsYXIgb25Jbml0IGxpZmVjeWNsZSBob29rXHJcblx0ICogQHNlZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzXHJcblx0ICovXHJcblx0cHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0c3VwZXIubmdPbkluaXQoKTtcclxuXHJcblx0XHRpZiAodGhpcy5hbHdheXNPcGVuKSB7XHJcblx0XHRcdHRoaXMuaGlkZVRvZ2dsZUJ1dHRvbiA9IHRydWU7XHJcblx0XHRcdHRoaXMubWVudVN0YXR1cyA9ICd2aXNpYmxlJztcclxuXHRcdH1cclxuXHJcblx0XHQvLyBHZXQgdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0XHJcblx0XHR0aGlzLmNob29zZU9yQWRkUGxhY2Vob2xkZXIgPSBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDaG9vc2Ugb3IgYWRkJyl9Li4uYDtcclxuXHRcdHRoaXMuY2hvb3NlUGxhY2Vob2xkZXIgPSBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdDaG9vc2UnKX1gO1xyXG5cclxuXHRcdHRoaXMuZm9ybU1vZGVsQ2hhbmdlZCh0aGlzLmZvcm1Nb2RlbC52YWx1ZSk7XHJcblx0XHR0aGlzLnNldFRleHRib3hGb3JtTW9kZWxWYWxpZGF0b3JzKCk7XHJcblxyXG5cdFx0Ly8gRXJyb3JzIGZvciB0aGlzIGNvbXBvbmVudCBhcmUgZGlzcGxheWVkIHZpYSB0aGUgdmFsaWRhdGlvbkVycm9ycyBwcm9wZXJ0eSwgd2hpY2ggaXNcclxuXHRcdC8vIHBvcHVsYXRlZCB3aGVuIHRyYW5zbGF0ZVZhbGlkYXRpb25NZXNzYWdlcyBpcyBydW4uXHJcblx0XHQvLyBXaGVuIHRoZSBpbnRlcm5hbCBUZXh0Ym94Q29tcG9uZW50IGhhcyB2YWxpZGF0aW9uIGVycm9ycywgd2Ugc2V0IHRoZW0gb24gdGhlXHJcblx0XHQvLyBmb3JtTW9kZWwgYXMgd2VsbC4gIFRoaXMgdXBkYXRlcyB0aGUgdmFsaWRpdHkgb2Ygb3VyIENvbWJvYm94Q29tcG9uZW50IGNvbnRyb2wsXHJcblx0XHQvLyBidXQgZG9lcyBub3QgdHJpZ2dlciB0cmFuc2xhdGlvbi4gIFN1YnNjcmliZSB0byBzdGF0dXNDaGFuZ2VzIGhlcmUgc28gY29tcG9uZW50XHJcblx0XHQvLyB2YWxpZGF0aW9uIGVycm9ycyB3aWxsIGFwcGVhciBhbG9uZyB3aXRoIHRoZSBDb21ib2JveENvbXBvbmVudCdzIGxhYmVsLlxyXG5cdFx0dGhpcy5mb3JtTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXHJcblx0XHRcdHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuXHRcdCkuc3Vic2NyaWJlKGRhdGEgPT4gdGhpcy5mb3JtTW9kZWxDaGFuZ2VkKGRhdGEpKTtcclxuXHJcblx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHR0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpXHJcblx0XHQpLnN1YnNjcmliZShkYXRhID0+IHRoaXMuc2V0Rm9ybU1vZGVsVmFsaWRhdGlvbkVycm9ycyhkYXRhKSk7XHJcblxyXG5cdFx0Ly8gZGVmYXVsdCBwbGFjZWhvbGRlclxyXG5cdFx0dGhpcy51cGRhdGVQbGFjZWhvbGRlclRleHQoKTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgYW5ndWxhciBhZnRlclZpZXdJbml0IGxpZmVjeWNsZSBob29rXHJcblx0ICogQHNlZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzXHJcblx0ICovXHJcblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHRcdGlmICghdGhpcy5wb3B1cCkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gYWxsb3cgb3ZlcmZsb3cgb3V0IG9mIHRoZSBzY3JvbGxQYXJlbnRcclxuXHRcdC8vIHByZXZlbnRzIG1lbnUgZnJvbSBvYnNjdXJpbmcgdGhlIGNvbWJvYm94XHJcblx0XHRsZXQgcG9wcGVyT3B0aW9uczogUG9wcGVyLlBvcHBlck9wdGlvbnMgPSB7XHJcblx0XHRcdG1vZGlmaWVyczoge1xyXG5cdFx0XHRcdHByZXZlbnRPdmVyZmxvdzoge1xyXG5cdFx0XHRcdFx0Ym91bmRhcmllc0VsZW1lbnQ6ICd2aWV3cG9ydCdcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH07XHJcblxyXG5cdFx0Ly8gY29udmVydCB0aGUgQ29tYm9ib3hNZW51UG9zaXRpb24gaW50byBhIFBvcHBlclBsYWNlbWVudFxyXG5cdFx0c3dpdGNoICh0aGlzLm1lbnVQb3NpdGlvbikge1xyXG5cdFx0XHRjYXNlIChcInRvcF9sZWZ0XCIpOlxyXG5cdFx0XHRcdHBvcHBlck9wdGlvbnMucGxhY2VtZW50ID0gJ3RvcC1zdGFydCc7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgKFwidG9wX3JpZ2h0XCIpOlxyXG5cdFx0XHRcdHBvcHBlck9wdGlvbnMucGxhY2VtZW50ID0gJ3RvcC1lbmQnO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIChcImJvdHRvbV9sZWZ0XCIpOlxyXG5cdFx0XHRcdHBvcHBlck9wdGlvbnMucGxhY2VtZW50ID0gJ2JvdHRvbS1zdGFydCc7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgKFwiYm90dG9tX3JpZ2h0XCIpOlxyXG5cdFx0XHRcdHBvcHBlck9wdGlvbnMucGxhY2VtZW50ID0gJ2JvdHRvbS1lbmQnO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtZW51UG9zaXRpb24gZm9yIENvbWJvYm94Q29tcG9uZW50LmApXHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gU2Nyb2xsIHRoZSBtZW51IHRvIHRoZSBzZWxlY3RlZCBpdGVtIG9uY2UgdGhlIHBvcHVwIG1lbnUgaXMgcmVhZHlcclxuXHRcdHBvcHBlck9wdGlvbnMub25DcmVhdGUgPSAoKSA9PiB7XHJcblx0XHRcdHRoaXMuc2Nyb2xsTWVudSgpO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMucG9wdXBGaXhlZCkge1xyXG5cdFx0XHRcdHRoaXMucG9wdXAhLmZpeFBvc2l0aW9uKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5wb3B1cEZpeGVkKSB7XHJcblx0XHRcdHBvcHBlck9wdGlvbnMub25VcGRhdGUgPSAoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5wb3B1cCEuZml4UG9zaXRpb24oKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMucG9wdXAucG9wcGVyT3B0aW9ucyA9IHBvcHBlck9wdGlvbnM7XHJcblxyXG5cdFx0dGhpcy5wb3B1cC5wb3BwZXJTdGF0dXNDaGFuZ2UucGlwZShcclxuXHRcdFx0dGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG5cdFx0KS5zdWJzY3JpYmUoKGV2ZW50OiAndmlzaWJsZScgfCAnaGlkZGVuJykgPT4ge1xyXG5cdFx0XHRcdHRoaXMubWVudVN0YXR1cyA9IGV2ZW50O1xyXG5cclxuXHRcdFx0XHQvLyBTeW5jaHJvbml6ZSB0aGUgZm9ybU1vZGVsIGFuZCB0ZXh0Rm9ybU1vZGVsIHZhbHVlcyB3aGVuIHRoZVxyXG5cdFx0XHRcdC8vIHBvcHVwIG1lbnUgY2xvc2VzIGFuZCB1bi1maWx0ZXIgdGhlIG9wdGlvbnMgYW5kIHJlc2V0IHRoZVxyXG5cdFx0XHRcdC8vIHNlbGVjdGVkSXRlbSBhbmQgaW5kZXhcclxuXHRcdFx0XHRpZiAoZXZlbnQgPT09ICdoaWRkZW4nKSB7XHJcblx0XHRcdFx0XHR0aGlzLnN5bmNNb2RlbFZhbHVlcygpO1xyXG5cdFx0XHRcdFx0dGhpcy5yZXNldE9wdGlvbnMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCBlcnJvcnMgb24gdGhlIHRleHRib3hGb3JtTW9kZWwsIHdoaWNoIHdpbGwgdGhlbiBzZXQgZXJyb3JzIG9uIHRoZVxyXG5cdCAqIGZvcm1Nb2RlbC4gQWxzbyBtYXJrIHRoZSBmb3JtTW9kZWwgYXMgdG91Y2hlZCB0byBkaXNwbGF5IGFueSBlcnJvcnMuXHJcblx0ICogQHBhcmFtIGVycm9ycyBrZXkocykgb2YgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIGVycm9ycyB0byBkaXNwbGF5IG9yIHJlbW92ZVxyXG5cdCAqIEBtZW1iZXJvZiBDb21vYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgc2V0RXJyb3JzKGVycm9yczogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0pOiB2b2lkIHtcclxuXHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRFcnJvcnMoZXJyb3JzKTtcclxuXHRcdHRoaXMuZm9ybU1vZGVsLm1hcmtBc1RvdWNoZWQoKTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBVbmZpbHRlciBvcHRpb25zIGFuZCB1cGRhdGUgdGhlIHNlbGVjdGVkSXRlbSBhbmQgc2VsZWN0ZWRJdGVtSW5kZXhcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgcmVzZXRPcHRpb25zKG9wdGlvbnM/OiBNZW51SXRlbVtdKTogdm9pZCB7XHJcblx0XHR0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMgfHwgdGhpcy5vcHRpb25zO1xyXG5cdFx0dGhpcy5zZWxlY3RhYmxlSXRlbXMgPSBNZW51Q29tcG9uZW50LmdldFNlbGVjdGFibGVJdGVtcyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XHJcblx0XHQvLyBkbyBub3QgY291bnQgaGVhZGluZ3NcclxuXHRcdHRoaXMuZmlsdGVyZWRPcHRpb25Db3VudCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zPy5maWx0ZXIobyA9PiBvLmRpc3BsYXkgIT09ICdoZWFkaW5nJyAmJiBvLmRpc3BsYXkgIT09ICdkaXZpZGVkLXNlY3Rpb24nKS5sZW5ndGggfHwgMDtcclxuXHJcblx0XHQvL2lmIHRoZXkgaGF2ZSBubyBzZWFyY2ggdGVybSwgZG9uJ3QgdHJ5IHRvIHNlbGVjdCBhbnl0aGluZyBzbyB0aGV5IGNhbiBjbGVhciB0aGUgYm94IG91dCBieSBoaXR0aW5nIGVudGVyXHJcblx0XHQvL2lmIHRoZXkgaGF2ZSBhIHNlYXJjaCB0ZXJtIGFuZCB0aGUgb3B0aW9ucyBjaGFuZ2VkLCBzZWxlY3QgYW4gb3B0aW9uIGZyb20gdGhlIG1lbnUgc28gdGhleSB3aWxsIGdldCBpdCBhdXRvbWF0aWNhbGx5IGlmIHRoZXkgaGl0IGVudGVyXHJcblx0XHRpZiAodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlICE9PSAnJykge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gdGhpcy5maW5kRGVmYXVsdFNlbGVjdGlvbkluZGV4KHRoaXMuc2VsZWN0YWJsZUl0ZW1zLCB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0YWJsZUl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdIHx8IG51bGw7XHJcblx0XHRcdHRoaXMuc2Nyb2xsTWVudSh0aGlzLnNlbGVjdGVkSXRlbUluZGV4KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vaWYgdGhleSBoYXZlIG5vIHNlYXJjaCB0ZXJtIGFuZCB0aGUgb3B0aW9ucyBhcmUgcmVzZXQsIGRvbid0IGF1dG8tcGljayB0aGUgZmlyc3Qgb25lXHJcblx0XHRcdC8vc28gdGhhdCBlbnRlciB3aWxsIGFsbG93IHRoZW0gdG8gd2lwZSBvdXQgdGhlaXIgbGFzdCBzZWxlY3Rpb25cclxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkSXRlbSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlzdGVuIHRvIHRoZSBzZWxlY3RlZCBjaGFuZ2VkIGV2ZW50IGZyb20ge0BsaW5rIE1lbnVDb21wb25lbnR9IGFuZCB1cGRhdGUgdGhlIGZvcm1cclxuXHQgKiBtb2RlbCBhbmQgY2xvc2UgbWVudVxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZWxlY3RlZENoYW5nZWQoaXRlbTogTWVudUl0ZW0pOiB2b2lkIHtcclxuXHRcdHRoaXMuc2V0Rm9ybU1vZGVsVmFsdWUoaXRlbSk7XHJcblx0XHR0aGlzLnRvZ2dsZU1lbnUoKTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93IGFuZCBoaWRlIHRoZSBwb3B1cCBtZW51XHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwdWJsaWMgdG9nZ2xlTWVudShldmVudD86IEV2ZW50KTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMucG9wdXApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChldmVudCkge1xyXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIXRoaXMuZm9ybU1vZGVsLmRpc2FibGVkKSB7XHJcblx0XHRcdGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICd2aXNpYmxlJykge1xyXG5cdFx0XHRcdC8vIFdoZW4gdGhlIHBvcHVwIGlzIGhpZGRlbiBpdCB3aWxsIGVtaXQgaXRzIGNoYW5nZWQgc3RhdHVzIGFuZFxyXG5cdFx0XHRcdC8vIHdlIHdpbGwgcmVzZXQgdmFsdWVzIGlmIG5lZWQgYmUuXHJcblx0XHRcdFx0dGhpcy5wb3B1cC5oaWRlKCk7XHJcblx0XHRcdH1cclxuXHRcdFx0ZWxzZSB7XHJcblx0XHRcdFx0aWYgKHRoaXMubG9hZE9uT3Blbk9ic2VydmFibGUgJiYgIXRoaXMuaGFzRGF0YUJlZW5Mb2FkZWRPbk9wZW4pIHtcclxuXHRcdFx0XHRcdHRoaXMucGVuZGluZyA9IHRydWU7XHJcblxyXG5cdFx0XHRcdFx0dGhpcy5sb2FkT25PcGVuT2JzZXJ2YWJsZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgocmVzdWx0OiBNZW51SXRlbVtdKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuaGFzRGF0YUJlZW5Mb2FkZWRPbk9wZW4gPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0dGhpcy5wZW5kaW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdHRoaXMub3B0aW9ucyA9IHJlc3VsdDtcclxuXHJcblx0XHRcdFx0XHRcdHRoaXMucmVzZXRPcHRpb25zKCk7XHJcblx0XHRcdFx0XHRcdHRoaXMucG9wdXAhLnNob3coKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnBvcHVwLnNob3coKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XHJcblx0XHR0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogQ29udHJvbCB0aGUgbWVudSB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb25cclxuXHQgKlxyXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleSNFeGFtcGxlIHwgS2V5Ym9hcmRFdmVudC5rZXl9XHJcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMgfCBLZXkgVmFsdWVzfVxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIGtleU5hdmlnYXRlKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcblx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XHJcblx0XHRcdGNhc2UgXCJEb3duXCI6XHJcblx0XHRcdGNhc2UgXCJBcnJvd1VwXCI6XHJcblx0XHRcdGNhc2UgXCJVcFwiOlxyXG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0dGhpcy5vbkFycm93RG93blVwKGV2ZW50KTtcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgXCJCYWNrc3BhY2VcIjpcclxuXHRcdFx0Y2FzZSBcIkRlbGV0ZVwiOlxyXG5cdFx0XHRjYXNlIFwiRGVsXCI6XHJcblx0XHRcdFx0aWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ2hpZGRlbicpIHtcclxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlTWVudSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcIlRhYlwiOlxyXG5cdFx0XHRcdC8vIElmIHRhYmJpbmcgZnJvbSB0aGUgdGV4dGJveCB0byB0aGUgYnV0dG9uLCBvdmVycmlkZSB0aGUgdGV4dGJveCBhcyBiZWluZ1xyXG5cdFx0XHRcdC8vIG1hcmtlZCB0b3VjaGVkIHNvIHdlIGRvbid0IHNlZSB0aGUgaW52YWxpZCBzdGF0ZS4gT25seSBzaG93IHRoZSBpbnZhbGlkIHN0YXRlXHJcblx0XHRcdFx0Ly8gd2hlbiB0YWJiaW5nIG91dCBvZiBjb21ib2JveCBmcm9tIHRoZSBidXR0b24gb3IgYmFjayB0YWJiaW5nIGZyb20gdGhlIHRleHRib3hcclxuXHRcdFx0XHQvLyBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zcmNFbGVtZW50ICYmIGV2ZW50LnNyY0VsZW1lbnQudGFnTmFtZSA9PT0gJ0lOUFVUJykge1xyXG5cdFx0XHRcdC8vIFx0aWYgKGV2ZW50LnNoaWZ0S2V5KSB7XHJcblx0XHRcdFx0Ly8gXHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHRcdFx0Ly8gXHRcdHRoaXMuZm9ybU1vZGVsLm1hcmtBc1RvdWNoZWQoKTtcclxuXHRcdFx0XHQvLyBcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gXHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0XHQvLyBcdH1cclxuXHRcdFx0XHQvLyB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgZXZlbnQuc3JjRWxlbWVudCAmJiBldmVudC5zcmNFbGVtZW50LnRhZ05hbWUgPT09ICdCVVRUT04nKSB7XHJcblx0XHRcdFx0Ly8gXHRpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XHJcblx0XHRcdFx0Ly8gXHRcdHRoaXMuZm9ybU1vZGVsLm1hcmtBc1RvdWNoZWQoKTtcclxuXHRcdFx0XHQvLyBcdH1cclxuXHRcdFx0XHQvLyB9XHJcblxyXG5cdFx0XHRcdGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICd2aXNpYmxlJykge1xyXG5cdFx0XHRcdFx0Ly9pZiB0aGUgc2VsZWN0ZWQgb3B0aW9uIGlzIHRoZSBhZGQgbmV3IGJ1dHRvbiBsZXQgaXQgZmlyZSBidXQgZG9uJ3QgYWxsb3dcclxuXHRcdFx0XHRcdC8vdGhlIHRhYiBldmVudCB0byBjYXJyeSB0aGVtIGZvcndhcmQgZnJvbSB3aGVyZXZlciB0aGV5IGxhbmQgLSB0aGV5IHdvdWxkIHNraXAgdGhlIGZpcnN0IGJveCBvbiB0aGUgYWRkIG5ldyBmb3JtXHJcblx0XHRcdFx0XHQvL0luIHRoZSBub3JtYWwgY2FzZSB3ZSB3YW50IHRvIGFsbG93IHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9yIHRoZXkgd29uJ3QgYmUgYWJsZSB0byB0YWIgb3V0IG9mIHRoZSBjb250cm9sIGF0IGFsbC5cclxuXHRcdFx0XHRcdGlmKHRoaXMuYWRkTmV3U2VsZWN0ZWQpe1xyXG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0U2VsZWN0aW9uKGV2ZW50KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlIFwiRW50ZXJcIjpcclxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuXHRcdFx0XHRcdHRoaXMuY29tbWl0U2VsZWN0aW9uKGV2ZW50KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlIFwiRXNjYXBlXCI6XHJcblx0XHRcdGNhc2UgXCJFc2NcIjpcclxuXHRcdFx0XHRpZiAodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuXHRcdFx0XHRcdC8vIEp1c3QgY2xvc2UgdGhlIG1lbnUsIGRvIG5vdCBmb2N1cyB0aGUgbmV4dCBlbGVtZW50IG9uIHRhYlxyXG5cdFx0XHRcdFx0Ly8gdW5sZXNzIHRoZSBtZW51IGlzIGhpZGRlblxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0XHQvLyBDbG9zZSB0aGUgbWVudSBiZWZvcmUgd2UgcmVzZXQgc2VsZWN0ZWRJdGVtIHNvIHdlIGRvbid0IHNlZSB0aGUgaGlnaGxpZ2h0IGNoYW5naW5nXHJcblx0XHRcdFx0XHQvLyB3aGVuIHJlc2V0IHRoZSBzZWxlY3RlZCBpdGVtIGJhY2sgdG8gdGhlIGZvcm1Nb2RlbFxyXG5cdFx0XHRcdFx0dGhpcy50b2dnbGVNZW51KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBcIiBcIjpcclxuXHRcdFx0Y2FzZSBcIlNwYWNlYmFyXCI6XHJcblx0XHRcdFx0aWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ2hpZGRlbicpIHtcclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZU1lbnUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICdoaWRkZW4nICYmIGV2ZW50LmtleSAhPT0gJ1NoaWZ0Jykge1xyXG5cdFx0XHRcdFx0dGhpcy50b2dnbGVNZW51KCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZhY2lsaXRhdGVzIGFkZGluZyBpdGVtcyB0byBhIGNvbWJvYm94XHJcblx0ICpcclxuXHQgKiBAcGFyYW0gYWRkRm4gRnVuY3Rpb24gZnJvbSBwYXJlbnQgdGhhdCBzaG91bGQgbWFrZSBhbiBBUEkgcmVxdWVzdCB0byBhZGQgYSBuZXcgaXRlbSB0byB0aGUgY29tYm9ib3gncyBvcHRpb25zXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIGFzeW5jIGFkZE5ld0l0ZW0oYWRkRm46ICgpID0+IFByb21pc2U8dm9pZD4pIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGFkZEZuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIC8vIFdlIGdhdmUgaXQgb3VyIGJlc3QgdHJ5LCBzb21ldGhpbmcgaXMgcmVhbGx5IHdoYWNrLCBzbyBsZXQncyBqdXN0IHNldCB0aGUgZXJyb3JcclxuICAgICAgICAgICAgdGhpcy5zZXRFcnJvcnMoeyAnYWRkbmV3JzogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2dnbGVNZW51KCk7XHJcbiAgICB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZpZ3VyZSBvdXQgd2hldGhlciB0aGV5IGFyZSBhZGRpbmcgbmV3IG9yIGhhdmUgYW4gaXRlbSBzZWxlY3RlZCwgYW5kIGNvbW1pdCBpdCB0byB0aGUgZm9ybSBtb2RlbFxyXG5cdCAqL1xyXG4gIHByaXZhdGUgY29tbWl0U2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5hZGROZXdTZWxlY3RlZCkge1xyXG5cdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0dGhpcy5vbkFkZE5ldyhldmVudCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldEZvcm1Nb2RlbFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtKTtcclxuXHRcdFx0dGhpcy50b2dnbGVNZW51KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSB0ZXh0Ym94IHRvIHRoZSBwYXJlbnQgd2hlbiB0aGUgYWRkIG5ldyBidXR0b24gaXNcclxuXHQgKiBjbGlja2VkXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZXZlbnQgQWRkIG5ldyBidXR0b24gY2xpY2sgb3IgZW50ZXIga2V5IGV2ZW50XHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIG9uQWRkTmV3KGV2ZW50OiBFdmVudCk6IHZvaWQge1xyXG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR0aGlzLmFkZE5ld1NlbGVjdGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLmFkZE5ld0NsaWNrLmVtaXQodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlKTtcclxuXHRcdHRoaXMucG9wdXA/LmhpZGUoKTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZSB0aGUgZHJvcGRvd24gbWVudSB1c2luZyB1cCBhbmQgZG93biBhcnJvdyBrZXlzXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gZXZlbnQgVXAgb3IgZG93biBhcnJvdyBrZXlkb3duIGV2ZW50XHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBvbkFycm93RG93blVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcblx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRjYXNlIFwiQXJyb3dEb3duXCI6XHJcblx0XHRcdGNhc2UgXCJEb3duXCI6XHJcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPT09IC0xICYmIHRoaXMuYWRkTmV3QnV0dG9uICYmICF0aGlzLmFkZE5ld0J1dHRvbi5uYXRpdmVFbGVtZW50LmhpZGRlbiAmJiAhdGhpcy5hZGROZXdTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5hZGROZXdTZWxlY3RlZCA9IHRydWU7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4IDwgdGhpcy5zZWxlY3RhYmxlSXRlbXMubGVuZ3RoIC0gMSkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1JbmRleCsrO1xyXG5cclxuXHRcdFx0XHRcdGlmICh0aGlzLmFkZE5ld1NlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWRkTmV3U2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlIFwiQXJyb3dVcFwiOlxyXG5cdFx0XHRjYXNlIFwiVXBcIjpcclxuXHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9PT0gLTEgJiYgdGhpcy5hZGROZXdCdXR0b24gJiYgIXRoaXMuYWRkTmV3QnV0dG9uLm5hdGl2ZUVsZW1lbnQuaGlkZGVuICYmIHRoaXMuYWRkTmV3U2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuYWRkTmV3U2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0XHR9IGVsc2UgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPiAtMSkge1xyXG5cdFx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1JbmRleC0tO1xyXG5cclxuXHRcdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID09PSAtMSAmJiB0aGlzLmFkZE5ld0J1dHRvbiAmJiAhdGhpcy5hZGROZXdCdXR0b24ubmF0aXZlRWxlbWVudC5oaWRkZW4pIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5hZGROZXdTZWxlY3RlZCA9IHRydWU7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGFibGVJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbUluZGV4XTtcclxuXHJcblx0XHRpZiAodGhpcy5tZW51U3RhdHVzID09PSAnaGlkZGVuJykge1xyXG5cclxuXHRcdFx0dGhpcy5zZXRGb3JtTW9kZWxWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNjcm9sbE1lbnUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHJcblx0LyoqXHJcblxyXG5cdCAqIEZpbHRlciBhcnJheSBvZiBvcHRpb25zIGJ5IGxhYmVsIG9yIGNhcHRpb24gKGNvbnRhaW5zKVxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGZpbHRlclRleHQgVGhlIHZhbHVlIG9mIHRleHRib3ggdGhhdCB3ZSB3aWxsIGZpbHRlciBvdXIgb3B0aW9ucyBieVxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBmaWx0ZXJPcHRpb25zQXJyYXkoZmlsdGVyVGV4dDogc3RyaW5nKTogQXJyYXk8TWVudUl0ZW0+IHtcclxuXHRcdGxldCBzZWFyY2hUZXh0ID0gZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0aWYgKGZpbHRlclRleHQgJiYgZmlsdGVyVGV4dCAhPT0gJycpIHtcclxuXHRcdFx0Y29uc3QgbWF0Y2hlc1NlYXJjaCA9IChpdGVtOiBNZW51SXRlbSkgPT4gaXRlbS5sYWJlbC50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGV4dCkgPj0gMCB8fCAoaXRlbS5jYXB0aW9uICYmIGl0ZW0uY2FwdGlvbi50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoVGV4dCkgPj0gMCk7XHJcblx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMucmVkdWNlKChmaWx0ZXJlZEl0ZW1zLCBpdGVtKSA9PiB7XHJcblx0XHRcdFx0Ly8gTWF0Y2ggdGhlIGl0ZW0gaXRzZWxmIGlmIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgY2hpbGRyZW5cclxuXHRcdFx0XHRpZiAoIWl0ZW0uaXRlbXM/Lmxlbmd0aCAmJiBtYXRjaGVzU2VhcmNoKGl0ZW0pKSB7XHJcblx0XHRcdFx0XHRmaWx0ZXJlZEl0ZW1zLnB1c2goaXRlbSk7XHJcblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBjaGlsZHJlbiwgZmlsdGVyIHRoZW0gYW5kIGFkZCB0aGUgcGFyZW50IGlmIGl0IGhhcyBhbnkgY2hpbGRyZW4gdGhhdCBtYXRjaFxyXG5cdFx0XHRcdH0gZWxzZSBpZiAoaXRlbS5pdGVtcz8ubGVuZ3RoICYmIChpdGVtLmRpc3BsYXkgPT09ICdoZWFkaW5nJyB8fCBpdGVtLmRpc3BsYXkgPT09ICdkaXZpZGVkLXNlY3Rpb24nKSkge1xyXG5cdFx0XHRcdFx0Y29uc3QgZmlsdGVyZWRDaGlsZEl0ZW1zID0gaXRlbS5pdGVtcy5maWx0ZXIobWF0Y2hlc1NlYXJjaCk7XHJcblx0XHRcdFx0XHRpZiAoZmlsdGVyZWRDaGlsZEl0ZW1zLmxlbmd0aCkge1xyXG5cdFx0XHRcdFx0XHQvLyBOZWVkIHRvIGNsb25lIHRoZSBwYXJlbnQgaXRlbSB3aXRoIHRoZSBmaWx0ZXJlZCBjaGlsZHJlbiBzbyB3ZSBkb24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsXHJcblx0XHRcdFx0XHRcdGZpbHRlcmVkSXRlbXMucHVzaCh7Li4uaXRlbSwgaXRlbXM6IGZpbHRlcmVkQ2hpbGRJdGVtc30pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4gZmlsdGVyZWRJdGVtcztcclxuXHRcdFx0fSwgPE1lbnVJdGVtW10+W10pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMub3B0aW9ucztcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBGaW5kIGEgZ2l2ZW4gaXRlbSdzIGluZGV4IGluIHRoZSBmaWx0ZXJlZCBpdGVtcyBhcnJheS5cclxuXHQgKlxyXG5cdCAqIFJldHVybnMgLTEgaWYgbm90IGZvdW5kXHJcblx0ICogQHBhcmFtIGl0ZW0gVGhlIG1hdGNoaW5nIGl0ZW0gdG8gZmluZCBpbiB0aGVcclxuXHQgKiBmaWx0ZXJkT3B0aW9ucyBhcnJheS4gV2lsbCB1c2UgdGhlIHNlbGVjdGVkSXRlbSBpZiBub3RoaW5nIGlzIHBhc3NlZC5cclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwcml2YXRlIGZpbmRTZWxlY3RlZEl0ZW1JbmRleChpdGVtPzogTWVudUl0ZW0pOiBudW1iZXIge1xyXG5cdFx0bGV0IGl0ZW1Ub0ZpbmQgPSBpdGVtID8gaXRlbSA6IHRoaXMuc2VsZWN0ZWRJdGVtO1xyXG5cclxuXHRcdGlmIChpdGVtVG9GaW5kKSB7XHJcblx0XHRcdHJldHVybiB0aGlzLnNlbGVjdGFibGVJdGVtcy5maW5kSW5kZXgoaXRlbSA9PiB7XHJcblx0XHRcdFx0aWYoaXRlbS5pZCAmJiAoPE1lbnVJdGVtPml0ZW1Ub0ZpbmQpLmlkKSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaXRlbS5sYWJlbCA9PT0gKDxNZW51SXRlbT5pdGVtVG9GaW5kKS5sYWJlbCAmJiBpdGVtLmlkID09PSAoPE1lbnVJdGVtPml0ZW1Ub0ZpbmQpLmlkXHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHJldHVybiBpdGVtLmxhYmVsID09PSAoPE1lbnVJdGVtPml0ZW1Ub0ZpbmQpLmxhYmVsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIC0xO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlYWN0IHRvIG91ciBmb3JtTW9kZWwgY2hhbmdpbmdcclxuXHQgKlxyXG5cdCAqIFRoZSBmb3JtTW9kZWwgcmVwcmVzZW50cyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIE1vZGVsSXRlbVxyXG5cdCAqIFdoZW4gY2hhbmdlZCwgc2V0IHRoZSB2YWx1ZSBvZiB0aGUgVGV4dGJveENvbXBvbmVudCBhbmRcclxuXHQgKiBmaW5kIGluZGV4IG9mIGl0ZW0gaW4gb3B0aW9ucyBsaXN0LlxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBmb3JtTW9kZWxDaGFuZ2VkKGRhdGE/OiBNZW51SXRlbSk6IHZvaWQge1xyXG5cdFx0dGhpcy5zeW5jaHJvbml6ZURpc2FibGVkQXR0cmlidXRlcygpO1xyXG5cclxuXHRcdGlmIChkYXRhKSB7XHJcblx0XHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZShkYXRhLnNlbGVjdGVkTGFiZWwgfHwgZGF0YS5sYWJlbCk7XHJcblxyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gdGhpcy5maW5kU2VsZWN0ZWRJdGVtSW5kZXgoZGF0YSk7XHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID49IDApIHtcclxuXHRcdFx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IHRoaXMuc2VsZWN0YWJsZUl0ZW1zW3RoaXMuc2VsZWN0ZWRJdGVtSW5kZXhdO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvL1RoZSBob3N0IHdpcGVkIG91dCB0aGUgZGF0YSBleHRlcm5hbGx5LCBjbGVhciB0aGUgdGV4dGJveCBhbmQgdGhlIHRyYWNraW5nIHN0YXRlXHJcblx0XHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5yZXNldCgpO1xyXG5cdFx0XHR0aGlzLmNsZWFyU2VsZWN0ZWRJdGVtKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2Nyb2xsIHRoZSBtZW51IGlmIHRoZSBjdXJyZW50IHNlbGVjdGVkSXRlbUluZGV4IGlzIG91dCBvZiB2aWV3XHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwcml2YXRlIHNjcm9sbE1lbnUoa25vd25JbmRleD86IG51bWJlcik6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBzZWxlY3RlZEl0ZW1JbmRleCBpbiBjYXNlIG91ciBvcHRpb25zIGNoYW5nZWRcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IGtub3duSW5kZXggPT09IHVuZGVmaW5lZCA/IHRoaXMuZmluZFNlbGVjdGVkSXRlbUluZGV4KCkgOiBrbm93bkluZGV4O1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPiAtMSAmJiB0aGlzLnNlbGVjdGVkSXRlbSkge1xyXG5cdFx0XHRcdC8vIFRoZSBtZW51IGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgaWRzIGZvciB0aGUgbWVudSBpdGVtcyBpZiB0aGV5IGRvbnQgaGF2ZSB0aGVtLFxyXG5cdFx0XHRcdC8vIHNvIHRoZXkgbmVlZCB0byBiZSBhY2NvdW50ZWQgZm9yIGhlcmUgc2luY2UgdGhlIGNvbWJvYm94IGRvZXNuJ3Qga25vdyBhYm91dCB0aG9zZSBpZHNcclxuXHRcdFx0XHRsZXQgaXRlbUlkID0gdGhpcy5zZWxlY3RlZEl0ZW0uaWQgPyB0aGlzLnNlbGVjdGVkSXRlbS5pZCA6IE1lbnVDb21wb25lbnQuZ2V0SW5kZXhlZEl0ZW1JZCh0aGlzLmZpbHRlcmVkT3B0aW9ucywgdGhpcy5zZWxlY3RlZEl0ZW0sIGAke3RoaXMuaWR9X21lbnVgKTtcclxuXHJcblx0XHRcdFx0Ly90cmlnZ2VyIHRoZSBzY3JvbGxpbmcgYWZ0ZXIgYSB0aWNrIHRvIGFsbG93IHRoZSBtZW51IHRvIGJlIHVwIHRvIGRhdGUgKGFuZCBwZW5kaW5nIG1hc2sgY2xlYXJlZCkgYmVmb3JlIG1lYXN1cmluZ1xyXG5cdFx0XHRcdHNldFRpbWVvdXQoKCk9PntcclxuXHRcdFx0XHRcdHRoaXMuc2Nyb2xsU2VydmljZS5zY3JvbGxJdGVtQ2VudGVyZWQoYCMke3RoaXMuaWR9X21lbnVfbGlzdGAsIGAjJHtpdGVtSWR9YCk7XHJcblx0XHRcdFx0fSwgMCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2VhcmNoL0ZpbHRlciBiYXNlZCBvbiB0ZXh0Ym94IGlucHV0XHJcblx0ICogTk9URTogc28gYXMgbm90IHRvIHJlY2VpdmUgYSBub3RpZmljYXRpb24gb24gZXZlcnkga2V5IGV2ZW50LCB3ZSBzdWdnZXN0IHlvdSBkZWJvdW5jZSB5b3VyXHJcblx0ICogc3Vic2NyaXB0aW9uXHJcblx0ICogQHNlZSB7QGxpbmsgaHR0cDovL3JlYWN0aXZleC5pby9yeGpzL2NsYXNzL2VzNi9PYnNlcnZhYmxlLmpzfk9ic2VydmFibGUuaHRtbCNpbnN0YW5jZS1tZXRob2QtZGVib3VuY2VUaW1lIHwgT2JzZXJ2YWJsZS5kZWJvdW5jZVRpbWV9XHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwcml2YXRlIHNlYXJjaEFuZEZpbHRlcihzZWFyY2hUZXh0Pzogc3RyaW5nKTogdm9pZCB7XHJcblxyXG5cdFx0Ly8gYWx3YXlzIGVtaXRcclxuXHRcdHRoaXMuc2VhcmNoLmVtaXQoc2VhcmNoVGV4dCk7XHJcblxyXG5cdFx0Ly8gZG8gaW50ZXJuYWwgZmlsdGVyaW5nIGlmIG5vIG9uZSdzIHN1YnNjcmliZWQgdG8gb3VyIHNlYXJjaCBlbWl0dGVyXHJcblx0XHRpZiAodGhpcy5zZWFyY2gub2JzZXJ2ZXJzLmxlbmd0aCA9PT0gMCAmJiBzZWFyY2hUZXh0ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0dGhpcy5yZXNldE9wdGlvbnModGhpcy5maWx0ZXJPcHRpb25zQXJyYXkoc2VhcmNoVGV4dCkpO1xyXG5cclxuXHRcdFx0aWYgKHRoaXMuYWRkTmV3U2VsZWN0ZWQgJiYgIXRoaXMuYWRkTmV3QnV0dG9uKSB7XHJcblx0XHRcdFx0dGhpcy5hZGROZXdTZWxlY3RlZCA9IGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHtAbGluayBmb3JtTW9kZWwgfSdzIHZhbGlkYXRpb24gZXJyb3JzIGVxdWFsIHRvIHRoZSBpbnRlcm5hbCB0ZXh0Ym94J3MuXHJcblx0ICpcclxuXHQgKiBXaGVuIHRoZSBpbnRlcm5hbCB0ZXh0Ym94IGlzIGludmFsaWQsIG5lZWQgdG8gc2V0IHRoaXMgY29udHJvbCdzXHJcblx0ICogZXJyb3JzIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIG91ciBvd24gbGFiZWwsIG5vdCBUZXh0Ym94Q29udHJvbCdzLlxyXG5cdCAqIFdlIHVzZSBvdXIgb3duIGxhYmVsIHNvIGxhYmVsIHRleHQgd2lsbCB3cmFwIGF0IHRoZSBlbmQgb2YgdGhlIGJ1dHRvbixcclxuXHQgKiBub3QgYXQgdGhlIGVuZCBvZiB0aGUgdGV4dGJveC5cclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2V0Rm9ybU1vZGVsVmFsaWRhdGlvbkVycm9ycyhkYXRhPzogYW55KTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy50ZXh0Ym94Rm9ybU1vZGVsLmludmFsaWQpIHtcclxuXHRcdFx0dGhpcy5mb3JtTW9kZWwuc2V0RXJyb3JzKHRoaXMudGV4dGJveEZvcm1Nb2RlbC5lcnJvcnMpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5mb3JtTW9kZWwuc2V0RXJyb3JzKG51bGwpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIHRoZSBmb3JtIG1vZGVsIHZhbHVlIHdpdGggdGhlIHNlbGVjdGVkIGl0ZW0gb3IgcmVzZXQgZm9ybSBtb2RlbCB2YWx1ZSBpZiBpdGVtIGlzIG51bGxcclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2V0Rm9ybU1vZGVsVmFsdWUoaXRlbTogTWVudUl0ZW0gfCBudWxsKTogdm9pZCB7XHJcblx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsdWUoaXRlbSA/IChpdGVtLnNlbGVjdGVkTGFiZWwgfHwgaXRlbS5sYWJlbCkgOiAnJyk7XHJcblx0XHR0aGlzLmZvcm1Nb2RlbC5zZXRWYWx1ZShpdGVtKTtcclxuXHRcdHRoaXMuZm9ybU1vZGVsLm1hcmtBc0RpcnR5KCk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2V0IHZhbGlkYXRvcnMgb24gdGhlIHtAc2VlIHRleHRib3hGb3JtTW9kZWwgfVxyXG5cdCAqXHJcblx0ICogVmFsaWRhdG9ycyBhcmUgY3VycmVudGx5IHNldCBiYXNlZCBvbiB0aGUge0BzZWUgbWF4bGVuZ3RoIH0sXHJcblx0ICoge0BzZWUgbWlubGVuZ3RoIH0sIGFuZCB7QHNlZSByZXF1aXJlZCB9IGlucHV0cy4gIFRoaXMgd29ya3Mgd2VsbFxyXG5cdCAqIHdpdGgge0BzZWUgVGV4dGJveENvbXBvbmVudCB9LCB3aGljaCBuZWVkcyB0aGVzZSBpbnB1dHMgdG8gYXBwbHlcclxuXHQgKiB0aGUgcHJvcGVyIGF0dHJpYnV0ZXMgdG8gaXRzIGlucHV0cy5cclxuXHQgKlxyXG5cdCAqIEEgZnV0dXJlIHJlbGVhc2Ugb2YgQW5ndWxhciB3aWxsIHN1cHBvc2VkbHkgYWRkIHRoZXNlIGF0dHJpYnV0ZXNcclxuXHQgKiBmb3IgeW91LCB3aGljaCB3aWxsIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3IgVGV4dGJveENvbXBvbmVudCB0byBoYXZlXHJcblx0ICogc3VjaCBpbnB1dHMuICBUaGlzIGNvbXBvbmVudCwgaG93ZXZlciwgd2lsbCBzdGlsbCBuZWVkIHRoZXNlIGlucHV0c1xyXG5cdCAqIGFzIHRoZXJlIGlzIG5vIGN1cnJlbnQgd2F5IHRvIGtub3cgd2hpY2ggdmFsaWRhdG9ycyBhcmUgYXBwbGllZCB0byBpdFxyXG5cdCAqIGZyb20gaXRzIHBhcmVudCBWaWV3IENvbXBvbmVudC5cclxuXHQgKlxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBzZXRUZXh0Ym94Rm9ybU1vZGVsVmFsaWRhdG9ycygpOiB2b2lkIHtcclxuXHRcdGxldCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbXTtcclxuXHJcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xyXG5cdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMubWlubGVuZ3RoKSB7XHJcblx0XHRcdHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1pbkxlbmd0aCh0aGlzLm1pbmxlbmd0aCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLm1heGxlbmd0aCkge1xyXG5cdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXhMZW5ndGgodGhpcy5tYXhsZW5ndGgpKTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuXHJcblx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEtlZXAgdGV4dGJveCdzIGRpc2FibGVkIHN0YXR1cyBpbi1zeW5jIHdpdGggY29tYm9ib3gnc1xyXG5cdCAqXHJcblx0ICoge0BsaW5rIFRleHRib3hDb21wb25lbnR9IGdldHMgaXRzIGRpc2FibGVkIHN0YXR1cyBmcm9tIGl0cyB7QGxpbmsgRm9ybUNvbnRyb2x9XHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwcml2YXRlIHN5bmNocm9uaXplRGlzYWJsZWRBdHRyaWJ1dGVzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuZm9ybU1vZGVsLmRpc2FibGVkICE9PSB0aGlzLnRleHRib3hGb3JtTW9kZWwuZGlzYWJsZWQpIHtcclxuXHRcdFx0aWYgKHRoaXMuZm9ybU1vZGVsLmRpc2FibGVkKSB7XHJcblx0XHRcdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLmRpc2FibGUoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuZW5hYmxlKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0aGUgZm9ybU1vZGVsIHZhbHVlIGFuZCB0ZXh0Ym94IHZhbHVlIGRvIG5vdCBtYXRjaCwgcmVzZXQgdGhlIHRleHRib3ggYW5kIHNlbGVjdGVkSXRlbSB0b1xyXG5cdCAqIHRoZSBmb3JtTW9kbGUgdmFsdWUuIElmIHRoZXJlIGlzIG5vIGZvcm1Nb2RlbCB2YWx1ZSwgbWFrZSBzdXJlIHdlIGNsZWFyIHRoZSB0ZXh0Ym94LiBSZXNldCB0aGVcclxuXHQgKiBmaWx0ZXJlZE9wdGlvbnMgdG8gdGhlIGZ1bGwgbGlzdCBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZEl0ZW1JbmRleFxyXG5cdCAqXHJcblx0ICovXHJcblx0cHJpdmF0ZSBzeW5jTW9kZWxWYWx1ZXMoKTogdm9pZCB7XHJcblx0XHQvLyBJZiB0aGVyZSBpcyBhIGZvcm1Nb2RlbCB2YWx1ZSwgcmVzZXQgdGhlIHNlbGVjdGVkIGl0ZW0uIElmIHRoZXJlIGlzbid0LCBtYWtlXHJcblx0XHQvLyBzdXJlIHdlIGNsZWFyIHRoZSB0ZXh0Ym94XHJcblx0XHRjb25zdCBuZXdMYWJlbCA9IHRoaXMuZm9ybU1vZGVsLnZhbHVlPy5zZWxlY3RlZExhYmVsIHx8IHRoaXMuZm9ybU1vZGVsLnZhbHVlPy5sYWJlbDtcclxuXHRcdGlmICh0aGlzLmZvcm1Nb2RlbC52YWx1ZSAmJiAobmV3TGFiZWwgIT09IHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSkpIHtcclxuXHRcdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbHVlKG5ld0xhYmVsKTtcclxuXHRcdH0gZWxzZSBpZiAoIXRoaXMuZm9ybU1vZGVsLnZhbHVlKSB7XHJcblx0XHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZSgnJyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2VhcmNoIGFuZCBmaWx0ZXIgdGhlIG9wdGlvbnMgbGlzdCB3aGVuIHRoZSB2YWx1ZSBvZiB0aGUgdGV4dGJveCBpbnB1dCBjaGFuZ2VzLiBJZiBhZGROZXcgaXNcclxuXHQgKiBzZXQgYWxzbyBjaGVjayBmb3IgbWF0Y2hlcyBpbiBvdXIgZmlsdGVyZWRPcHRpb25zIHRvIGNvbmRpdGlvbmFsbHkgc2hvdyBhbmQgaGlkZSB0aGUgYWRkIG5ld1xyXG5cdCAqIGJ1dHRvblxyXG5cdCAqXHJcblx0ICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMvaW5wdXRcclxuXHQgKi9cclxuXHRwdWJsaWMgdGV4dGJveFZhbHVlQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2VhcmNoQW5kRmlsdGVyKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSk7XHJcblxyXG5cdFx0aWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSA9PT0gJycpIHtcclxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkSXRlbSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmFkZE5ldykge1xyXG5cdFx0XHRsZXQgbWF0Y2ggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkgPT09IHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5mb3VuZE1hdGNoID0gbWF0Y2ggPyB0cnVlIDogZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVXBkYXRlIHRoZSBwb3B1cCBtZW51IHBvc2l0aW9uIHdoZW4gaW5wdXQgdmFsdWUgY2hhbmdlc1xyXG5cdFx0aWYgKHRoaXMucG9wdXApIHtcclxuXHRcdFx0dGhpcy5wb3B1cC51cGRhdGUoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY2xlYXJTZWxlY3RlZEl0ZW0oKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcblx0XHR0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID0gLTE7XHJcblx0fVxyXG5cclxuXHQvKipSZWNvbXB1dGUgd2hhdCB0aGUgcGxhY2Vob2xkZXIgc2hvdWxkIGJlIGJhc2VkIG9uIHdoZXRoZXIgdGhlIHVzZXIgcHJvdmlkZWQgb25lIGFuZCB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYWRkTmV3IGlucHV0ICovXHJcblx0cHJpdmF0ZSB1cGRhdGVQbGFjZWhvbGRlclRleHQoKXtcclxuXHRcdGlmICh0aGlzLnBsYWNlaG9sZGVyKSB7XHJcblx0XHRcdHRoaXMuZWZmZWN0aXZlUGxhY2Vob2xkZXIgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHRoaXMucGxhY2Vob2xkZXIpO1xyXG5cdFx0fSBlbHNlIGlmICh0aGlzLmFkZE5ldykge1xyXG5cdFx0XHR0aGlzLmVmZmVjdGl2ZVBsYWNlaG9sZGVyID0gdGhpcy5jaG9vc2VPckFkZFBsYWNlaG9sZGVyO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5lZmZlY3RpdmVQbGFjZWhvbGRlciA9IHRoaXMuY2hvb3NlUGxhY2Vob2xkZXI7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipGaW5kIHRoZSBvcHRpb24gd2Ugd2FudCB0byBiZSB0aGUgZGVmYXVsdCBzZWxlY3Rpb24uIElmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoLCB1c2UgdGhhdFxyXG5cdCAqIG90aGVyd2lzZSBpZiB0aGVyZSBhcmUgaXRlbXMsIHJldHVybiB6ZXJvIHRvIGluZGljYXRlIHRoZSBmaXJzdCBpdGVtLiBPdGhlcndpc2UgcmV0dXJuIC0xXHJcblx0ICogdG8gaW5kaWNhdGUgbm8gc2VsZWN0aW9uXHJcblx0ICovXHJcblx0cHJpdmF0ZSBmaW5kRGVmYXVsdFNlbGVjdGlvbkluZGV4KG9wdGlvbnM6IE1lbnVJdGVtW10sIHNlYXJjaFRleHQ6IHN0cmluZyk6IG51bWJlciB7XHJcblx0XHRsZXQgaW5kZXggPSAtMTtcclxuXHJcblx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoKXtcclxuXHRcdFx0aW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHRpb249Pm9wdGlvbiAhPSBudWxsKTtcclxuXHJcblx0XHRcdGlmKHNlYXJjaFRleHQpe1xyXG5cdFx0XHRcdHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xyXG5cdFx0XHRcdGxldCBleGFjdE1hdGNoSW5kZXggPSBvcHRpb25zLmZpbmRJbmRleChvcHRpb249Pm9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpID09IHNlYXJjaFRleHQpO1xyXG5cdFx0XHRcdGlmKGV4YWN0TWF0Y2hJbmRleCA+PTApe1xyXG5cdFx0XHRcdFx0aW5kZXggPSBleGFjdE1hdGNoSW5kZXg7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gaW5kZXg7XHJcblx0fVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY29udHJvbCBjb250cm9sLWxhYmVsLXt7bGFiZWxQb3NpdGlvbn19XCJcclxuICAgICBbbmdDbGFzc109XCJ7J29wZW4nOiBtZW51U3RhdHVzID09PSAndmlzaWJsZScsXHJcbiAgICAgICAgICAgICAgICAgJ2ludmFsaWQnOiBmb3JtTW9kZWwudG91Y2hlZCAmJiBmb3JtTW9kZWwuaW52YWxpZCxcclxuICAgICAgICAgICAgICAgICAnaGFzLWljb24nOiAoKHRlbXBsYXRlVHlwZSA9PT0gJ2ljb25BbmRMYWJlbCcgfHwgdGVtcGxhdGVUeXBlID09PSAnaWNvbkxhYmVsQ2FwdGlvbicpICYmIGZvcm1Nb2RlbC52YWx1ZSAmJiBmb3JtTW9kZWwudmFsdWUuaWNvbiAmJiBmb3JtTW9kZWwudmFsdWUubGFiZWwgPT09IHRleHRib3hGb3JtTW9kZWwudmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICdpcy1yZWFkb25seSc6IHJlYWRvbmx5LFxyXG4gICAgICAgICAgICAgICAgICdpcy1kaXNhYmxlZCc6IGZvcm1Nb2RlbC5kaXNhYmxlZCxcclxuICAgICAgICAgICAgICAgICAnaXMtYWx3YXlzLW9wZW4nOiBhbHdheXNPcGVufVwiPlxyXG5cclxuICA8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPlxyXG4gICAgPHNwYW4+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJ2YWxpZGF0aW9uRXJyb3JzLmxlbmd0aCA+IDAgJiYgZm9ybU1vZGVsLnRvdWNoZWQgJiYgZm9ybU1vZGVsLmludmFsaWRcIj4mbmJzcDt7e3ZhbGlkYXRpb25FcnJvcnN9fTwvc3Bhbj5cclxuICAgIDxlYy1oZWxwLXBvcG92ZXIgaWQ9XCJ7e2lkfX1faGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkLWlubGluZS1ibG9jayBteS1uMyBteC1uMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICBjb250ZW50UG9zaXRpb249XCJ7e2hlbHBQb3BvdmVyUG9zaXRpb259fVwiPlxyXG4gICAgPC9lYy1oZWxwLXBvcG92ZXI+XHJcbiAgPC9sYWJlbD5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsd2F5c09wZW47IGVsc2UgcG9wdXBUYXJnZXRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0Ym94LWdyb3VwIGNvbnRyb2wtaW5wdXRcIlxyXG4gICAgICAgICBbbmdDbGFzc109XCJ0ZXh0Ym94RWxlbWVudENsYXNzZXNcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRleHRib3hcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCB8fCB0ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bm1lbnVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcG9wdXBUYXJnZXQ+XHJcbiAgPGRpdiBjbGFzcz1cInRleHRib3gtZ3JvdXAgY29udHJvbC1pbnB1dFwiXHJcbiAgICAgICBbbmdDbGFzc109XCJ0ZXh0Ym94RWxlbWVudENsYXNzZXNcIlxyXG4gICAgICAgKmVjUG9wdXA9XCJkcm9wZG93bm1lbnVcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZXh0Ym94XCI+PC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3RleHRib3g+XHJcbiAgPGkgY2xhc3M9XCJlYy1pY29uIHt7Zm9ybU1vZGVsLnZhbHVlPy5pY29ufX1cIj48L2k+XHJcblxyXG4gIDxlYy10ZXh0Ym94IGNsYXNzPVwidGV4dGJveC1ncm91cC1pbnB1dCBtYi0wXCJcclxuICAgICAgICAgICAgICAjdGV4dGJveFxyXG4gICAgICAgICAgICAgIFtpZF09XCJpZFwiXHJcbiAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxyXG4gICAgICAgICAgICAgIFtmb3JtTW9kZWxdPVwidGV4dGJveEZvcm1Nb2RlbFwiXHJcbiAgICAgICAgICAgICAgW21heGxlbmd0aF09XCJtYXhsZW5ndGhcIlxyXG4gICAgICAgICAgICAgIFttaW5sZW5ndGhdPVwibWlubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZWZmZWN0aXZlUGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4XCJcclxuICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJ0ZXh0Ym94VmFsdWVDaGFuZ2VkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChrZXlkb3duKT1cImtleU5hdmlnYXRlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgIChmb2N1c291dCk9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgW3VwcGVyQ2FzZV09XCJ1cHBlckNhc2VcIlxyXG4gICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmcgJiYgYWx3YXlzT3BlblwiXHJcbiAgICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCInb2ZmJ1wiPjwvZWMtdGV4dGJveD5cclxuXHJcbiAgPGVjLWJ1dHRvbiBjbGFzcz1cInRleHRib3gtZ3JvdXAtYnRuLXJpZ2h0XCJcclxuICAgICAgICAgICAgICpuZ0lmPVwiIWhpZGVUb2dnbGVCdXR0b25cIlxyXG4gICAgICAgICAgICAgW2lkXT1cImlkICsgJ19idXR0b24nXCJcclxuICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJmb3JtTW9kZWwuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgaWNvbj1cImljb24tY2FyZXQtZG93blwiXHJcbiAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIlxyXG4gICAgICAgICAgICAgdHlwZT1cInNlY29uZGFyeVwiXHJcbiAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIChrZXlkb3duKT1cImtleU5hdmlnYXRlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJtZW51U3RhdHVzID09PSAndmlzaWJsZSdcIj48L2VjLWJ1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd25tZW51PlxyXG4gIDxkaXYgY2xhc3M9XCJwb3B1cFwiXHJcbiAgICAgICBlY092ZXJsYXlcclxuICAgICAgIFtzdGF0dXNdPVwicGVuZGluZyAmJiAhYWx3YXlzT3BlbiA/ICdwZW5kaW5nJyA6ICdoYXNEYXRhJ1wiPlxyXG5cclxuICAgIDxidXR0b24gY2xhc3M9XCJhZGQtbmV3IHt7YWRkTmV3T3B0aW9ucz8uY2xhc3NMaXN0fX1cIlxyXG4gICAgICAgICAgICBpZD1cInt7aWR9fV9hZGROZXdcIlxyXG4gICAgICAgICAgICAjYWRkTmV3QnV0dG9uXHJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJhZGROZXdTZWxlY3RlZFwiXHJcbiAgICAgICAgICAgICpuZ0lmPVwiYWRkTmV3XCJcclxuICAgICAgICAgICAgW2hpZGRlbl09XCJmb3VuZE1hdGNoIHx8IChhZGROZXcgPT09ICdkeW5hbWljJyAmJiAoIXRleHRib3hGb3JtTW9kZWwudmFsdWUgfHwgKGZvcm1Nb2RlbC52YWx1ZSAmJiB0ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlID09PSBmb3JtTW9kZWwudmFsdWUubGFiZWwpKSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwib25BZGROZXcoJGV2ZW50KVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImFkZC1uZXctbGFiZWwgZWMtdXRpbC10cnVuY2F0ZVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWRkTmV3ID09PSAnc3RhdGljJyB8fCBhZGROZXcgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT57e2FkZE5ld09wdGlvbnM/LmxhYmVsfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPHNwYW4gKm5nSWY9XCJhZGROZXcgPT09ICdkeW5hbWljJ1wiPnt7J0FkZCcgfCB0cmFuc2xhdGV9fSA8c3Ryb25nIGNsYXNzPVwiZWMtdXRpbC10cnVuY2F0ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsndGV4dC11cHBlcmNhc2UnOiB1cHBlckNhc2V9XCI+e3t0ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlfX08L3N0cm9uZz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGkgY2xhc3M9XCJlYy1pY29uIHt7YWRkTmV3T3B0aW9ucz8uaWNvbn19XCI+PC9pPlxyXG4gICAgPC9idXR0b24+XHJcblxyXG4gICAgPGVjLW1lbnUgaWQ9XCJ7e2lkfX1fbWVudVwiXHJcbiAgICAgICAgICAgICBbY2xhc3MuYm9yZGVyLXRvcC0wXT1cIiFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIGhpZGVOb01hdGNoZXNcIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwibWVudUVsZW1lbnRDbGFzc2VzXCJcclxuICAgICAgICAgICAgIFt0ZW1wbGF0ZVR5cGVdPVwidGVtcGxhdGVUeXBlXCJcclxuICAgICAgICAgICAgIFtjdXN0b21NZW51VGVtcGxhdGVdPVwiY3VzdG9tTWVudVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgIFtzaG93Tm9JdGVtc109XCIhaGlkZU5vTWF0Y2hlc1wiXHJcbiAgICAgICAgICAgICBbbm9EYXRhVGV4dF09XCJub01hdGNoZXNUZXh0XCJcclxuICAgICAgICAgICAgIFtpdGVtc109XCJmaWx0ZXJlZE9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkSXRlbVwiXHJcbiAgICAgICAgICAgICAoc2VsZWN0ZWRDaGFuZ2VkKT1cInNlbGVjdGVkQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIFtwcmVzZXJ2ZUljb25TcGFjZV09XCJwcmVzZXJ2ZUljb25TcGFjZVwiXHJcbiAgICAgICAgICAgICBbdHJ1bmNhdGVJdGVtc109XCJ0cnVuY2F0ZUl0ZW1zXCI+PC9lYy1tZW51PlxyXG5cclxuICAgIDxmb290ZXIgKm5nSWY9XCJ0b3RhbFJlY29yZHMgJiYgdG90YWxSZWNvcmRzID4gZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMFwiPlxyXG4gICAgICA8c3Bhbj57e2ZpbHRlcmVkT3B0aW9uQ291bnR9fSB7eydvZicgfCB0cmFuc2xhdGV9fSB7e3RvdGFsUmVjb3Jkc319PC9zcGFuPlxyXG4gICAgPC9mb290ZXI+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
879
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tYm9ib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2NvbWJvYm94L2NvbWJvYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9jb21ib2JveC9jb21ib2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFtRCxTQUFTLEVBQWMsWUFBWSxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzFLLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQWUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRCxPQUFPLEVBQXNELGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNHLE9BQU8sRUFBRSx1QkFBdUIsRUFBZSxNQUFNLHlEQUF5RCxDQUFDOzs7Ozs7Ozs7Ozs7O0FBeUIvRzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQU1ILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxlQUFlO0lBRXJEOzs7OztPQUtHO0lBQzRCLFFBQVE7UUFDdEMsSUFBSSxJQUFJLENBQUMsS0FBSztZQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQXdPRCxZQUNXLHdCQUFrRCxFQUNsRCxlQUFnQyxFQUNoQyxTQUEyQixFQUMzQixhQUE0QjtRQUV0QyxLQUFLLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFMdkMsNkJBQXdCLEdBQXhCLHdCQUF3QixD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YUFBYTtzQkFBNUIsS0FBSztnQkFLVyxhQUFhO3NCQUE1QixLQUFLO2dCQUtTLGFBQWE7c0JBQTVCLEtBQUs7Z0JBU1csV0FBVztzQkFBM0IsTUFBTTtnQkFNVSxNQUFNO3NCQUF0QixNQUFNO2dCQUdzQixPQUFPO3NCQUFuQyxTQUFTO3VCQUFDLFNBQVM7Z0JBS3dCLEtBQUs7c0JBQWhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQU1DLFlBQVk7c0JBQTlDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4gfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sQmFzZSB9IGZyb20gJy4uL2Zvcm0tY29udHJvbC1iYXNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IFRleHRib3hDb21wb25lbnQgfSBmcm9tICcuLi90ZXh0Ym94L3RleHRib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cEhlbHBlciB9IGZyb20gJy4uLy4uL3NoYXJlZC9mb3JtLWdyb3VwLmhlbHBlcic7XHJcbmltcG9ydCB7IE1lbnVJdGVtLCBNZW51VGVtcGxhdGVUeXBlLCBNZW51SG9zdEVsZW1lbnRDbGFzc2VzLCBNZW51Q29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS9tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlLCBQb3B1cFN0YXR1cyB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXJlY3RpdmVzL3BvcHVwL3BvcHVwLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBTY3JvbGxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zY3JvbGwuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogUG9zaXRpb24gb2YgdGhlIG1lbnUgcmVsYXRpdmUgdG8gdGhlIGlucHV0XHJcbiAqL1xyXG5leHBvcnQgdHlwZSBDb21ib2JveE1lbnVQb3NpdGlvbiA9IFwidG9wX3JpZ2h0XCIgfCBcInRvcF9sZWZ0XCIgfCBcImJvdHRvbV9sZWZ0XCIgfCBcImJvdHRvbV9yaWdodFwiO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBUaGUgdHlwZSBvZiBhZGQgbmV3IGltcGxlbWVudGF0aW9uLiBTdGF0aWMgZGlzcGxheXMgYSBzaW1wbGUgc3RhdGljIGJ1dHRvbiB3aGlsZSBkeW5hbWljIHVwZGF0ZXNcclxuICogdGhlIGxhYmVsIG9mIHRoZSBidXR0b24gd2l0aCB2YWx1ZSBvZiB0aGUgdGV4dGJveFxyXG4gKi9cclxudHlwZSBBZGROZXdUeXBlID0gXCJkeW5hbWljXCIgfCBcInN0YXRpY1wiIHwgYm9vbGVhbjtcclxuXHJcbi8qKlxyXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyB0aGUgXCJBZGQgbmV3XCIgYnV0dG9uIHdoZW4gaW4gc3RhdGljIG1vZGVcclxuICovXHJcbnR5cGUgQWRkTmV3T3B0aW9ucyA9IHtcclxuXHRsYWJlbD86IHN0cmluZzsgXHQvKiogQSBjdXN0b20gbGFiZWwgdG8gZGlzcGxheSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdCBcIkFkZCBuZXcuLi5cIiAqL1xyXG5cdGNsYXNzTGlzdD86IHN0cmluZzsgXHQvKiogQSBzdHJpbmcgb2Ygc3BhY2Utc2VwYXJhdGVkIHV0aWxpdHkgY2xhc3NlcyB3ZSdsbCBhcHBseSB0byB0aGUgbGFiZWwgKi9cclxuXHRpY29uPzogc3RyaW5nOyBcdC8qKiBBIGN1c3RvbSBpY29uIHRvIGRpc3BsYXkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQgJ2ljb24tYWRkJyAqL1xyXG59O1xyXG5cclxuXHJcbi8qKlxyXG4gKiBTZWxlY3QgYm94IChzZWxlY3QsIGF1dG9jb21wbGV0ZSwgY29tYm9ib3gpXHJcbiAqXHJcbiAqIE5PVEU6IE1pbi9tYXggbGVuZ3RoIHZhbGlkYXRpb24gaXMgaW1wbGVtZW50ZWQgb24gdGhlIGludGVybmFsIGVjLXRleHRib3guXHJcbiAqIFZhbHVlcyBwYXNzZWQgaW4gdmlhIGlucHV0IHByb3BlcnRpZXMgKEBzZWUgbWF4bGVuZ3RoICwgQHNlZSBtaW5sZW5ndGggKVxyXG4gKiBhcmUgdXNlZCB0byBjcmVhdGUgdmFsaWRhdG9ycyBvbiB0aGUgdGV4dGJveC4gIFdoZW4gdGhlIHZhbGlkYXRpb24gb24gdGhlXHJcbiAqIHRleHRib3ggZmFpbHMsIHRoZSB2YWxpZGF0aW9uIGVycm9yKHMpIGdldCBwYXNzZWQgdXAgdG8gdGhlIHtAc2VlIGZvcm1Nb2RlbCB9LlxyXG4gKiBXaGVuIHNldHRpbmcgdXAgdGhpcyBjb21wb25lbnQncyB7QHNlZSBGb3JtQ29udHJvbCB9LCB5b3UgZG8gTk9UIG5lZWQgdG8gc2V0IHRoZVxyXG4gKiBWYWxpZGF0b3JzLm1pbkxlbmd0aCBvciBWYWxpZGF0b3JzLm1heExlbmd0aCB2YWxpZGF0b3JzLlxyXG4gKlxyXG4gKiBSZXF1aXJlZCBpcyBhbHNvIHBhc3NlZCB2aWEgaW5wdXQgcHJvcGVydHksIGJ1dCB5b3UgU0hPVUxEIGFsc28gc2V0IHVwIHRoZVxyXG4gKiBWYWxpZGF0b3JzLnJlcXVpcmVkIHZhbGlkYXRvciBvbiB0aGlzIGNvbXBvbmVudCdzIEZvcm1Db250cm9sLlxyXG4gKlxyXG4gKiBAZXhwb3J0XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuXHRzZWxlY3RvcjogJ2VjLWNvbWJvYm94JyxcclxuXHR0ZW1wbGF0ZVVybDogJ2NvbWJvYm94LmNvbXBvbmVudC5odG1sJyxcclxuXHRzdHlsZVVybHM6IFsnLi9jb21ib2JveC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21ib2JveENvbXBvbmVudCBleHRlbmRzIEZvcm1Db250cm9sQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuXHJcblx0LyoqXHJcblx0ICogQ2xvc2UgdGhlIHBvcHVwIG1lbnUgb24gcmVzaXplIHNvIHRoZSB3aWR0aCBhbmQgcG9zaXRpb25pbmcgY2FuIGJlIHJlY2FsY3VsYXRlZFxyXG5cdCAqIGNvcnJlY3RseS4gQ2Fubm90IGJlIHBsYWNlZCBvbiB0aGUgcG9wdXBEaXJlY3RpdmUgYmVjYXVzZSBvZiBhIGJ1ZyB3aGVyZVxyXG5cdCAqIEhvc3RMaXN0ZW5lcnMgZm9yIGdsb2JhbCBldmVudHMgZG9uJ3QgZmlyZVxyXG5cdCAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMTQxOTFcclxuXHQgKi9cclxuXHRASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJykgb25SZXNpemUoKSB7XHJcblx0XHRpZiAodGhpcy5wb3B1cCkgdGhpcy5wb3B1cC5oaWRlKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93IHRoZSBhZGQgbmV3IGJ1dHRvbiBpbiB0aGUgcG9wdXBcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgYWRkTmV3PzogQWRkTmV3VHlwZTtcclxuXHJcblx0LyoqIENvbmZpZ3VyZSB0aGUgYWRkTmV3IGJ1dHRvbiBsYWJlbCAmIGljb24gd2hlbiBhZGROZXcgaXMgdHJ1ZSBhbmQgc2V0IHRvIHN0YXRpY1xyXG5cdCAqIERlZmF1bHQgaXMgc2V0IHRvOiB7IGxhYmVsOiAnQWxsIG5ldy4uLicsIGljb246ICdpY29uLWFkZCd9XHJcblx0ICogQHNlZSBBZGROZXdPcHRpb25zXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiA8ZWMtY29tYm9ib3ggW2FkZE5ld109XCJ0cnVlXCIgXHJcblx0ICogXHQgICAgICAgICBbYWRkTmV3T3B0aW9uc109XCJ7IFxyXG4qIFx0XHRcdFx0XHRcdGxhYmVsOiAnSGVscCBtZSBjaG9vc2UuLi4nLFxyXG4qIFx0XHRcdFx0XHRcdGljb246ICdpY29uLXNlYXJjaCcsXHJcbiogXHRcdFx0XHRcdFx0Y2xhc3NMaXN0OiAndGV4dC1ib2R5LTIgdGV4dC1saW5rJyB9XCI+XHJcblx0ICogPC9lYy1jb21ib2JveD5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgYWRkTmV3T3B0aW9ucz86IEFkZE5ld09wdGlvbnMgPSB7IFxyXG5cdFx0bGFiZWw6ICdBZGQgbmV3Li4uJyxcclxuXHRcdGljb246ICdpY29uLWFkZCcsXHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgaW5wdXQuXHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgVGV4dGJveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBtYXhsZW5ndGg/OiBudW1iZXI7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBQb3NpdGlvbiBvZiB0aGUgbWVudSByZWxhdGl2ZSB0byB0aGUgdGV4dCBib3hcclxuXHQgKiBAZGVmYXVsdCAnYm90dG9tX3JpZ2h0J1xyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBtZW51UG9zaXRpb24/OiBDb21ib2JveE1lbnVQb3NpdGlvbiA9ICdib3R0b21fcmlnaHQnO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgYWxsb3dlZCBpbiB0aGUgaW5wdXRcclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBUZXh0Ym94Q29tcG9uZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIG1pbmxlbmd0aD86IG51bWJlcjtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEl0ZW1zIHRvIHNob3cgaW4gY29tYm9ib3ggbWVudVxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIG9wdGlvbnM6IEFycmF5PE1lbnVJdGVtPiA9IFtdO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRGlzcGxheSB0ZW1wbGF0ZSBmb3IgbWVudSBpdGVtc1xyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIHRlbXBsYXRlVHlwZTogTWVudVRlbXBsYXRlVHlwZSA9ICdsYWJlbCc7XHJcblxyXG5cdC8qKlxyXG4gICAgICogT3B0aW9uYWwgY3VzdG9tIHRlbXBsYXRlIGZvciB0aGUgbWVudSBpdGVtcy4gTXVzdCBkZWNsYXJlIGEgdGVtcGxhdGVcclxuXHQgKiBpbnB1dCB2YXJpYWJsZSBjYWxsZWQgXCJpdGVtXCIgbGlrZSBzbzogPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZU5hbWUgbGV0LWl0ZW0+LFxyXG5cdCAqIHdoZXJlIGl0ZW0gcmVwcmVzZW50cyB0aGUgbWVudUl0ZW0uXHJcbiAgICAgKiBXaWxsIG92ZXJyaWRlIHRoZSBjaG9pY2UgZm9yIHRlbXBsYXRlVHlwZSBpZiBwcm92aWRlZC5cclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgY3VzdG9tTWVudVRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcblx0LyoqXHJcblx0ICogV2hlbiB0cnVlLCB0aGUgbWVudSBpdGVtcyB3aWxsIHByZXNlcnZlIHRoZSBpY29uIHNwYWNlIHdoZW4gdGhlcmUgaXMgbm8gaWNvblxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBwcmVzZXJ2ZUljb25TcGFjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBQb3NpdGlvbiB0aGUgbWVudSBhcyBmaXhlZCwgaWRlYWwgd2hlbiBjb21ib2JveGVzIGFyZSBpbnNpZGUgZGlhbG9nc1xyXG5cdCAqIERlZmF1bHRpbmcgdG8gdHJ1ZSBzbyBhbGwgbWVudXMgd2lsbCBiZSBhdCBsZWFzdCB0aGUgd2lkdGggb2YgdGhlXHJcblx0ICogdGV4dGJveCArIGJ1dHRvbiwgYnV0IGNhbiBncm93IHdpZGVyIGlmIHRoZSBpbm5lciBlbGVtZW50cyBuZWVkIGl0XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIHBvcHVwRml4ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGZyb20gdGhlIGRhdGFzb3VyY2VcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgdG90YWxSZWNvcmRzPzogbnVtYmVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCB1cHBlckNhc2UgdGhlIHRleHQgYm94IGFuZCBhcHBseSB0aGUgY2xhc3Mgb24gdGhlIGFkZCBib3hcclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgdXBwZXJDYXNlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuXHQvKipUaGUgcGxhY2Vob2xkZXIgdG8gc2hvdyBpbiB0aGUgY29tYm9ib3guIExlYXZlIGVtcHR5IHRvIHVzZSBkZWZhdWx0IGJlaGF2aW9yIGRldGVybWluZWRcclxuXHQgKiBieSB3aGV0aGVyIEFkZCBOZXcgaXMgZW5hYmxlZFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcblxyXG5cdC8qKiBPYnNlcnZhYmxlIHRvIHN1YnNjcmliZSB0byB3aGVuIHRoZSBjb21ib2JveCBtZW51IGlzIG9wZW5lZCBmb3IgdGhlIGZpcnN0IHRpbWUgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgbG9hZE9uT3Blbk9ic2VydmFibGU/OiBPYnNlcnZhYmxlPE1lbnVJdGVtW10+IHwgdW5kZWZpbmVkO1xyXG5cclxuXHQvKiogRG8gbm90IGRpc3BsYXkgdGhlIHRvZ2dsZSBidXR0b24gd2hlbiB0cnVlICovXHJcblx0QElucHV0KCkgcHVibGljIGhpZGVUb2dnbGVCdXR0b24gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogQWx3YXlzIHNob3cgdGhlIG1lbnUgd2hlbiB0aGUgZm9ybU1vZGVsIGhhcyBhIHZhbHVlLiBTZXRzXHJcblx0ICogaGlkZVRvZ2dsZUJ1dHRvbiB0byB0cnVlIGFuZCBtZW51U3RhdHVzIHRvIHZpc2libGUgYXMgd2VsbC5cclxuXHQgKi9cclxuXHRASW5wdXQoKSBwdWJsaWMgYWx3YXlzT3BlbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBBZGRpdG9uYWwgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgZWMtbWVudSBlbGVtZW50XHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIG1lbnVFbGVtZW50Q2xhc3NlczogTWVudUhvc3RFbGVtZW50Q2xhc3NlcyB8IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZGl0aW9uYWwgY2xhc3NlcyB0byBhcHBseSB0byB0aGUgLnRleHRib3gtZ3JvdXAgZWxlbWVudFxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyB0ZXh0Ym94RWxlbWVudENsYXNzZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKiBIaWRlICdObyBtYXRjaGVzJyBtZXNzYWdlIHdoZW4gdHJ1ZSAqL1xyXG5cdEBJbnB1dCgpIHB1YmxpYyBoaWRlTm9NYXRjaGVzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG4gICAqIFRleHQgdG8gc2hvdyB3aGVuIHRoZSBtZW51IGlzIGVtcHR5LiBcIk5vIG1hdGNoZXNcIiBpcyB0aGUgZGVmYXVsdC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgbm9NYXRjaGVzVGV4dDogc3RyaW5nID0gJ05vTWF0Y2hlc19TQyc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRydW5jYXRlIG1lbnUgaXRlbXMgd2hlbiB0cnVlXHJcblx0ICovXHJcblx0QElucHV0KCkgcHVibGljIHRydW5jYXRlSXRlbXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogTm90aWZ5IHRoZSBwYXJlbnQgdGhhdCB0aGUgYWRkIG5ldyBidXR0b24gd2FzIGNsaWNrZWRcclxuXHQgKiBAdG9kbyBkaXNjdXNzIGlmIHdlIG5lZWQgdG8gc2VuZCBhbG9uZyB0aGUgdmFsdWUgb3Igc2hvdWxkXHJcblx0ICogdGhlIHBhcmVudCBnZXQgaXQgZnJvbSB0aGUgZm9ybU1vZGVsXHJcblx0ICogKGx3ZiAyMDE3LjA3LjEzKTogSSB0aGluayB3ZSBtaWdodCBhcyB3ZWxsIHNlbmQgdGhlIHZhbHVlIGFsb25nIGFuZFxyXG5cdCAqIGxlYXZlIGl0IHVwIHRvIHRoZSBwYXJlbnQgdG8gZGVjaWRlIGhvdyB0byBoYW5kbGUgaXQuXHJcblx0ICovXHJcblx0QE91dHB1dCgpIHB1YmxpYyBhZGROZXdDbGljazogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIE5vdGlmeSBwYXJlbnQgd2hlbiB0ZXh0IHR5cGVkIGludG8gdGV4dGJveFxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoKSBwdWJsaWMgc2VhcmNoOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuXHJcblx0QFZpZXdDaGlsZCgndGV4dGJveCcpIHB1YmxpYyB0ZXh0Ym94ITogVGV4dGJveENvbXBvbmVudDtcclxuXHJcblx0LyoqXHJcblx0ICogQWNjZXNzIHRvIHRoZSBtZW51J3MgY29tcG9uZW50IHZpYSB0aGUgIHtAbGluayBQb3B1cENvbnRhaW5lckRpcmVjdGl2ZX1cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKFBvcHVwQ29udGFpbmVyRGlyZWN0aXZlKSBwcml2YXRlIHBvcHVwPzogUG9wdXBDb250YWluZXJEaXJlY3RpdmU7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBSZWZlcmVuY2UgdGhlIGFkZC1uZXcgYnV0dG9uIGVsZW1lbnRcclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKCdhZGROZXdCdXR0b24nKSBwcml2YXRlIGFkZE5ld0J1dHRvbiE6IEVsZW1lbnRSZWY7XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBGaWx0ZXJlZCBJdGVtcyB0byBzaG93IGluIGNvbWJvYm94IG1lbnVcclxuXHQgKi9cclxuXHRwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBBcnJheTxNZW51SXRlbT4gPSBbXTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyYWNrcyBpZiB0aGUgbWVudSBpcyBvcGVuIG9yIGhpZGRlblxyXG5cdCAqL1xyXG5cdHB1YmxpYyBtZW51U3RhdHVzOiBQb3B1cFN0YXR1cyA9ICdoaWRkZW4nO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogUGxhY2Vob2xkZXIgdG8gYXNzaWduIHRvIHRleHRib3hcclxuXHQgKi9cclxuXHRwdWJsaWMgZWZmZWN0aXZlUGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgbWVudSBpdGVtXHJcblx0ICovXHJcblx0cHVibGljIHNlbGVjdGVkSXRlbTogTWVudUl0ZW0gfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEZvcm1Db250cm9sIGZvciB0aGUgdGV4dGJveFxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0ZXh0Ym94Rm9ybU1vZGVsOiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnKTtcclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyYWNrcyB3aGV0aGVyIHRoZSBhZGQgbmV3IGJ1dHRvbiBpcyBzZWxlY3RlZFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhZGROZXdTZWxlY3RlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVHJhY2tzIHdoZXRoZXIgdGhlIHRleHRib3hGb3JtTW9kZWwgdmFsdWUgbWF0Y2hlcyBhbiBpdGVtIGluIHRoZSBmaWx0ZXJlZE9wdGlvbnNcclxuXHQgKi9cclxuXHRwdWJsaWMgZm91bmRNYXRjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBOdW1iZXIgb2YgZmlsdGVyZWQgb3B0aW9ucyB0byBkaXNwbGF5IGluIHRoZSBmb290ZXIuICBFeGNsdWRlcyBoZWFkaW5ncy5cclxuXHQgKi9cclxuXHRwdWJsaWMgZmlsdGVyZWRPcHRpb25Db3VudDogbnVtYmVyID0gMDtcclxuXHJcblx0LyoqXHJcblx0ICogRmxhdCBsaXN0IG9mIHNlbGVjdGFibGUgaXRlbXMgaW4gdGhlIGNvbWJvYm94LlxyXG5cdCAqIERvZXMgbm90IGluY2x1ZGUgaGVhZGluZ3Mgb3IgZGl2aWRlci1zZWN0aW9uIGl0ZW1zLlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2VsZWN0YWJsZUl0ZW1zOiBNZW51SXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGV4IG9mIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgb3B0aW9uc1xyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2VsZWN0ZWRJdGVtSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuXHQvKiogUGxhY2Vob2xkZXIgdGV4dCBmb3IgJ0Nob29zZSBvciBBZGQuLi4nICovXHJcblx0cHJpdmF0ZSBjaG9vc2VPckFkZFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcclxuXHJcblx0LyoqIFBsYWNlaG9sZGVyIHRleHQgZm9yICdDaG9vc2UnICovXHJcblx0cHJpdmF0ZSBjaG9vc2VQbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XHJcblxyXG5cdHByaXZhdGUgaGFzRGF0YUJlZW5Mb2FkZWRPbk9wZW46IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXHJcblx0XHRwcm90ZWN0ZWQgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG5cdFx0cHJvdGVjdGVkIHNjcm9sbFNlcnZpY2U6IFNjcm9sbFNlcnZpY2VcclxuXHQpIHtcclxuXHRcdHN1cGVyKHZhbGlkYXRpb25NZXNzYWdlU2VydmljZSwgZm9ybUdyb3VwSGVscGVyKTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgYW5ndWxhciBvbkNoYW5nZXMgbGlmZWN5Y2xlIGV2ZW50XHJcblx0ICogQHNlZSBodHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvbGlmZWN5Y2xlLWhvb2tzXHJcblx0ICovXHJcblx0cHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25DaGFuZ2VzKGNoYW5nZXMpO1xyXG5cclxuXHRcdC8vIHdoZW4gb3B0aW9ucyBjaGFuZ2VzXHJcblx0XHRpZiAoY2hhbmdlcy5vcHRpb25zKSB7XHJcblx0XHRcdHRoaXMucmVzZXRPcHRpb25zKCk7XHJcblxyXG5cdFx0XHQvLyBVcGRhdGUgdGhlIHBvcHVwIHBvc2l0aW9uXHJcblx0XHRcdGlmICh0aGlzLnBvcHVwKSB7XHJcblx0XHRcdFx0dGhpcy5wb3B1cC51cGRhdGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHVwZGF0ZSB2YWxpZGF0b3JzIG9uIHRoZSB0ZXh0Ym94XHJcblx0XHRpZiAoY2hhbmdlcy5yZXF1aXJlZCB8fCBjaGFuZ2VzLm1pbmxlbmd0aCB8fCBjaGFuZ2VzLm1heGxlbmd0aCkge1xyXG5cdFx0XHR0aGlzLnNldFRleHRib3hGb3JtTW9kZWxWYWxpZGF0b3JzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gVXBkYXRlIHBsYWNlaG9sZGVyIHRleHQgd2hlbiAnQWRkIE5ldycgaXMgY29uZGl0aW9uYWwuXHJcblx0XHQvLyBuZ09uQ2hhbmdlcygpIGtpY2tzIG9mZiBiZWZvcmUgbmdPbkluaXQsIHNvIGluIG9yZGVyXHJcblx0XHQvLyB0byBub3Qgb3ZlcndyaXRlIGEgdXNlci1wcm92aWRlZCBwbGFjZWhvbGRlciwgZG8gbm90XHJcblx0XHQvLyB1cGRhdGUgcGxhY2Vob2xkZXIgb24gZmlyc3QgY2hhbmdlIChuZ09uSW5pdCB3aWxsIHRha2UgY2FyZSBvZiBpdCkuXHJcblx0XHRpZiAoKGNoYW5nZXMuYWRkTmV3ICYmICFjaGFuZ2VzLmFkZE5ldy5pc0ZpcnN0Q2hhbmdlKCkpIHx8IGNoYW5nZXMucGxhY2Vob2xkZXIpIHtcclxuXHRcdFx0dGhpcy51cGRhdGVQbGFjZWhvbGRlclRleHQoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBhbmd1bGFyIG9uSW5pdCBsaWZlY3ljbGUgaG9va1xyXG5cdCAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2xpZmVjeWNsZS1ob29rc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuYWx3YXlzT3Blbikge1xyXG5cdFx0XHR0aGlzLmhpZGVUb2dnbGVCdXR0b24gPSB0cnVlO1xyXG5cdFx0XHR0aGlzLm1lbnVTdGF0dXMgPSAndmlzaWJsZSc7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gR2V0IHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dFxyXG5cdFx0dGhpcy5jaG9vc2VPckFkZFBsYWNlaG9sZGVyID0gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ2hvb3NlIG9yIGFkZCcpfS4uLmA7XHJcblx0XHR0aGlzLmNob29zZVBsYWNlaG9sZGVyID0gYCR7dGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ2hvb3NlJyl9YDtcclxuXHJcblx0XHR0aGlzLmZvcm1Nb2RlbENoYW5nZWQodGhpcy5mb3JtTW9kZWwudmFsdWUpO1xyXG5cdFx0dGhpcy5zZXRUZXh0Ym94Rm9ybU1vZGVsVmFsaWRhdG9ycygpO1xyXG5cclxuXHRcdC8vIEVycm9ycyBmb3IgdGhpcyBjb21wb25lbnQgYXJlIGRpc3BsYXllZCB2aWEgdGhlIHZhbGlkYXRpb25FcnJvcnMgcHJvcGVydHksIHdoaWNoIGlzXHJcblx0XHQvLyBwb3B1bGF0ZWQgd2hlbiB0cmFuc2xhdGVWYWxpZGF0aW9uTWVzc2FnZXMgaXMgcnVuLlxyXG5cdFx0Ly8gV2hlbiB0aGUgaW50ZXJuYWwgVGV4dGJveENvbXBvbmVudCBoYXMgdmFsaWRhdGlvbiBlcnJvcnMsIHdlIHNldCB0aGVtIG9uIHRoZVxyXG5cdFx0Ly8gZm9ybU1vZGVsIGFzIHdlbGwuICBUaGlzIHVwZGF0ZXMgdGhlIHZhbGlkaXR5IG9mIG91ciBDb21ib2JveENvbXBvbmVudCBjb250cm9sLFxyXG5cdFx0Ly8gYnV0IGRvZXMgbm90IHRyaWdnZXIgdHJhbnNsYXRpb24uICBTdWJzY3JpYmUgdG8gc3RhdHVzQ2hhbmdlcyBoZXJlIHNvIGNvbXBvbmVudFxyXG5cdFx0Ly8gdmFsaWRhdGlvbiBlcnJvcnMgd2lsbCBhcHBlYXIgYWxvbmcgd2l0aCB0aGUgQ29tYm9ib3hDb21wb25lbnQncyBsYWJlbC5cclxuXHRcdHRoaXMuZm9ybU1vZGVsLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG5cdFx0XHR0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpXHJcblx0XHQpLnN1YnNjcmliZShkYXRhID0+IHRoaXMuZm9ybU1vZGVsQ2hhbmdlZChkYXRhKSk7XHJcblxyXG5cdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnN0YXR1c0NoYW5nZXMucGlwZShcclxuXHRcdFx0dGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG5cdFx0KS5zdWJzY3JpYmUoZGF0YSA9PiB0aGlzLnNldEZvcm1Nb2RlbFZhbGlkYXRpb25FcnJvcnMoZGF0YSkpO1xyXG5cclxuXHRcdC8vIGRlZmF1bHQgcGxhY2Vob2xkZXJcclxuXHRcdHRoaXMudXBkYXRlUGxhY2Vob2xkZXJUZXh0KCk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGFuZ3VsYXIgYWZ0ZXJWaWV3SW5pdCBsaWZlY3ljbGUgaG9va1xyXG5cdCAqIEBzZWUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2xpZmVjeWNsZS1ob29rc1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMucG9wdXApIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGFsbG93IG92ZXJmbG93IG91dCBvZiB0aGUgc2Nyb2xsUGFyZW50XHJcblx0XHQvLyBwcmV2ZW50cyBtZW51IGZyb20gb2JzY3VyaW5nIHRoZSBjb21ib2JveFxyXG5cdFx0bGV0IHBvcHBlck9wdGlvbnM6IFBvcHBlci5Qb3BwZXJPcHRpb25zID0ge1xyXG5cdFx0XHRtb2RpZmllcnM6IHtcclxuXHRcdFx0XHRwcmV2ZW50T3ZlcmZsb3c6IHtcclxuXHRcdFx0XHRcdGJvdW5kYXJpZXNFbGVtZW50OiAndmlld3BvcnQnXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9O1xyXG5cclxuXHRcdC8vIGNvbnZlcnQgdGhlIENvbWJvYm94TWVudVBvc2l0aW9uIGludG8gYSBQb3BwZXJQbGFjZW1lbnRcclxuXHRcdHN3aXRjaCAodGhpcy5tZW51UG9zaXRpb24pIHtcclxuXHRcdFx0Y2FzZSAoXCJ0b3BfbGVmdFwiKTpcclxuXHRcdFx0XHRwb3BwZXJPcHRpb25zLnBsYWNlbWVudCA9ICd0b3Atc3RhcnQnO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIChcInRvcF9yaWdodFwiKTpcclxuXHRcdFx0XHRwb3BwZXJPcHRpb25zLnBsYWNlbWVudCA9ICd0b3AtZW5kJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAoXCJib3R0b21fbGVmdFwiKTpcclxuXHRcdFx0XHRwb3BwZXJPcHRpb25zLnBsYWNlbWVudCA9ICdib3R0b20tc3RhcnQnO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIChcImJvdHRvbV9yaWdodFwiKTpcclxuXHRcdFx0XHRwb3BwZXJPcHRpb25zLnBsYWNlbWVudCA9ICdib3R0b20tZW5kJztcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWVudVBvc2l0aW9uIGZvciBDb21ib2JveENvbXBvbmVudC5gKVxyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFNjcm9sbCB0aGUgbWVudSB0byB0aGUgc2VsZWN0ZWQgaXRlbSBvbmNlIHRoZSBwb3B1cCBtZW51IGlzIHJlYWR5XHJcblx0XHRwb3BwZXJPcHRpb25zLm9uQ3JlYXRlID0gKCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNjcm9sbE1lbnUoKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLnBvcHVwRml4ZWQpIHtcclxuXHRcdFx0XHR0aGlzLnBvcHVwIS5maXhQb3NpdGlvbigpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMucG9wdXBGaXhlZCkge1xyXG5cdFx0XHRwb3BwZXJPcHRpb25zLm9uVXBkYXRlID0gKCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMucG9wdXAhLmZpeFBvc2l0aW9uKCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnBvcHVwLnBvcHBlck9wdGlvbnMgPSBwb3BwZXJPcHRpb25zO1xyXG5cclxuXHRcdHRoaXMucG9wdXAucG9wcGVyU3RhdHVzQ2hhbmdlLnBpcGUoXHJcblx0XHRcdHRha2VVbnRpbCh0aGlzLmNvbXBvbmVudERlc3Ryb3llZClcclxuXHRcdCkuc3Vic2NyaWJlKChldmVudDogJ3Zpc2libGUnIHwgJ2hpZGRlbicpID0+IHtcclxuXHRcdFx0XHR0aGlzLm1lbnVTdGF0dXMgPSBldmVudDtcclxuXHJcblx0XHRcdFx0Ly8gU3luY2hyb25pemUgdGhlIGZvcm1Nb2RlbCBhbmQgdGV4dEZvcm1Nb2RlbCB2YWx1ZXMgd2hlbiB0aGVcclxuXHRcdFx0XHQvLyBwb3B1cCBtZW51IGNsb3NlcyBhbmQgdW4tZmlsdGVyIHRoZSBvcHRpb25zIGFuZCByZXNldCB0aGVcclxuXHRcdFx0XHQvLyBzZWxlY3RlZEl0ZW0gYW5kIGluZGV4XHJcblx0XHRcdFx0aWYgKGV2ZW50ID09PSAnaGlkZGVuJykge1xyXG5cdFx0XHRcdFx0dGhpcy5zeW5jTW9kZWxWYWx1ZXMoKTtcclxuXHRcdFx0XHRcdHRoaXMucmVzZXRPcHRpb25zKCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBTZXQgZXJyb3JzIG9uIHRoZSB0ZXh0Ym94Rm9ybU1vZGVsLCB3aGljaCB3aWxsIHRoZW4gc2V0IGVycm9ycyBvbiB0aGVcclxuXHQgKiBmb3JtTW9kZWwuIEFsc28gbWFyayB0aGUgZm9ybU1vZGVsIGFzIHRvdWNoZWQgdG8gZGlzcGxheSBhbnkgZXJyb3JzLlxyXG5cdCAqIEBwYXJhbSBlcnJvcnMga2V5KHMpIG9mIFZhbGlkYXRpb25NZXNzYWdlU2VydmljZSBlcnJvcnMgdG8gZGlzcGxheSBvciByZW1vdmVcclxuXHQgKiBAbWVtYmVyb2YgQ29tb2JvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIHNldEVycm9ycyhlcnJvcnM6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB9KTogdm9pZCB7XHJcblx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0RXJyb3JzKGVycm9ycyk7XHJcblx0XHR0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogVW5maWx0ZXIgb3B0aW9ucyBhbmQgdXBkYXRlIHRoZSBzZWxlY3RlZEl0ZW0gYW5kIHNlbGVjdGVkSXRlbUluZGV4XHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIHJlc2V0T3B0aW9ucyhvcHRpb25zPzogTWVudUl0ZW1bXSk6IHZvaWQge1xyXG5cdFx0dGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBvcHRpb25zIHx8IHRoaXMub3B0aW9ucztcclxuXHRcdHRoaXMuc2VsZWN0YWJsZUl0ZW1zID0gTWVudUNvbXBvbmVudC5nZXRTZWxlY3RhYmxlSXRlbXModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xyXG5cdFx0Ly8gZG8gbm90IGNvdW50IGhlYWRpbmdzXHJcblx0XHR0aGlzLmZpbHRlcmVkT3B0aW9uQ291bnQgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucz8uZmlsdGVyKG8gPT4gby5kaXNwbGF5ICE9PSAnaGVhZGluZycgJiYgby5kaXNwbGF5ICE9PSAnZGl2aWRlZC1zZWN0aW9uJykubGVuZ3RoIHx8IDA7XHJcblxyXG5cdFx0Ly9pZiB0aGV5IGhhdmUgbm8gc2VhcmNoIHRlcm0sIGRvbid0IHRyeSB0byBzZWxlY3QgYW55dGhpbmcgc28gdGhleSBjYW4gY2xlYXIgdGhlIGJveCBvdXQgYnkgaGl0dGluZyBlbnRlclxyXG5cdFx0Ly9pZiB0aGV5IGhhdmUgYSBzZWFyY2ggdGVybSBhbmQgdGhlIG9wdGlvbnMgY2hhbmdlZCwgc2VsZWN0IGFuIG9wdGlvbiBmcm9tIHRoZSBtZW51IHNvIHRoZXkgd2lsbCBnZXQgaXQgYXV0b21hdGljYWxseSBpZiB0aGV5IGhpdCBlbnRlclxyXG5cdFx0aWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSAhPT0gJycpIHtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IHRoaXMuZmluZERlZmF1bHRTZWxlY3Rpb25JbmRleCh0aGlzLnNlbGVjdGFibGVJdGVtcywgdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlKTtcclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGFibGVJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbUluZGV4XSB8fCBudWxsO1xyXG5cdFx0XHR0aGlzLnNjcm9sbE1lbnUodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvL2lmIHRoZXkgaGF2ZSBubyBzZWFyY2ggdGVybSBhbmQgdGhlIG9wdGlvbnMgYXJlIHJlc2V0LCBkb24ndCBhdXRvLXBpY2sgdGhlIGZpcnN0IG9uZVxyXG5cdFx0XHQvL3NvIHRoYXQgZW50ZXIgd2lsbCBhbGxvdyB0aGVtIHRvIHdpcGUgb3V0IHRoZWlyIGxhc3Qgc2VsZWN0aW9uXHJcblx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW0oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpc3RlbiB0byB0aGUgc2VsZWN0ZWQgY2hhbmdlZCBldmVudCBmcm9tIHtAbGluayBNZW51Q29tcG9uZW50fSBhbmQgdXBkYXRlIHRoZSBmb3JtXHJcblx0ICogbW9kZWwgYW5kIGNsb3NlIG1lbnVcclxuXHQgKi9cclxuXHRwdWJsaWMgc2VsZWN0ZWRDaGFuZ2VkKGl0ZW06IE1lbnVJdGVtKTogdm9pZCB7XHJcblx0XHR0aGlzLnNldEZvcm1Nb2RlbFZhbHVlKGl0ZW0pO1xyXG5cdFx0dGhpcy50b2dnbGVNZW51KCk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2hvdyBhbmQgaGlkZSB0aGUgcG9wdXAgbWVudVxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHVibGljIHRvZ2dsZU1lbnUoZXZlbnQ/OiBFdmVudCk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnBvcHVwKSB7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoZXZlbnQpIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCF0aGlzLmZvcm1Nb2RlbC5kaXNhYmxlZCkge1xyXG5cdFx0XHRpZiAodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuXHRcdFx0XHQvLyBXaGVuIHRoZSBwb3B1cCBpcyBoaWRkZW4gaXQgd2lsbCBlbWl0IGl0cyBjaGFuZ2VkIHN0YXR1cyBhbmRcclxuXHRcdFx0XHQvLyB3ZSB3aWxsIHJlc2V0IHZhbHVlcyBpZiBuZWVkIGJlLlxyXG5cdFx0XHRcdHRoaXMucG9wdXAuaGlkZSgpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdGlmICh0aGlzLmxvYWRPbk9wZW5PYnNlcnZhYmxlICYmICF0aGlzLmhhc0RhdGFCZWVuTG9hZGVkT25PcGVuKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBlbmRpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdHRoaXMubG9hZE9uT3Blbk9ic2VydmFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKHJlc3VsdDogTWVudUl0ZW1bXSkgPT4ge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmhhc0RhdGFCZWVuTG9hZGVkT25PcGVuID0gdHJ1ZTtcclxuXHJcblx0XHRcdFx0XHRcdHRoaXMucGVuZGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMgPSByZXN1bHQ7XHJcblxyXG5cdFx0XHRcdFx0XHR0aGlzLnJlc2V0T3B0aW9ucygpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnBvcHVwIS5zaG93KCk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5wb3B1cC5zaG93KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgb25CbHVyKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5mb3JtTW9kZWwubWFya0FzVG91Y2hlZCgpO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbnRyb2wgdGhlIG1lbnUgd2l0aCBrZXlib2FyZCBuYXZpZ2F0aW9uXHJcblx0ICpcclxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9rZXkjRXhhbXBsZSB8IEtleWJvYXJkRXZlbnQua2V5fVxyXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9LZXlib2FyZEV2ZW50L2tleS9LZXlfVmFsdWVzIHwgS2V5IFZhbHVlc31cclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBrZXlOYXZpZ2F0ZShldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG5cdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0Y2FzZSBcIkFycm93RG93blwiOlxyXG5cdFx0XHRjYXNlIFwiRG93blwiOlxyXG5cdFx0XHRjYXNlIFwiQXJyb3dVcFwiOlxyXG5cdFx0XHRjYXNlIFwiVXBcIjpcclxuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuXHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdHRoaXMub25BcnJvd0Rvd25VcChldmVudCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRjYXNlIFwiQmFja3NwYWNlXCI6XHJcblx0XHRcdGNhc2UgXCJEZWxldGVcIjpcclxuXHRcdFx0Y2FzZSBcIkRlbFwiOlxyXG5cdFx0XHRcdGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICdoaWRkZW4nKSB7XHJcblx0XHRcdFx0XHR0aGlzLnRvZ2dsZU1lbnUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJUYWJcIjpcclxuXHRcdFx0XHQvLyBJZiB0YWJiaW5nIGZyb20gdGhlIHRleHRib3ggdG8gdGhlIGJ1dHRvbiwgb3ZlcnJpZGUgdGhlIHRleHRib3ggYXMgYmVpbmdcclxuXHRcdFx0XHQvLyBtYXJrZWQgdG91Y2hlZCBzbyB3ZSBkb24ndCBzZWUgdGhlIGludmFsaWQgc3RhdGUuIE9ubHkgc2hvdyB0aGUgaW52YWxpZCBzdGF0ZVxyXG5cdFx0XHRcdC8vIHdoZW4gdGFiYmluZyBvdXQgb2YgY29tYm9ib3ggZnJvbSB0aGUgYnV0dG9uIG9yIGJhY2sgdGFiYmluZyBmcm9tIHRoZSB0ZXh0Ym94XHJcblx0XHRcdFx0Ly8gaWYgKGV2ZW50LmtleSA9PT0gJ1RhYicgJiYgZXZlbnQuc3JjRWxlbWVudCAmJiBldmVudC5zcmNFbGVtZW50LnRhZ05hbWUgPT09ICdJTlBVVCcpIHtcclxuXHRcdFx0XHQvLyBcdGlmIChldmVudC5zaGlmdEtleSkge1xyXG5cdFx0XHRcdC8vIFx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0XHRcdC8vIFx0XHR0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHRcdFx0Ly8gXHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8vIFx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwubWFya0FzVW50b3VjaGVkKCk7XHJcblx0XHRcdFx0Ly8gXHR9XHJcblx0XHRcdFx0Ly8gfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdUYWInICYmIGV2ZW50LnNyY0VsZW1lbnQgJiYgZXZlbnQuc3JjRWxlbWVudC50YWdOYW1lID09PSAnQlVUVE9OJykge1xyXG5cdFx0XHRcdC8vIFx0aWYgKCFldmVudC5zaGlmdEtleSkge1xyXG5cdFx0XHRcdC8vIFx0XHR0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcblx0XHRcdFx0Ly8gXHR9XHJcblx0XHRcdFx0Ly8gfVxyXG5cclxuXHRcdFx0XHRpZiAodGhpcy5tZW51U3RhdHVzID09PSAndmlzaWJsZScpIHtcclxuXHRcdFx0XHRcdC8vaWYgdGhlIHNlbGVjdGVkIG9wdGlvbiBpcyB0aGUgYWRkIG5ldyBidXR0b24gbGV0IGl0IGZpcmUgYnV0IGRvbid0IGFsbG93XHJcblx0XHRcdFx0XHQvL3RoZSB0YWIgZXZlbnQgdG8gY2FycnkgdGhlbSBmb3J3YXJkIGZyb20gd2hlcmV2ZXIgdGhleSBsYW5kIC0gdGhleSB3b3VsZCBza2lwIHRoZSBmaXJzdCBib3ggb24gdGhlIGFkZCBuZXcgZm9ybVxyXG5cdFx0XHRcdFx0Ly9JbiB0aGUgbm9ybWFsIGNhc2Ugd2Ugd2FudCB0byBhbGxvdyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvciB0aGV5IHdvbid0IGJlIGFibGUgdG8gdGFiIG91dCBvZiB0aGUgY29udHJvbCBhdCBhbGwuXHJcblx0XHRcdFx0XHRpZih0aGlzLmFkZE5ld1NlbGVjdGVkKXtcclxuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR0aGlzLmNvbW1pdFNlbGVjdGlvbihldmVudCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBcIkVudGVyXCI6XHJcblx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcblx0XHRcdFx0aWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnKSB7XHJcblx0XHRcdFx0XHR0aGlzLmNvbW1pdFNlbGVjdGlvbihldmVudCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBcIkVzY2FwZVwiOlxyXG5cdFx0XHRjYXNlIFwiRXNjXCI6XHJcblx0XHRcdFx0aWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnKSB7XHJcblx0XHRcdFx0XHQvLyBKdXN0IGNsb3NlIHRoZSBtZW51LCBkbyBub3QgZm9jdXMgdGhlIG5leHQgZWxlbWVudCBvbiB0YWJcclxuXHRcdFx0XHRcdC8vIHVubGVzcyB0aGUgbWVudSBpcyBoaWRkZW5cclxuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG5cdFx0XHRcdFx0Ly8gQ2xvc2UgdGhlIG1lbnUgYmVmb3JlIHdlIHJlc2V0IHNlbGVjdGVkSXRlbSBzbyB3ZSBkb24ndCBzZWUgdGhlIGhpZ2hsaWdodCBjaGFuZ2luZ1xyXG5cdFx0XHRcdFx0Ly8gd2hlbiByZXNldCB0aGUgc2VsZWN0ZWQgaXRlbSBiYWNrIHRvIHRoZSBmb3JtTW9kZWxcclxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlTWVudSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgXCIgXCI6XHJcblx0XHRcdGNhc2UgXCJTcGFjZWJhclwiOlxyXG5cdFx0XHRcdGlmICh0aGlzLm1lbnVTdGF0dXMgPT09ICdoaWRkZW4nKSB7XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy50b2dnbGVNZW51KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRpZiAodGhpcy5tZW51U3RhdHVzID09PSAnaGlkZGVuJyAmJiBldmVudC5rZXkgIT09ICdTaGlmdCcpIHtcclxuXHRcdFx0XHRcdHRoaXMudG9nZ2xlTWVudSgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGYWNpbGl0YXRlcyBhZGRpbmcgaXRlbXMgdG8gYSBjb21ib2JveFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGFkZEZuIEZ1bmN0aW9uIGZyb20gcGFyZW50IHRoYXQgc2hvdWxkIG1ha2UgYW4gQVBJIHJlcXVlc3QgdG8gYWRkIGEgbmV3IGl0ZW0gdG8gdGhlIGNvbWJvYm94J3Mgb3B0aW9uc1xyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhc3luYyBhZGROZXdJdGVtKGFkZEZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBhZGRGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAvLyBXZSBnYXZlIGl0IG91ciBiZXN0IHRyeSwgc29tZXRoaW5nIGlzIHJlYWxseSB3aGFjaywgc28gbGV0J3MganVzdCBzZXQgdGhlIGVycm9yXHJcbiAgICAgICAgICAgIHRoaXMuc2V0RXJyb3JzKHsgJ2FkZG5ldyc6IHRydWUgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlTWVudSgpO1xyXG4gICAgfVxyXG5cclxuXHQvKipcclxuXHQgKiBGaWd1cmUgb3V0IHdoZXRoZXIgdGhleSBhcmUgYWRkaW5nIG5ldyBvciBoYXZlIGFuIGl0ZW0gc2VsZWN0ZWQsIGFuZCBjb21taXQgaXQgdG8gdGhlIGZvcm0gbW9kZWxcclxuXHQgKi9cclxuICBwcml2YXRlIGNvbW1pdFNlbGVjdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuYWRkTmV3U2VsZWN0ZWQpIHtcclxuXHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblx0XHRcdHRoaXMub25BZGROZXcoZXZlbnQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zZXRGb3JtTW9kZWxWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbSk7XHJcblx0XHRcdHRoaXMudG9nZ2xlTWVudSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2VuZCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgdGV4dGJveCB0byB0aGUgcGFyZW50IHdoZW4gdGhlIGFkZCBuZXcgYnV0dG9uIGlzXHJcblx0ICogY2xpY2tlZFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGV2ZW50IEFkZCBuZXcgYnV0dG9uIGNsaWNrIG9yIGVudGVyIGtleSBldmVudFxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBvbkFkZE5ldyhldmVudDogRXZlbnQpOiB2b2lkIHtcclxuXHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cdFx0dGhpcy5hZGROZXdTZWxlY3RlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5hZGROZXdDbGljay5lbWl0KHRoaXMudGV4dGJveEZvcm1Nb2RlbC52YWx1ZSk7XHJcblx0XHR0aGlzLnBvcHVwPy5oaWRlKCk7XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGUgdGhlIGRyb3Bkb3duIG1lbnUgdXNpbmcgdXAgYW5kIGRvd24gYXJyb3cga2V5c1xyXG5cdCAqXHJcblx0ICogQHBhcmFtIGV2ZW50IFVwIG9yIGRvd24gYXJyb3cga2V5ZG93biBldmVudFxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgb25BcnJvd0Rvd25VcChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG5cdFx0c3dpdGNoIChldmVudC5rZXkpIHtcclxuXHRcdFx0Y2FzZSBcIkFycm93RG93blwiOlxyXG5cdFx0XHRjYXNlIFwiRG93blwiOlxyXG5cdFx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID09PSAtMSAmJiB0aGlzLmFkZE5ld0J1dHRvbiAmJiAhdGhpcy5hZGROZXdCdXR0b24ubmF0aXZlRWxlbWVudC5oaWRkZW4gJiYgIXRoaXMuYWRkTmV3U2VsZWN0ZWQpIHtcclxuXHRcdFx0XHRcdHRoaXMuYWRkTmV3U2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA8IHRoaXMuc2VsZWN0YWJsZUl0ZW1zLmxlbmd0aCAtIDEpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgrKztcclxuXHJcblx0XHRcdFx0XHRpZiAodGhpcy5hZGROZXdTZWxlY3RlZCkge1xyXG5cdFx0XHRcdFx0XHR0aGlzLmFkZE5ld1NlbGVjdGVkID0gZmFsc2U7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBcIkFycm93VXBcIjpcclxuXHRcdFx0Y2FzZSBcIlVwXCI6XHJcblx0XHRcdFx0aWYgKHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPT09IC0xICYmIHRoaXMuYWRkTmV3QnV0dG9uICYmICF0aGlzLmFkZE5ld0J1dHRvbi5uYXRpdmVFbGVtZW50LmhpZGRlbiAmJiB0aGlzLmFkZE5ld1NlbGVjdGVkKSB7XHJcblx0XHRcdFx0XHR0aGlzLmFkZE5ld1NlbGVjdGVkID0gZmFsc2U7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID4gLTEpIHtcclxuXHRcdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXgtLTtcclxuXHJcblx0XHRcdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9PT0gLTEgJiYgdGhpcy5hZGROZXdCdXR0b24gJiYgIXRoaXMuYWRkTmV3QnV0dG9uLm5hdGl2ZUVsZW1lbnQuaGlkZGVuKSB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWRkTmV3U2VsZWN0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gdGhpcy5zZWxlY3RhYmxlSXRlbXNbdGhpcy5zZWxlY3RlZEl0ZW1JbmRleF07XHJcblxyXG5cdFx0aWYgKHRoaXMubWVudVN0YXR1cyA9PT0gJ2hpZGRlbicpIHtcclxuXHJcblx0XHRcdHRoaXMuc2V0Rm9ybU1vZGVsVmFsdWUodGhpcy5zZWxlY3RlZEl0ZW0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5zY3JvbGxNZW51KCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblxyXG5cdC8qKlxyXG5cclxuXHQgKiBGaWx0ZXIgYXJyYXkgb2Ygb3B0aW9ucyBieSBsYWJlbCBvciBjYXB0aW9uIChjb250YWlucylcclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBmaWx0ZXJUZXh0IFRoZSB2YWx1ZSBvZiB0ZXh0Ym94IHRoYXQgd2Ugd2lsbCBmaWx0ZXIgb3VyIG9wdGlvbnMgYnlcclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZmlsdGVyT3B0aW9uc0FycmF5KGZpbHRlclRleHQ6IHN0cmluZyk6IEFycmF5PE1lbnVJdGVtPiB7XHJcblx0XHRsZXQgc2VhcmNoVGV4dCA9IGZpbHRlclRleHQudG9Mb3dlckNhc2UoKTtcclxuXHRcdGlmIChmaWx0ZXJUZXh0ICYmIGZpbHRlclRleHQgIT09ICcnKSB7XHJcblx0XHRcdGNvbnN0IG1hdGNoZXNTZWFyY2ggPSAoaXRlbTogTWVudUl0ZW0pID0+IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpID49IDAgfHwgKGl0ZW0uY2FwdGlvbiAmJiBpdGVtLmNhcHRpb24udG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpID49IDApO1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnJlZHVjZSgoZmlsdGVyZWRJdGVtcywgaXRlbSkgPT4ge1xyXG5cdFx0XHRcdC8vIE1hdGNoIHRoZSBpdGVtIGl0c2VsZiBpZiBpdCBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuXHJcblx0XHRcdFx0aWYgKCFpdGVtLml0ZW1zPy5sZW5ndGggJiYgbWF0Y2hlc1NlYXJjaChpdGVtKSkge1xyXG5cdFx0XHRcdFx0ZmlsdGVyZWRJdGVtcy5wdXNoKGl0ZW0pO1xyXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgY2hpbGRyZW4sIGZpbHRlciB0aGVtIGFuZCBhZGQgdGhlIHBhcmVudCBpZiBpdCBoYXMgYW55IGNoaWxkcmVuIHRoYXQgbWF0Y2hcclxuXHRcdFx0XHR9IGVsc2UgaWYgKGl0ZW0uaXRlbXM/Lmxlbmd0aCAmJiAoaXRlbS5kaXNwbGF5ID09PSAnaGVhZGluZycgfHwgaXRlbS5kaXNwbGF5ID09PSAnZGl2aWRlZC1zZWN0aW9uJykpIHtcclxuXHRcdFx0XHRcdGNvbnN0IGZpbHRlcmVkQ2hpbGRJdGVtcyA9IGl0ZW0uaXRlbXMuZmlsdGVyKG1hdGNoZXNTZWFyY2gpO1xyXG5cdFx0XHRcdFx0aWYgKGZpbHRlcmVkQ2hpbGRJdGVtcy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0Ly8gTmVlZCB0byBjbG9uZSB0aGUgcGFyZW50IGl0ZW0gd2l0aCB0aGUgZmlsdGVyZWQgY2hpbGRyZW4gc28gd2UgZG9uJ3QgbW9kaWZ5IHRoZSBvcmlnaW5hbFxyXG5cdFx0XHRcdFx0XHRmaWx0ZXJlZEl0ZW1zLnB1c2goey4uLml0ZW0sIGl0ZW1zOiBmaWx0ZXJlZENoaWxkSXRlbXN9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0cmV0dXJuIGZpbHRlcmVkSXRlbXM7XHJcblx0XHRcdH0sIDxNZW51SXRlbVtdPltdKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnM7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogRmluZCBhIGdpdmVuIGl0ZW0ncyBpbmRleCBpbiB0aGUgZmlsdGVyZWQgaXRlbXMgYXJyYXkuXHJcblx0ICpcclxuXHQgKiBSZXR1cm5zIC0xIGlmIG5vdCBmb3VuZFxyXG5cdCAqIEBwYXJhbSBpdGVtIFRoZSBtYXRjaGluZyBpdGVtIHRvIGZpbmQgaW4gdGhlXHJcblx0ICogZmlsdGVyZE9wdGlvbnMgYXJyYXkuIFdpbGwgdXNlIHRoZSBzZWxlY3RlZEl0ZW0gaWYgbm90aGluZyBpcyBwYXNzZWQuXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBmaW5kU2VsZWN0ZWRJdGVtSW5kZXgoaXRlbT86IE1lbnVJdGVtKTogbnVtYmVyIHtcclxuXHRcdGxldCBpdGVtVG9GaW5kID0gaXRlbSA/IGl0ZW0gOiB0aGlzLnNlbGVjdGVkSXRlbTtcclxuXHJcblx0XHRpZiAoaXRlbVRvRmluZCkge1xyXG5cdFx0XHRyZXR1cm4gdGhpcy5zZWxlY3RhYmxlSXRlbXMuZmluZEluZGV4KGl0ZW0gPT4ge1xyXG5cdFx0XHRcdGlmKGl0ZW0uaWQgJiYgKDxNZW51SXRlbT5pdGVtVG9GaW5kKS5pZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGl0ZW0ubGFiZWwgPT09ICg8TWVudUl0ZW0+aXRlbVRvRmluZCkubGFiZWwgJiYgaXRlbS5pZCA9PT0gKDxNZW51SXRlbT5pdGVtVG9GaW5kKS5pZFxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXR1cm4gaXRlbS5sYWJlbCA9PT0gKDxNZW51SXRlbT5pdGVtVG9GaW5kKS5sYWJlbDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAtMTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBSZWFjdCB0byBvdXIgZm9ybU1vZGVsIGNoYW5naW5nXHJcblx0ICpcclxuXHQgKiBUaGUgZm9ybU1vZGVsIHJlcHJlc2VudHMgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBNb2RlbEl0ZW1cclxuXHQgKiBXaGVuIGNoYW5nZWQsIHNldCB0aGUgdmFsdWUgb2YgdGhlIFRleHRib3hDb21wb25lbnQgYW5kXHJcblx0ICogZmluZCBpbmRleCBvZiBpdGVtIGluIG9wdGlvbnMgbGlzdC5cclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZm9ybU1vZGVsQ2hhbmdlZChkYXRhPzogTWVudUl0ZW0pOiB2b2lkIHtcclxuXHRcdHRoaXMuc3luY2hyb25pemVEaXNhYmxlZEF0dHJpYnV0ZXMoKTtcclxuXHJcblx0XHRpZiAoZGF0YSkge1xyXG5cdFx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsdWUoZGF0YS5zZWxlY3RlZExhYmVsIHx8IGRhdGEubGFiZWwpO1xyXG5cclxuXHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IHRoaXMuZmluZFNlbGVjdGVkSXRlbUluZGV4KGRhdGEpO1xyXG5cdFx0XHRpZiAodGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGFibGVJdGVtc1t0aGlzLnNlbGVjdGVkSXRlbUluZGV4XTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly9UaGUgaG9zdCB3aXBlZCBvdXQgdGhlIGRhdGEgZXh0ZXJuYWxseSwgY2xlYXIgdGhlIHRleHRib3ggYW5kIHRoZSB0cmFja2luZyBzdGF0ZVxyXG5cdFx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwucmVzZXQoKTtcclxuXHRcdFx0dGhpcy5jbGVhclNlbGVjdGVkSXRlbSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNjcm9sbCB0aGUgbWVudSBpZiB0aGUgY3VycmVudCBzZWxlY3RlZEl0ZW1JbmRleCBpcyBvdXQgb2Ygdmlld1xyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBzY3JvbGxNZW51KGtub3duSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdC8vIFVwZGF0ZSB0aGUgc2VsZWN0ZWRJdGVtSW5kZXggaW4gY2FzZSBvdXIgb3B0aW9ucyBjaGFuZ2VkXHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtSW5kZXggPSBrbm93bkluZGV4ID09PSB1bmRlZmluZWQgPyB0aGlzLmZpbmRTZWxlY3RlZEl0ZW1JbmRleCgpIDoga25vd25JbmRleDtcclxuXHJcblx0XHRcdGlmICh0aGlzLnNlbGVjdGVkSXRlbUluZGV4ID4gLTEgJiYgdGhpcy5zZWxlY3RlZEl0ZW0pIHtcclxuXHRcdFx0XHQvLyBUaGUgbWVudSBjb21wb25lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIGlkcyBmb3IgdGhlIG1lbnUgaXRlbXMgaWYgdGhleSBkb250IGhhdmUgdGhlbSxcclxuXHRcdFx0XHQvLyBzbyB0aGV5IG5lZWQgdG8gYmUgYWNjb3VudGVkIGZvciBoZXJlIHNpbmNlIHRoZSBjb21ib2JveCBkb2Vzbid0IGtub3cgYWJvdXQgdGhvc2UgaWRzXHJcblx0XHRcdFx0bGV0IGl0ZW1JZCA9IHRoaXMuc2VsZWN0ZWRJdGVtLmlkID8gdGhpcy5zZWxlY3RlZEl0ZW0uaWQgOiBNZW51Q29tcG9uZW50LmdldEluZGV4ZWRJdGVtSWQodGhpcy5maWx0ZXJlZE9wdGlvbnMsIHRoaXMuc2VsZWN0ZWRJdGVtLCBgJHt0aGlzLmlkfV9tZW51YCk7XHJcblxyXG5cdFx0XHRcdC8vdHJpZ2dlciB0aGUgc2Nyb2xsaW5nIGFmdGVyIGEgdGljayB0byBhbGxvdyB0aGUgbWVudSB0byBiZSB1cCB0byBkYXRlIChhbmQgcGVuZGluZyBtYXNrIGNsZWFyZWQpIGJlZm9yZSBtZWFzdXJpbmdcclxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpPT57XHJcblx0XHRcdFx0XHR0aGlzLnNjcm9sbFNlcnZpY2Uuc2Nyb2xsSXRlbUNlbnRlcmVkKGAjJHt0aGlzLmlkfV9tZW51X2xpc3RgLCBgIyR7aXRlbUlkfWApO1xyXG5cdFx0XHRcdH0sIDApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlYXJjaC9GaWx0ZXIgYmFzZWQgb24gdGV4dGJveCBpbnB1dFxyXG5cdCAqIE5PVEU6IHNvIGFzIG5vdCB0byByZWNlaXZlIGEgbm90aWZpY2F0aW9uIG9uIGV2ZXJ5IGtleSBldmVudCwgd2Ugc3VnZ2VzdCB5b3UgZGVib3VuY2UgeW91clxyXG5cdCAqIHN1YnNjcmlwdGlvblxyXG5cdCAqIEBzZWUge0BsaW5rIGh0dHA6Ly9yZWFjdGl2ZXguaW8vcnhqcy9jbGFzcy9lczYvT2JzZXJ2YWJsZS5qc35PYnNlcnZhYmxlLmh0bWwjaW5zdGFuY2UtbWV0aG9kLWRlYm91bmNlVGltZSB8IE9ic2VydmFibGUuZGVib3VuY2VUaW1lfVxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBzZWFyY2hBbmRGaWx0ZXIoc2VhcmNoVGV4dD86IHN0cmluZyk6IHZvaWQge1xyXG5cclxuXHRcdC8vIGFsd2F5cyBlbWl0XHJcblx0XHR0aGlzLnNlYXJjaC5lbWl0KHNlYXJjaFRleHQpO1xyXG5cclxuXHRcdC8vIGRvIGludGVybmFsIGZpbHRlcmluZyBpZiBubyBvbmUncyBzdWJzY3JpYmVkIHRvIG91ciBzZWFyY2ggZW1pdHRlclxyXG5cdFx0aWYgKHRoaXMuc2VhcmNoLm9ic2VydmVycy5sZW5ndGggPT09IDAgJiYgc2VhcmNoVGV4dCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMucmVzZXRPcHRpb25zKHRoaXMuZmlsdGVyT3B0aW9uc0FycmF5KHNlYXJjaFRleHQpKTtcclxuXHJcblx0XHRcdGlmICh0aGlzLmFkZE5ld1NlbGVjdGVkICYmICF0aGlzLmFkZE5ld0J1dHRvbikge1xyXG5cdFx0XHRcdHRoaXMuYWRkTmV3U2VsZWN0ZWQgPSBmYWxzZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCB7QGxpbmsgZm9ybU1vZGVsIH0ncyB2YWxpZGF0aW9uIGVycm9ycyBlcXVhbCB0byB0aGUgaW50ZXJuYWwgdGV4dGJveCdzLlxyXG5cdCAqXHJcblx0ICogV2hlbiB0aGUgaW50ZXJuYWwgdGV4dGJveCBpcyBpbnZhbGlkLCBuZWVkIHRvIHNldCB0aGlzIGNvbnRyb2wnc1xyXG5cdCAqIGVycm9ycyBiZWNhdXNlIHdlIGFyZSB1c2luZyBvdXIgb3duIGxhYmVsLCBub3QgVGV4dGJveENvbnRyb2wncy5cclxuXHQgKiBXZSB1c2Ugb3VyIG93biBsYWJlbCBzbyBsYWJlbCB0ZXh0IHdpbGwgd3JhcCBhdCB0aGUgZW5kIG9mIHRoZSBidXR0b24sXHJcblx0ICogbm90IGF0IHRoZSBlbmQgb2YgdGhlIHRleHRib3guXHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwcml2YXRlIHNldEZvcm1Nb2RlbFZhbGlkYXRpb25FcnJvcnMoZGF0YT86IGFueSk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMudGV4dGJveEZvcm1Nb2RlbC5pbnZhbGlkKSB7XHJcblx0XHRcdHRoaXMuZm9ybU1vZGVsLnNldEVycm9ycyh0aGlzLnRleHRib3hGb3JtTW9kZWwuZXJyb3JzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZm9ybU1vZGVsLnNldEVycm9ycyhudWxsKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCB2YWx1ZSB3aXRoIHRoZSBzZWxlY3RlZCBpdGVtIG9yIHJlc2V0IGZvcm0gbW9kZWwgdmFsdWUgaWYgaXRlbSBpcyBudWxsXHJcblx0ICpcclxuXHQgKiBAbWVtYmVyb2YgQ29tYm9ib3hDb21wb25lbnRcclxuXHQgKi9cclxuXHRwcml2YXRlIHNldEZvcm1Nb2RlbFZhbHVlKGl0ZW06IE1lbnVJdGVtIHwgbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbHVlKGl0ZW0gPyAoaXRlbS5zZWxlY3RlZExhYmVsIHx8IGl0ZW0ubGFiZWwpIDogJycpO1xyXG5cdFx0dGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUoaXRlbSk7XHJcblx0XHR0aGlzLmZvcm1Nb2RlbC5tYXJrQXNEaXJ0eSgpO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldCB2YWxpZGF0b3JzIG9uIHRoZSB7QHNlZSB0ZXh0Ym94Rm9ybU1vZGVsIH1cclxuXHQgKlxyXG5cdCAqIFZhbGlkYXRvcnMgYXJlIGN1cnJlbnRseSBzZXQgYmFzZWQgb24gdGhlIHtAc2VlIG1heGxlbmd0aCB9LFxyXG5cdCAqIHtAc2VlIG1pbmxlbmd0aCB9LCBhbmQge0BzZWUgcmVxdWlyZWQgfSBpbnB1dHMuICBUaGlzIHdvcmtzIHdlbGxcclxuXHQgKiB3aXRoIHtAc2VlIFRleHRib3hDb21wb25lbnQgfSwgd2hpY2ggbmVlZHMgdGhlc2UgaW5wdXRzIHRvIGFwcGx5XHJcblx0ICogdGhlIHByb3BlciBhdHRyaWJ1dGVzIHRvIGl0cyBpbnB1dHMuXHJcblx0ICpcclxuXHQgKiBBIGZ1dHVyZSByZWxlYXNlIG9mIEFuZ3VsYXIgd2lsbCBzdXBwb3NlZGx5IGFkZCB0aGVzZSBhdHRyaWJ1dGVzXHJcblx0ICogZm9yIHlvdSwgd2hpY2ggd2lsbCBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIFRleHRib3hDb21wb25lbnQgdG8gaGF2ZVxyXG5cdCAqIHN1Y2ggaW5wdXRzLiAgVGhpcyBjb21wb25lbnQsIGhvd2V2ZXIsIHdpbGwgc3RpbGwgbmVlZCB0aGVzZSBpbnB1dHNcclxuXHQgKiBhcyB0aGVyZSBpcyBubyBjdXJyZW50IHdheSB0byBrbm93IHdoaWNoIHZhbGlkYXRvcnMgYXJlIGFwcGxpZWQgdG8gaXRcclxuXHQgKiBmcm9tIGl0cyBwYXJlbnQgVmlldyBDb21wb25lbnQuXHJcblx0ICpcclxuXHQgKlxyXG5cdCAqIEBtZW1iZXJvZiBDb21ib2JveENvbXBvbmVudFxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc2V0VGV4dGJveEZvcm1Nb2RlbFZhbGlkYXRvcnMoKTogdm9pZCB7XHJcblx0XHRsZXQgdmFsaWRhdG9yczogQXJyYXk8VmFsaWRhdG9yRm4+ID0gW107XHJcblxyXG5cdFx0aWYgKHRoaXMucmVxdWlyZWQpIHtcclxuXHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLm1pbmxlbmd0aCkge1xyXG5cdFx0XHR2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgodGhpcy5taW5sZW5ndGgpKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5tYXhsZW5ndGgpIHtcclxuXHRcdFx0dmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWF4TGVuZ3RoKHRoaXMubWF4bGVuZ3RoKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnNldFZhbGlkYXRvcnModmFsaWRhdG9ycyk7XHJcblxyXG5cdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHR9XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBLZWVwIHRleHRib3gncyBkaXNhYmxlZCBzdGF0dXMgaW4tc3luYyB3aXRoIGNvbWJvYm94J3NcclxuXHQgKlxyXG5cdCAqIHtAbGluayBUZXh0Ym94Q29tcG9uZW50fSBnZXRzIGl0cyBkaXNhYmxlZCBzdGF0dXMgZnJvbSBpdHMge0BsaW5rIEZvcm1Db250cm9sfVxyXG5cdCAqXHJcblx0ICogQG1lbWJlcm9mIENvbWJvYm94Q29tcG9uZW50XHJcblx0ICovXHJcblx0cHJpdmF0ZSBzeW5jaHJvbml6ZURpc2FibGVkQXR0cmlidXRlcygpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmZvcm1Nb2RlbC5kaXNhYmxlZCAhPT0gdGhpcy50ZXh0Ym94Rm9ybU1vZGVsLmRpc2FibGVkKSB7XHJcblx0XHRcdGlmICh0aGlzLmZvcm1Nb2RlbC5kaXNhYmxlZCkge1xyXG5cdFx0XHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5kaXNhYmxlKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy50ZXh0Ym94Rm9ybU1vZGVsLmVuYWJsZSgpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogSWYgdGhlIGZvcm1Nb2RlbCB2YWx1ZSBhbmQgdGV4dGJveCB2YWx1ZSBkbyBub3QgbWF0Y2gsIHJlc2V0IHRoZSB0ZXh0Ym94IGFuZCBzZWxlY3RlZEl0ZW0gdG9cclxuXHQgKiB0aGUgZm9ybU1vZGxlIHZhbHVlLiBJZiB0aGVyZSBpcyBubyBmb3JtTW9kZWwgdmFsdWUsIG1ha2Ugc3VyZSB3ZSBjbGVhciB0aGUgdGV4dGJveC4gUmVzZXQgdGhlXHJcblx0ICogZmlsdGVyZWRPcHRpb25zIHRvIHRoZSBmdWxsIGxpc3QgYW5kIHVwZGF0ZSB0aGUgc2VsZWN0ZWRJdGVtSW5kZXhcclxuXHQgKlxyXG5cdCAqL1xyXG5cdHByaXZhdGUgc3luY01vZGVsVmFsdWVzKCk6IHZvaWQge1xyXG5cdFx0Ly8gSWYgdGhlcmUgaXMgYSBmb3JtTW9kZWwgdmFsdWUsIHJlc2V0IHRoZSBzZWxlY3RlZCBpdGVtLiBJZiB0aGVyZSBpc24ndCwgbWFrZVxyXG5cdFx0Ly8gc3VyZSB3ZSBjbGVhciB0aGUgdGV4dGJveFxyXG5cdFx0Y29uc3QgbmV3TGFiZWwgPSB0aGlzLmZvcm1Nb2RlbC52YWx1ZT8uc2VsZWN0ZWRMYWJlbCB8fCB0aGlzLmZvcm1Nb2RlbC52YWx1ZT8ubGFiZWw7XHJcblx0XHRpZiAodGhpcy5mb3JtTW9kZWwudmFsdWUgJiYgKG5ld0xhYmVsICE9PSB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUpKSB7XHJcblx0XHRcdHRoaXMudGV4dGJveEZvcm1Nb2RlbC5zZXRWYWx1ZShuZXdMYWJlbCk7XHJcblx0XHR9IGVsc2UgaWYgKCF0aGlzLmZvcm1Nb2RlbC52YWx1ZSkge1xyXG5cdFx0XHR0aGlzLnRleHRib3hGb3JtTW9kZWwuc2V0VmFsdWUoJycpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlYXJjaCBhbmQgZmlsdGVyIHRoZSBvcHRpb25zIGxpc3Qgd2hlbiB0aGUgdmFsdWUgb2YgdGhlIHRleHRib3ggaW5wdXQgY2hhbmdlcy4gSWYgYWRkTmV3IGlzXHJcblx0ICogc2V0IGFsc28gY2hlY2sgZm9yIG1hdGNoZXMgaW4gb3VyIGZpbHRlcmVkT3B0aW9ucyB0byBjb25kaXRpb25hbGx5IHNob3cgYW5kIGhpZGUgdGhlIGFkZCBuZXdcclxuXHQgKiBidXR0b25cclxuXHQgKlxyXG5cdCAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzL2lucHV0XHJcblx0ICovXHJcblx0cHVibGljIHRleHRib3hWYWx1ZUNoYW5nZWQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XHJcblx0XHR0aGlzLnNlYXJjaEFuZEZpbHRlcih0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUpO1xyXG5cclxuXHRcdGlmICh0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUgPT09ICcnKSB7XHJcblx0XHRcdHRoaXMuY2xlYXJTZWxlY3RlZEl0ZW0oKTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy5hZGROZXcpIHtcclxuXHRcdFx0bGV0IG1hdGNoID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpID09PSB0aGlzLnRleHRib3hGb3JtTW9kZWwudmFsdWUudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0fSk7XHJcblx0XHRcdHRoaXMuZm91bmRNYXRjaCA9IG1hdGNoID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIFVwZGF0ZSB0aGUgcG9wdXAgbWVudSBwb3NpdGlvbiB3aGVuIGlucHV0IHZhbHVlIGNoYW5nZXNcclxuXHRcdGlmICh0aGlzLnBvcHVwKSB7XHJcblx0XHRcdHRoaXMucG9wdXAudXBkYXRlKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGNsZWFyU2VsZWN0ZWRJdGVtKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG5cdFx0dGhpcy5zZWxlY3RlZEl0ZW1JbmRleCA9IC0xO1xyXG5cdH1cclxuXHJcblx0LyoqUmVjb21wdXRlIHdoYXQgdGhlIHBsYWNlaG9sZGVyIHNob3VsZCBiZSBiYXNlZCBvbiB3aGV0aGVyIHRoZSB1c2VyIHByb3ZpZGVkIG9uZSBhbmQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGFkZE5ldyBpbnB1dCAqL1xyXG5cdHByaXZhdGUgdXBkYXRlUGxhY2Vob2xkZXJUZXh0KCl7XHJcblx0XHRpZiAodGhpcy5wbGFjZWhvbGRlcikge1xyXG5cdFx0XHR0aGlzLmVmZmVjdGl2ZVBsYWNlaG9sZGVyID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCh0aGlzLnBsYWNlaG9sZGVyKTtcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5hZGROZXcpIHtcclxuXHRcdFx0dGhpcy5lZmZlY3RpdmVQbGFjZWhvbGRlciA9IHRoaXMuY2hvb3NlT3JBZGRQbGFjZWhvbGRlcjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZWZmZWN0aXZlUGxhY2Vob2xkZXIgPSB0aGlzLmNob29zZVBsYWNlaG9sZGVyO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqRmluZCB0aGUgb3B0aW9uIHdlIHdhbnQgdG8gYmUgdGhlIGRlZmF1bHQgc2VsZWN0aW9uLiBJZiB0aGVyZSBpcyBhbiBleGFjdCBtYXRjaCwgdXNlIHRoYXRcclxuXHQgKiBvdGhlcndpc2UgaWYgdGhlcmUgYXJlIGl0ZW1zLCByZXR1cm4gemVybyB0byBpbmRpY2F0ZSB0aGUgZmlyc3QgaXRlbS4gT3RoZXJ3aXNlIHJldHVybiAtMVxyXG5cdCAqIHRvIGluZGljYXRlIG5vIHNlbGVjdGlvblxyXG5cdCAqL1xyXG5cdHByaXZhdGUgZmluZERlZmF1bHRTZWxlY3Rpb25JbmRleChvcHRpb25zOiBNZW51SXRlbVtdLCBzZWFyY2hUZXh0OiBzdHJpbmcpOiBudW1iZXIge1xyXG5cdFx0bGV0IGluZGV4ID0gLTE7XHJcblxyXG5cdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCl7XHJcblx0XHRcdGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3B0aW9uPT5vcHRpb24gIT0gbnVsbCk7XHJcblxyXG5cdFx0XHRpZihzZWFyY2hUZXh0KXtcclxuXHRcdFx0XHRzZWFyY2hUZXh0ID0gc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcclxuXHRcdFx0XHRsZXQgZXhhY3RNYXRjaEluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgob3B0aW9uPT5vcHRpb24ubGFiZWwudG9Mb3dlckNhc2UoKSA9PSBzZWFyY2hUZXh0KTtcclxuXHRcdFx0XHRpZihleGFjdE1hdGNoSW5kZXggPj0wKXtcclxuXHRcdFx0XHRcdGluZGV4ID0gZXhhY3RNYXRjaEluZGV4O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGluZGV4O1xyXG5cdH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNvbnRyb2wgY29udHJvbC1sYWJlbC17e2xhYmVsUG9zaXRpb259fVwiXHJcbiAgICAgW25nQ2xhc3NdPVwieydvcGVuJzogbWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnLFxyXG4gICAgICAgICAgICAgICAgICdpbnZhbGlkJzogZm9ybU1vZGVsLnRvdWNoZWQgJiYgZm9ybU1vZGVsLmludmFsaWQsXHJcbiAgICAgICAgICAgICAgICAgJ2hhcy1pY29uJzogKCh0ZW1wbGF0ZVR5cGUgPT09ICdpY29uQW5kTGFiZWwnIHx8IHRlbXBsYXRlVHlwZSA9PT0gJ2ljb25MYWJlbENhcHRpb24nKSAmJiBmb3JtTW9kZWwudmFsdWUgJiYgZm9ybU1vZGVsLnZhbHVlLmljb24gJiYgZm9ybU1vZGVsLnZhbHVlLmxhYmVsID09PSB0ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAnaXMtcmVhZG9ubHknOiByZWFkb25seSxcclxuICAgICAgICAgICAgICAgICAnaXMtZGlzYWJsZWQnOiBmb3JtTW9kZWwuZGlzYWJsZWQsXHJcbiAgICAgICAgICAgICAgICAgJ2lzLWFsd2F5cy1vcGVuJzogYWx3YXlzT3Blbn1cIj5cclxuXHJcbiAgPGxhYmVsICpuZ0lmPVwibGFiZWxcIj5cclxuICAgIDxzcGFuPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwidmFsaWRhdGlvbkVycm9ycy5sZW5ndGggPiAwICYmIGZvcm1Nb2RlbC50b3VjaGVkICYmIGZvcm1Nb2RlbC5pbnZhbGlkXCI+Jm5ic3A7e3t2YWxpZGF0aW9uRXJyb3JzfX08L3NwYW4+XHJcbiAgICA8ZWMtaGVscC1wb3BvdmVyIGlkPVwie3tpZH19X2hlbHBQb3BvdmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2sgbXktbjMgbXgtbjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICB0ZXh0PVwie3toZWxwUG9wb3ZlciB8IHRyYW5zbGF0ZX19XCJcclxuICAgICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uPVwie3toZWxwUG9wb3ZlclBvc2l0aW9ufX1cIj5cclxuICAgIDwvZWMtaGVscC1wb3BvdmVyPlxyXG4gIDwvbGFiZWw+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbHdheXNPcGVuOyBlbHNlIHBvcHVwVGFyZ2V0XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dGJveC1ncm91cCBjb250cm9sLWlucHV0XCJcclxuICAgICAgICAgW25nQ2xhc3NdPVwidGV4dGJveEVsZW1lbnRDbGFzc2VzXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZXh0Ym94XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDAgfHwgdGV4dGJveEZvcm1Nb2RlbC52YWx1ZVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25tZW51XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3BvcHVwVGFyZ2V0PlxyXG4gIDxkaXYgY2xhc3M9XCJ0ZXh0Ym94LWdyb3VwIGNvbnRyb2wtaW5wdXRcIlxyXG4gICAgICAgW25nQ2xhc3NdPVwidGV4dGJveEVsZW1lbnRDbGFzc2VzXCJcclxuICAgICAgICplY1BvcHVwPVwiZHJvcGRvd25tZW51XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGV4dGJveFwiPjwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICN0ZXh0Ym94PlxyXG4gIDxpIGNsYXNzPVwiZWMtaWNvbiB7e2Zvcm1Nb2RlbC52YWx1ZT8uaWNvbn19XCI+PC9pPlxyXG5cclxuICA8ZWMtdGV4dGJveCBjbGFzcz1cInRleHRib3gtZ3JvdXAtaW5wdXQgbWItMFwiXHJcbiAgICAgICAgICAgICAgI3RleHRib3hcclxuICAgICAgICAgICAgICBbaWRdPVwiaWRcIlxyXG4gICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcclxuICAgICAgICAgICAgICBbZm9ybU1vZGVsXT1cInRleHRib3hGb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwibWF4bGVuZ3RoXCJcclxuICAgICAgICAgICAgICBbbWlubGVuZ3RoXT1cIm1pbmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImVmZmVjdGl2ZVBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxyXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleFwiXHJcbiAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwidGV4dGJveFZhbHVlQ2hhbmdlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXlOYXZpZ2F0ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAoZm9jdXNvdXQpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgICAgIFt1cHBlckNhc2VdPVwidXBwZXJDYXNlXCJcclxuICAgICAgICAgICAgICBbcGVuZGluZ109XCJwZW5kaW5nICYmIGFsd2F5c09wZW5cIlxyXG4gICAgICAgICAgICAgIFthdXRvY29tcGxldGVdPVwiJ29mZidcIj48L2VjLXRleHRib3g+XHJcblxyXG4gIDxlYy1idXR0b24gY2xhc3M9XCJ0ZXh0Ym94LWdyb3VwLWJ0bi1yaWdodFwiXHJcbiAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlVG9nZ2xlQnV0dG9uXCJcclxuICAgICAgICAgICAgIFtpZF09XCJpZCArICdfYnV0dG9uJ1wiXHJcbiAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybU1vZGVsLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgIGljb249XCJpY29uLWNhcmV0LWRvd25cIlxyXG4gICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcclxuICAgICAgICAgICAgIHR5cGU9XCJzZWNvbmRhcnlcIlxyXG4gICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZU1lbnUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAoa2V5ZG93bik9XCJrZXlOYXZpZ2F0ZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwibWVudVN0YXR1cyA9PT0gJ3Zpc2libGUnXCI+PC9lYy1idXR0b24+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3dubWVudT5cclxuICA8ZGl2IGNsYXNzPVwicG9wdXBcIlxyXG4gICAgICAgZWNPdmVybGF5XHJcbiAgICAgICBbc3RhdHVzXT1cInBlbmRpbmcgJiYgIWFsd2F5c09wZW4gPyAncGVuZGluZycgOiAnaGFzRGF0YSdcIj5cclxuXHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLW5ldyB7e2FkZE5ld09wdGlvbnM/LmNsYXNzTGlzdH19XCJcclxuICAgICAgICAgICAgaWQ9XCJ7e2lkfX1fYWRkTmV3XCJcclxuICAgICAgICAgICAgI2FkZE5ld0J1dHRvblxyXG4gICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwiYWRkTmV3U2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cImFkZE5ld1wiXHJcbiAgICAgICAgICAgIFtoaWRkZW5dPVwiZm91bmRNYXRjaCB8fCAoYWRkTmV3ID09PSAnZHluYW1pYycgJiYgKCF0ZXh0Ym94Rm9ybU1vZGVsLnZhbHVlIHx8IChmb3JtTW9kZWwudmFsdWUgJiYgdGV4dGJveEZvcm1Nb2RlbC52YWx1ZSA9PT0gZm9ybU1vZGVsLnZhbHVlLmxhYmVsKSkpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkTmV3KCRldmVudClcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJhZGQtbmV3LWxhYmVsIGVjLXV0aWwtdHJ1bmNhdGVcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImFkZE5ldyA9PT0gJ3N0YXRpYycgfHwgYWRkTmV3ID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICB0cmFuc2xhdGU+e3thZGROZXdPcHRpb25zPy5sYWJlbH19XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiYWRkTmV3ID09PSAnZHluYW1pYydcIj57eydBZGQnIHwgdHJhbnNsYXRlfX0gPHN0cm9uZyBjbGFzcz1cImVjLXV0aWwtdHJ1bmNhdGVcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3RleHQtdXBwZXJjYXNlJzogdXBwZXJDYXNlfVwiPnt7dGV4dGJveEZvcm1Nb2RlbC52YWx1ZX19PC9zdHJvbmc+XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L3NwYW4+XHJcbiAgICAgIDxpIGNsYXNzPVwiZWMtaWNvbiB7e2FkZE5ld09wdGlvbnM/Lmljb259fVwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG5cclxuICAgIDxlYy1tZW51IGlkPVwie3tpZH19X21lbnVcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmJvcmRlci10b3AtMF09XCIhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiBoaWRlTm9NYXRjaGVzXCJcclxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIm1lbnVFbGVtZW50Q2xhc3Nlc1wiXHJcbiAgICAgICAgICAgICBbdGVtcGxhdGVUeXBlXT1cInRlbXBsYXRlVHlwZVwiXHJcbiAgICAgICAgICAgICBbY3VzdG9tTWVudVRlbXBsYXRlXT1cImN1c3RvbU1lbnVUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICBbc2hvd05vSXRlbXNdPVwiIWhpZGVOb01hdGNoZXNcIlxyXG4gICAgICAgICAgICAgW25vRGF0YVRleHRdPVwibm9NYXRjaGVzVGV4dFwiXHJcbiAgICAgICAgICAgICBbaXRlbXNdPVwiZmlsdGVyZWRPcHRpb25zXCJcclxuICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZEl0ZW1cIlxyXG4gICAgICAgICAgICAgKHNlbGVjdGVkQ2hhbmdlZCk9XCJzZWxlY3RlZENoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICBbcHJlc2VydmVJY29uU3BhY2VdPVwicHJlc2VydmVJY29uU3BhY2VcIlxyXG4gICAgICAgICAgICAgW3RydW5jYXRlSXRlbXNdPVwidHJ1bmNhdGVJdGVtc1wiPjwvZWMtbWVudT5cclxuXHJcbiAgICA8Zm9vdGVyICpuZ0lmPVwidG90YWxSZWNvcmRzICYmIHRvdGFsUmVjb3JkcyA+IGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA+IDBcIj5cclxuICAgICAgPHNwYW4+e3tmaWx0ZXJlZE9wdGlvbkNvdW50fX0ge3snb2YnIHwgdHJhbnNsYXRlfX0ge3t0b3RhbFJlY29yZHN9fTwvc3Bhbj5cclxuICAgIDwvZm9vdGVyPlxyXG4gIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPiJdfQ==
@@ -49,10 +49,10 @@ export class FormControlComponent {
49
49
  }
50
50
  }
51
51
  FormControlComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormControlComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
52
- FormControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormControlComponent, selector: "ec-form-control", inputs: { id: "id", icon: "icon", actionIcon: "actionIcon", showClear: "showClear", formModelInput: ["formModel", "formModelInput"], autofocus: "autofocus", pending: "pending", required: "required", readonly: "readonly" }, outputs: { actionClicked: "actionClicked", actionKeydown: "actionKeydown" }, host: { listeners: { "click": "onClick()" }, properties: { "class.is-pending": "this.pending", "class.is-required": "this.required", "class.is-readonly": "this.readonly", "class.is-empty": "this.empty", "class.is-invalid": "this.invalid", "class.is-disabled": "this.disabled" } }, queries: [{ propertyName: "formControlDirective", first: true, predicate: FormControlDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\r\n<i id=\"{{id + '_icon'}}\" class=\"ec-form-control-icon ec-icon {{icon}}\"></i>\r\n<i id=\"{{id + '_loading'}}\" class=\"ec-form-control-icon ec-icon icon-loading\"></i>\r\n<i id=\"{{id + '_required'}}\" class=\"ec-form-control-icon ec-icon icon-required\"></i>\r\n<i id=\"{{id + '_invalid'}}\" class=\"ec-form-control-icon ec-icon icon-invalid\"></i>\r\n<button *ngIf=\"showClear\"\r\n id=\"{{id + '_clear'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-clear\"\r\n (click)=\"clear()\">\r\n <i class=\"ec-icon icon-cancel\"></i>\r\n</button>\r\n<button *ngIf=\"actionIcon\"\r\n id=\"{{id + '_action'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-action\"\r\n (click)=\"actionClicked.emit($event)\"\r\n (keydown)=\"actionKeydown.emit($event)\">\r\n <i class=\"ec-icon {{actionIcon}}\"></i>\r\n</button>\r\n<div class=\"ec-focus-ring\"></div>", styles: ["ec-form-control{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);padding:0 .5rem;position:relative;color:var(--ec-form-control-color);display:flex;font-size:var(--ec-form-control-font-size);min-height:2rem;width:100%}ec-form-control>input,ec-form-control>select,ec-form-control>textarea,ec-form-control>div[contenteditable=true]{color:inherit;flex:1 1;min-width:0;border:0;background-color:transparent;order:2}ec-form-control>input::selection,ec-form-control>select::selection,ec-form-control>textarea::selection,ec-form-control>div[contenteditable=true]::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}ec-form-control>input::-webkit-input-placeholder,ec-form-control>select::-webkit-input-placeholder,ec-form-control>textarea::-webkit-input-placeholder,ec-form-control>div[contenteditable=true]::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input::-moz-placeholder,ec-form-control>select::-moz-placeholder,ec-form-control>textarea::-moz-placeholder,ec-form-control>div[contenteditable=true]::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:-ms-input-placeholder,ec-form-control>select:-ms-input-placeholder,ec-form-control>textarea:-ms-input-placeholder,ec-form-control>div[contenteditable=true]:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input:-moz-placeholder,ec-form-control>select:-moz-placeholder,ec-form-control>textarea:-moz-placeholder,ec-form-control>div[contenteditable=true]:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:focus,ec-form-control>select:focus,ec-form-control>textarea:focus,ec-form-control>div[contenteditable=true]:focus{outline:none}ec-form-control>input:focus~.ec-focus-ring,ec-form-control>select:focus~.ec-focus-ring,ec-form-control>textarea:focus~.ec-focus-ring,ec-form-control>div[contenteditable=true]:focus~.ec-focus-ring{display:block}ec-form-control>input,ec-form-control>textarea,ec-form-control>select,ec-form-control>div[contenteditable=true],ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{padding:calc((1.875rem - var(--ec-font-size-body) * 1.25) / 2) 0;line-height:1.25;font-size:inherit}ec-form-control>textarea{resize:none;padding:.3125rem 0}ec-form-control .ec-form-control-icon{margin-top:.4375rem;margin-right:.25rem;order:1}ec-form-control .ec-form-control-icon:not([class*=icon-]){display:none}ec-form-control .icon-required,ec-form-control .icon-invalid{color:var(--ec-form-control-border-color-invalid)}ec-form-control .ec-form-control-clear,ec-form-control .ec-form-control-action{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border-radius:var(--ec-border-radius);display:flex;cursor:pointer;flex:none;height:1.875rem;width:2rem;order:3;background-color:transparent;border:0;border-radius:0;display:inline-flex;align-items:center;justify-content:center;outline:none}ec-form-control .ec-form-control-clear .label,ec-form-control .ec-form-control-action .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}ec-form-control .ec-form-control-clear .ec-icon,ec-form-control .ec-form-control-action .ec-icon{flex:none}ec-form-control .ec-form-control-clear .ec-icon+.label,ec-form-control .ec-form-control-action .ec-icon+.label{flex:none;margin-left:.25rem}ec-form-control .ec-form-control-clear.has-badge,ec-form-control .ec-form-control-action.has-badge{padding-right:.0625rem}ec-form-control .ec-form-control-clear:focus,ec-form-control .ec-form-control-action:focus{outline:none;position:relative;z-index:1}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{border:0;background-color:transparent;border-color:transparent}ec-form-control .ec-form-control-clear:last-of-type,ec-form-control .ec-form-control-action:last-of-type{margin-right:-.5rem}ec-form-control .ec-form-control-clear:hover:not(:disabled),ec-form-control .ec-form-control-action:hover:not(:disabled){cursor:pointer;background-color:var(--ec-background-color-hover)}ec-form-control .ec-form-control-clear:active:not(:disabled),ec-form-control .ec-form-control-action:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}ec-form-control .ec-form-control-clear:focus:not(:disabled),ec-form-control .ec-form-control-action:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}ec-form-control button:last-of-type{border-top-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem);border-bottom-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem)}ec-form-control .ec-form-control-clear{width:1.5rem}ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{color:var(--ec-color-secondary-dark);flex:none;cursor:default}ec-form-control .ec-form-control-prefix{margin-right:.125rem;order:2}ec-form-control .ec-form-control-suffix{margin-left:.125rem;order:3}ec-form-control .ec-focus-ring{position:absolute;inset:-1px;border:.125rem solid var(--ec-color-interactive);pointer-events:none;display:none;border-radius:var(--ec-form-control-border-radius);z-index:1}ec-form-control.is-pending .icon-invalid,ec-form-control.is-pending .icon-required{display:none}ec-form-control.is-invalid{border-color:var(--ec-form-control-border-color-invalid);background-color:var(--ec-form-control-background-color-invalid)}ec-form-control.is-invalid .icon-required{display:none}ec-form-control.is-empty .ec-form-control-clear{display:none}ec-form-control.is-required.is-empty .ec-form-control-icon:first-of-type{display:none}ec-form-control:not(.is-pending) .icon-loading{display:none}ec-form-control:not(.is-required) .icon-required,ec-form-control:not(.is-empty) .icon-required{display:none}ec-form-control:not(.is-invalid) .icon-invalid{display:none}ec-form-control.is-readonly,ec-form-control.is-disabled{background-color:var(--ec-form-control-background-color-disabled)}ec-form-control.is-readonly .icon-loading,ec-form-control.is-readonly .icon-invalid,ec-form-control.is-readonly .icon-required,ec-form-control.is-readonly .ec-form-control-clear,ec-form-control.is-disabled .icon-loading,ec-form-control.is-disabled .icon-invalid,ec-form-control.is-disabled .icon-required,ec-form-control.is-disabled .ec-form-control-clear{display:none}ec-form-control.is-readonly{border-color:var(--ec-form-control-border-color-readonly);color:var(--ec-form-control-color-readonly)}ec-form-control.is-readonly .ec-form-control-action{display:none}ec-form-control.is-disabled:not(.is-readonly){color:var(--ec-form-control-color-disabled);opacity:.6}ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-prefix,ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-suffix{color:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
52
+ FormControlComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: FormControlComponent, selector: "ec-form-control", inputs: { id: "id", icon: "icon", actionIcon: "actionIcon", showClear: "showClear", formModelInput: ["formModel", "formModelInput"], autofocus: "autofocus", pending: "pending", required: "required", readonly: "readonly" }, outputs: { actionClicked: "actionClicked", actionKeydown: "actionKeydown" }, host: { listeners: { "click": "onClick()" }, properties: { "class.is-pending": "this.pending", "class.is-required": "this.required", "class.is-readonly": "this.readonly", "class.is-empty": "this.empty", "class.is-invalid": "this.invalid", "class.is-disabled": "this.disabled" } }, queries: [{ propertyName: "formControlDirective", first: true, predicate: FormControlDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\r\n<i id=\"{{id + '_icon'}}\" class=\"ec-form-control-icon ec-icon {{icon}}\"></i>\r\n<i id=\"{{id + '_loading'}}\" class=\"ec-form-control-icon ec-icon icon-loading\"></i>\r\n<i id=\"{{id + '_required'}}\" class=\"ec-form-control-icon ec-icon icon-required\"></i>\r\n<i id=\"{{id + '_invalid'}}\" class=\"ec-form-control-icon ec-icon icon-invalid\"></i>\r\n<button *ngIf=\"showClear\"\r\n id=\"{{id + '_clear'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-clear\"\r\n (click)=\"clear()\">\r\n <i class=\"ec-icon icon-cancel\"></i>\r\n</button>\r\n<button *ngIf=\"actionIcon\"\r\n id=\"{{id + '_action'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-action\"\r\n (click)=\"actionClicked.emit($event)\"\r\n (keydown)=\"actionKeydown.emit($event)\">\r\n <i class=\"ec-icon {{actionIcon}}\"></i>\r\n</button>\r\n<div class=\"ec-focus-ring\"></div>", styles: ["ec-form-control{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);padding:0 .5rem;position:relative;color:var(--ec-form-control-color);display:flex;font-size:var(--ec-form-control-font-size);min-height:2rem;width:100%}ec-form-control>input,ec-form-control>select,ec-form-control>textarea,ec-form-control>div[contenteditable=true]{color:inherit;flex:1 1;min-width:0;border:0;background-color:transparent;order:2}ec-form-control>input::selection,ec-form-control>select::selection,ec-form-control>textarea::selection,ec-form-control>div[contenteditable=true]::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}ec-form-control>input::-webkit-input-placeholder,ec-form-control>select::-webkit-input-placeholder,ec-form-control>textarea::-webkit-input-placeholder,ec-form-control>div[contenteditable=true]::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input::-moz-placeholder,ec-form-control>select::-moz-placeholder,ec-form-control>textarea::-moz-placeholder,ec-form-control>div[contenteditable=true]::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:-ms-input-placeholder,ec-form-control>select:-ms-input-placeholder,ec-form-control>textarea:-ms-input-placeholder,ec-form-control>div[contenteditable=true]:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input:-moz-placeholder,ec-form-control>select:-moz-placeholder,ec-form-control>textarea:-moz-placeholder,ec-form-control>div[contenteditable=true]:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:focus,ec-form-control>select:focus,ec-form-control>textarea:focus,ec-form-control>div[contenteditable=true]:focus{outline:none}ec-form-control>input:focus~.ec-focus-ring,ec-form-control>select:focus~.ec-focus-ring,ec-form-control>textarea:focus~.ec-focus-ring,ec-form-control>div[contenteditable=true]:focus~.ec-focus-ring{display:block}ec-form-control>input,ec-form-control>textarea,ec-form-control>select,ec-form-control>div[contenteditable=true],ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{padding:calc((1.875rem - (var(--ec-font-size-body) * 1.25)) / 2) 0;line-height:1.25;font-size:inherit}ec-form-control>textarea{resize:none;padding:.3125rem 0}ec-form-control .ec-form-control-icon{margin-top:.4375rem;margin-right:.25rem;order:1}ec-form-control .ec-form-control-icon:not([class*=icon-]){display:none}ec-form-control .icon-required,ec-form-control .icon-invalid{color:var(--ec-form-control-border-color-invalid)}ec-form-control .ec-form-control-clear,ec-form-control .ec-form-control-action{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border-radius:var(--ec-border-radius);display:flex;cursor:pointer;flex:none;height:1.875rem;width:2rem;order:3;background-color:transparent;border:0;border-radius:0;display:inline-flex;align-items:center;justify-content:center;outline:none}ec-form-control .ec-form-control-clear .label,ec-form-control .ec-form-control-action .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}ec-form-control .ec-form-control-clear .ec-icon,ec-form-control .ec-form-control-action .ec-icon{flex:none}ec-form-control .ec-form-control-clear .ec-icon+.label,ec-form-control .ec-form-control-action .ec-icon+.label{flex:none;margin-left:.25rem}ec-form-control .ec-form-control-clear.has-badge,ec-form-control .ec-form-control-action.has-badge{padding-right:.0625rem}ec-form-control .ec-form-control-clear:focus,ec-form-control .ec-form-control-action:focus{outline:none;position:relative;z-index:1}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{border:0;background-color:transparent;border-color:transparent}ec-form-control .ec-form-control-clear:last-of-type,ec-form-control .ec-form-control-action:last-of-type{margin-right:-.5rem}ec-form-control .ec-form-control-clear:hover:not(:disabled),ec-form-control .ec-form-control-action:hover:not(:disabled){cursor:pointer;background-color:var(--ec-background-color-hover)}ec-form-control .ec-form-control-clear:active:not(:disabled),ec-form-control .ec-form-control-action:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}ec-form-control .ec-form-control-clear:focus:not(:disabled),ec-form-control .ec-form-control-action:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}ec-form-control button:last-of-type{border-top-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem);border-bottom-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem)}ec-form-control .ec-form-control-clear{width:1.5rem}ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{color:var(--ec-color-secondary-dark);flex:none;cursor:default}ec-form-control .ec-form-control-prefix{margin-right:.125rem;order:2}ec-form-control .ec-form-control-suffix{margin-left:.125rem;order:3}ec-form-control .ec-focus-ring{position:absolute;inset:-1px;border:.125rem solid var(--ec-color-interactive);pointer-events:none;display:none;border-radius:var(--ec-form-control-border-radius);z-index:1}ec-form-control.is-pending .icon-invalid,ec-form-control.is-pending .icon-required{display:none}ec-form-control.is-invalid{border-color:var(--ec-form-control-border-color-invalid);background-color:var(--ec-form-control-background-color-invalid)}ec-form-control.is-invalid .icon-required{display:none}ec-form-control.is-empty .ec-form-control-clear{display:none}ec-form-control.is-required.is-empty .ec-form-control-icon:first-of-type{display:none}ec-form-control:not(.is-pending) .icon-loading{display:none}ec-form-control:not(.is-required) .icon-required,ec-form-control:not(.is-empty) .icon-required{display:none}ec-form-control:not(.is-invalid) .icon-invalid{display:none}ec-form-control.is-readonly,ec-form-control.is-disabled{background-color:var(--ec-form-control-background-color-disabled)}ec-form-control.is-readonly .icon-loading,ec-form-control.is-readonly .icon-invalid,ec-form-control.is-readonly .icon-required,ec-form-control.is-readonly .ec-form-control-clear,ec-form-control.is-disabled .icon-loading,ec-form-control.is-disabled .icon-invalid,ec-form-control.is-disabled .icon-required,ec-form-control.is-disabled .ec-form-control-clear{display:none}ec-form-control.is-readonly{border-color:var(--ec-form-control-border-color-readonly);color:var(--ec-form-control-color-readonly)}ec-form-control.is-readonly .ec-form-control-action{display:none}ec-form-control.is-disabled:not(.is-readonly){color:var(--ec-form-control-color-disabled);opacity:.6}ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-prefix,ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-suffix{color:inherit}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None });
53
53
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: FormControlComponent, decorators: [{
54
54
  type: Component,
55
- args: [{ selector: 'ec-form-control', encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\r\n<i id=\"{{id + '_icon'}}\" class=\"ec-form-control-icon ec-icon {{icon}}\"></i>\r\n<i id=\"{{id + '_loading'}}\" class=\"ec-form-control-icon ec-icon icon-loading\"></i>\r\n<i id=\"{{id + '_required'}}\" class=\"ec-form-control-icon ec-icon icon-required\"></i>\r\n<i id=\"{{id + '_invalid'}}\" class=\"ec-form-control-icon ec-icon icon-invalid\"></i>\r\n<button *ngIf=\"showClear\"\r\n id=\"{{id + '_clear'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-clear\"\r\n (click)=\"clear()\">\r\n <i class=\"ec-icon icon-cancel\"></i>\r\n</button>\r\n<button *ngIf=\"actionIcon\"\r\n id=\"{{id + '_action'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-action\"\r\n (click)=\"actionClicked.emit($event)\"\r\n (keydown)=\"actionKeydown.emit($event)\">\r\n <i class=\"ec-icon {{actionIcon}}\"></i>\r\n</button>\r\n<div class=\"ec-focus-ring\"></div>", styles: ["ec-form-control{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);padding:0 .5rem;position:relative;color:var(--ec-form-control-color);display:flex;font-size:var(--ec-form-control-font-size);min-height:2rem;width:100%}ec-form-control>input,ec-form-control>select,ec-form-control>textarea,ec-form-control>div[contenteditable=true]{color:inherit;flex:1 1;min-width:0;border:0;background-color:transparent;order:2}ec-form-control>input::selection,ec-form-control>select::selection,ec-form-control>textarea::selection,ec-form-control>div[contenteditable=true]::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}ec-form-control>input::-webkit-input-placeholder,ec-form-control>select::-webkit-input-placeholder,ec-form-control>textarea::-webkit-input-placeholder,ec-form-control>div[contenteditable=true]::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input::-moz-placeholder,ec-form-control>select::-moz-placeholder,ec-form-control>textarea::-moz-placeholder,ec-form-control>div[contenteditable=true]::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:-ms-input-placeholder,ec-form-control>select:-ms-input-placeholder,ec-form-control>textarea:-ms-input-placeholder,ec-form-control>div[contenteditable=true]:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input:-moz-placeholder,ec-form-control>select:-moz-placeholder,ec-form-control>textarea:-moz-placeholder,ec-form-control>div[contenteditable=true]:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:focus,ec-form-control>select:focus,ec-form-control>textarea:focus,ec-form-control>div[contenteditable=true]:focus{outline:none}ec-form-control>input:focus~.ec-focus-ring,ec-form-control>select:focus~.ec-focus-ring,ec-form-control>textarea:focus~.ec-focus-ring,ec-form-control>div[contenteditable=true]:focus~.ec-focus-ring{display:block}ec-form-control>input,ec-form-control>textarea,ec-form-control>select,ec-form-control>div[contenteditable=true],ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{padding:calc((1.875rem - var(--ec-font-size-body) * 1.25) / 2) 0;line-height:1.25;font-size:inherit}ec-form-control>textarea{resize:none;padding:.3125rem 0}ec-form-control .ec-form-control-icon{margin-top:.4375rem;margin-right:.25rem;order:1}ec-form-control .ec-form-control-icon:not([class*=icon-]){display:none}ec-form-control .icon-required,ec-form-control .icon-invalid{color:var(--ec-form-control-border-color-invalid)}ec-form-control .ec-form-control-clear,ec-form-control .ec-form-control-action{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border-radius:var(--ec-border-radius);display:flex;cursor:pointer;flex:none;height:1.875rem;width:2rem;order:3;background-color:transparent;border:0;border-radius:0;display:inline-flex;align-items:center;justify-content:center;outline:none}ec-form-control .ec-form-control-clear .label,ec-form-control .ec-form-control-action .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}ec-form-control .ec-form-control-clear .ec-icon,ec-form-control .ec-form-control-action .ec-icon{flex:none}ec-form-control .ec-form-control-clear .ec-icon+.label,ec-form-control .ec-form-control-action .ec-icon+.label{flex:none;margin-left:.25rem}ec-form-control .ec-form-control-clear.has-badge,ec-form-control .ec-form-control-action.has-badge{padding-right:.0625rem}ec-form-control .ec-form-control-clear:focus,ec-form-control .ec-form-control-action:focus{outline:none;position:relative;z-index:1}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{border:0;background-color:transparent;border-color:transparent}ec-form-control .ec-form-control-clear:last-of-type,ec-form-control .ec-form-control-action:last-of-type{margin-right:-.5rem}ec-form-control .ec-form-control-clear:hover:not(:disabled),ec-form-control .ec-form-control-action:hover:not(:disabled){cursor:pointer;background-color:var(--ec-background-color-hover)}ec-form-control .ec-form-control-clear:active:not(:disabled),ec-form-control .ec-form-control-action:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}ec-form-control .ec-form-control-clear:focus:not(:disabled),ec-form-control .ec-form-control-action:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}ec-form-control button:last-of-type{border-top-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem);border-bottom-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem)}ec-form-control .ec-form-control-clear{width:1.5rem}ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{color:var(--ec-color-secondary-dark);flex:none;cursor:default}ec-form-control .ec-form-control-prefix{margin-right:.125rem;order:2}ec-form-control .ec-form-control-suffix{margin-left:.125rem;order:3}ec-form-control .ec-focus-ring{position:absolute;inset:-1px;border:.125rem solid var(--ec-color-interactive);pointer-events:none;display:none;border-radius:var(--ec-form-control-border-radius);z-index:1}ec-form-control.is-pending .icon-invalid,ec-form-control.is-pending .icon-required{display:none}ec-form-control.is-invalid{border-color:var(--ec-form-control-border-color-invalid);background-color:var(--ec-form-control-background-color-invalid)}ec-form-control.is-invalid .icon-required{display:none}ec-form-control.is-empty .ec-form-control-clear{display:none}ec-form-control.is-required.is-empty .ec-form-control-icon:first-of-type{display:none}ec-form-control:not(.is-pending) .icon-loading{display:none}ec-form-control:not(.is-required) .icon-required,ec-form-control:not(.is-empty) .icon-required{display:none}ec-form-control:not(.is-invalid) .icon-invalid{display:none}ec-form-control.is-readonly,ec-form-control.is-disabled{background-color:var(--ec-form-control-background-color-disabled)}ec-form-control.is-readonly .icon-loading,ec-form-control.is-readonly .icon-invalid,ec-form-control.is-readonly .icon-required,ec-form-control.is-readonly .ec-form-control-clear,ec-form-control.is-disabled .icon-loading,ec-form-control.is-disabled .icon-invalid,ec-form-control.is-disabled .icon-required,ec-form-control.is-disabled .ec-form-control-clear{display:none}ec-form-control.is-readonly{border-color:var(--ec-form-control-border-color-readonly);color:var(--ec-form-control-color-readonly)}ec-form-control.is-readonly .ec-form-control-action{display:none}ec-form-control.is-disabled:not(.is-readonly){color:var(--ec-form-control-color-disabled);opacity:.6}ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-prefix,ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-suffix{color:inherit}\n"] }]
55
+ args: [{ selector: 'ec-form-control', encapsulation: ViewEncapsulation.None, template: "<ng-content></ng-content>\r\n<i id=\"{{id + '_icon'}}\" class=\"ec-form-control-icon ec-icon {{icon}}\"></i>\r\n<i id=\"{{id + '_loading'}}\" class=\"ec-form-control-icon ec-icon icon-loading\"></i>\r\n<i id=\"{{id + '_required'}}\" class=\"ec-form-control-icon ec-icon icon-required\"></i>\r\n<i id=\"{{id + '_invalid'}}\" class=\"ec-form-control-icon ec-icon icon-invalid\"></i>\r\n<button *ngIf=\"showClear\"\r\n id=\"{{id + '_clear'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-clear\"\r\n (click)=\"clear()\">\r\n <i class=\"ec-icon icon-cancel\"></i>\r\n</button>\r\n<button *ngIf=\"actionIcon\"\r\n id=\"{{id + '_action'}}\"\r\n [attr.disabled]=\"disabled || undefined\"\r\n class=\"ec-form-control-action\"\r\n (click)=\"actionClicked.emit($event)\"\r\n (keydown)=\"actionKeydown.emit($event)\">\r\n <i class=\"ec-icon {{actionIcon}}\"></i>\r\n</button>\r\n<div class=\"ec-focus-ring\"></div>", styles: ["ec-form-control{background-color:var(--ec-form-control-background-color);background-clip:padding-box;border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);padding:0 .5rem;position:relative;color:var(--ec-form-control-color);display:flex;font-size:var(--ec-form-control-font-size);min-height:2rem;width:100%}ec-form-control>input,ec-form-control>select,ec-form-control>textarea,ec-form-control>div[contenteditable=true]{color:inherit;flex:1 1;min-width:0;border:0;background-color:transparent;order:2}ec-form-control>input::selection,ec-form-control>select::selection,ec-form-control>textarea::selection,ec-form-control>div[contenteditable=true]::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}ec-form-control>input::-webkit-input-placeholder,ec-form-control>select::-webkit-input-placeholder,ec-form-control>textarea::-webkit-input-placeholder,ec-form-control>div[contenteditable=true]::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input::-moz-placeholder,ec-form-control>select::-moz-placeholder,ec-form-control>textarea::-moz-placeholder,ec-form-control>div[contenteditable=true]::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:-ms-input-placeholder,ec-form-control>select:-ms-input-placeholder,ec-form-control>textarea:-ms-input-placeholder,ec-form-control>div[contenteditable=true]:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}ec-form-control>input:-moz-placeholder,ec-form-control>select:-moz-placeholder,ec-form-control>textarea:-moz-placeholder,ec-form-control>div[contenteditable=true]:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}ec-form-control>input:focus,ec-form-control>select:focus,ec-form-control>textarea:focus,ec-form-control>div[contenteditable=true]:focus{outline:none}ec-form-control>input:focus~.ec-focus-ring,ec-form-control>select:focus~.ec-focus-ring,ec-form-control>textarea:focus~.ec-focus-ring,ec-form-control>div[contenteditable=true]:focus~.ec-focus-ring{display:block}ec-form-control>input,ec-form-control>textarea,ec-form-control>select,ec-form-control>div[contenteditable=true],ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{padding:calc((1.875rem - (var(--ec-font-size-body) * 1.25)) / 2) 0;line-height:1.25;font-size:inherit}ec-form-control>textarea{resize:none;padding:.3125rem 0}ec-form-control .ec-form-control-icon{margin-top:.4375rem;margin-right:.25rem;order:1}ec-form-control .ec-form-control-icon:not([class*=icon-]){display:none}ec-form-control .icon-required,ec-form-control .icon-invalid{color:var(--ec-form-control-border-color-invalid)}ec-form-control .ec-form-control-clear,ec-form-control .ec-form-control-action{font-size:var(--ec-font-size-action);height:2rem;line-height:1.25rem;padding:.3125rem .5rem;border-radius:var(--ec-border-radius);display:flex;cursor:pointer;flex:none;height:1.875rem;width:2rem;order:3;background-color:transparent;border:0;border-radius:0;display:inline-flex;align-items:center;justify-content:center;outline:none}ec-form-control .ec-form-control-clear .label,ec-form-control .ec-form-control-action .label{display:flex;align-items:center;justify-content:center;white-space:nowrap;flex:auto}ec-form-control .ec-form-control-clear .ec-icon,ec-form-control .ec-form-control-action .ec-icon{flex:none}ec-form-control .ec-form-control-clear .ec-icon+.label,ec-form-control .ec-form-control-action .ec-icon+.label{flex:none;margin-left:.25rem}ec-form-control .ec-form-control-clear.has-badge,ec-form-control .ec-form-control-action.has-badge{padding-right:.0625rem}ec-form-control .ec-form-control-clear:focus,ec-form-control .ec-form-control-action:focus{outline:none;position:relative;z-index:1}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{background-color:var(--ec-background-color-disabled);border:1px solid var(--ec-form-control-border-color-disabled);color:var(--ec-color-disabled-dark);opacity:var(--ec-form-control-opacity-disabled);cursor:default}ec-form-control .ec-form-control-clear:disabled,ec-form-control .ec-form-control-action:disabled{border:0;background-color:transparent;border-color:transparent}ec-form-control .ec-form-control-clear:last-of-type,ec-form-control .ec-form-control-action:last-of-type{margin-right:-.5rem}ec-form-control .ec-form-control-clear:hover:not(:disabled),ec-form-control .ec-form-control-action:hover:not(:disabled){cursor:pointer;background-color:var(--ec-background-color-hover)}ec-form-control .ec-form-control-clear:active:not(:disabled),ec-form-control .ec-form-control-action:active:not(:disabled){background-color:var(--ec-background-color-selected);font-weight:700}ec-form-control .ec-form-control-clear:focus:not(:disabled),ec-form-control .ec-form-control-action:focus:not(:disabled){box-shadow:var(--ec-button-box-shadow-active, 0 0 0 2px var(--ec-border-color-focus))}ec-form-control button:last-of-type{border-top-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem);border-bottom-right-radius:calc(var(--ec-form-control-border-radius) - .0625rem)}ec-form-control .ec-form-control-clear{width:1.5rem}ec-form-control .ec-form-control-prefix,ec-form-control .ec-form-control-suffix{color:var(--ec-color-secondary-dark);flex:none;cursor:default}ec-form-control .ec-form-control-prefix{margin-right:.125rem;order:2}ec-form-control .ec-form-control-suffix{margin-left:.125rem;order:3}ec-form-control .ec-focus-ring{position:absolute;inset:-1px;border:.125rem solid var(--ec-color-interactive);pointer-events:none;display:none;border-radius:var(--ec-form-control-border-radius);z-index:1}ec-form-control.is-pending .icon-invalid,ec-form-control.is-pending .icon-required{display:none}ec-form-control.is-invalid{border-color:var(--ec-form-control-border-color-invalid);background-color:var(--ec-form-control-background-color-invalid)}ec-form-control.is-invalid .icon-required{display:none}ec-form-control.is-empty .ec-form-control-clear{display:none}ec-form-control.is-required.is-empty .ec-form-control-icon:first-of-type{display:none}ec-form-control:not(.is-pending) .icon-loading{display:none}ec-form-control:not(.is-required) .icon-required,ec-form-control:not(.is-empty) .icon-required{display:none}ec-form-control:not(.is-invalid) .icon-invalid{display:none}ec-form-control.is-readonly,ec-form-control.is-disabled{background-color:var(--ec-form-control-background-color-disabled)}ec-form-control.is-readonly .icon-loading,ec-form-control.is-readonly .icon-invalid,ec-form-control.is-readonly .icon-required,ec-form-control.is-readonly .ec-form-control-clear,ec-form-control.is-disabled .icon-loading,ec-form-control.is-disabled .icon-invalid,ec-form-control.is-disabled .icon-required,ec-form-control.is-disabled .ec-form-control-clear{display:none}ec-form-control.is-readonly{border-color:var(--ec-form-control-border-color-readonly);color:var(--ec-form-control-color-readonly)}ec-form-control.is-readonly .ec-form-control-action{display:none}ec-form-control.is-disabled:not(.is-readonly){color:var(--ec-form-control-color-disabled);opacity:.6}ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-prefix,ec-form-control.is-disabled:not(.is-readonly) .ec-form-control-suffix{color:inherit}\n"] }]
56
56
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { formControlDirective: [{
57
57
  type: ContentChild,
58
58
  args: [FormControlDirective]
@@ -74,10 +74,10 @@ export class SelectComponent extends FormControlBase {
74
74
  }
75
75
  }
76
76
  SelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectComponent, deps: [{ token: i1.ValidationMessageService }, { token: i2.FormGroupHelper }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
77
- SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SelectComponent, selector: "ec-select", inputs: { placeholder: "placeholder", options: "options", autoDefault: "autoDefault" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"control\"\r\n [ngClass]=\"{'is-readonly': readonly, 'is-disabled': formModel.disabled}\">\r\n\r\n <label *ngIf=\"label\"\r\n for=\"{{id}}_select\">\r\n <span>{{label | translate}}</span>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n *ngIf=\"helpPopover\"\r\n class=\"d-inline-block my-n3 mx-n1\"\r\n text=\"{{helpPopover | translate}}\"\r\n contentPosition=\"{{helpPopoverPosition}}\">\r\n </ec-help-popover>\r\n </label>\r\n\r\n <select [attr.id]=\"inputId\"\r\n tabindex=\"{{tabindex}}\"\r\n [formControl]=\"formModel\"\r\n [attr.required]=\"required\"\r\n [attr.cdkFocusInitial]=\"autofocus || null\">\r\n <option *ngIf=\"!required\"\r\n [ngValue]=\"null\">{{placeholder}}</option>\r\n <option *ngFor=\"let option of options\"\r\n [ngValue]=\"option.value\">{{option.label}}</option>\r\n </select>\r\n <i class=\"ec-icon icon-caret-down\"></i>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host .control{position:relative}:host label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}:host select{appearance:none;background-color:var(--ec-form-control-background-color);border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);background-image:none;background-clip:padding-box;width:100%;line-height:1.25rem;padding:.3125rem 1.5rem .3125rem .5rem;height:2rem}:host select::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}:host select::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select~.icon-required,:host select~.icon-invalid{color:var(--ec-form-control-border-color-invalid)}:host select:required.is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched:focus{border-color:var(--ec-form-control-background-color-invalid)}:host select.is-pending.ng-valid,:host select.is-pending.ng-invalid,:host select.is-pending.ng-pending{background-image:\"\";background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select:focus,:host select:focus.is-empty{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}:host select:disabled{background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}:host select:disabled:required,:host select:disabled:required.is-empty{background-image:none;padding-left:.5rem;background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled)}:host select:disabled:required+.icon-required,:host select:disabled:required.is-empty+.icon-required{display:none}:host select.is-uppercase:not(.is-empty){text-transform:uppercase}:host select:focus{position:static}:host .icon-caret-down{position:absolute;right:.5rem;bottom:.5625rem;z-index:1;pointer-events:none}:host select:disabled~.icon-caret-down{opacity:var(--ec-form-control-opacity-disabled)}:host .is-readonly .icon-caret-down{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
77
+ SelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SelectComponent, selector: "ec-select", inputs: { placeholder: "placeholder", options: "options", autoDefault: "autoDefault" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div class=\"control\"\r\n [ngClass]=\"{'is-readonly': readonly, 'is-disabled': formModel.disabled}\">\r\n\r\n <label *ngIf=\"label\"\r\n for=\"{{id}}_select\">\r\n <span>{{label | translate}}</span>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n *ngIf=\"helpPopover\"\r\n class=\"d-inline-block my-n3 mx-n1\"\r\n text=\"{{helpPopover | translate}}\"\r\n contentPosition=\"{{helpPopoverPosition}}\">\r\n </ec-help-popover>\r\n </label>\r\n\r\n <select [attr.id]=\"inputId\"\r\n tabindex=\"{{tabindex}}\"\r\n [formControl]=\"formModel\"\r\n [attr.required]=\"required\"\r\n [attr.cdkFocusInitial]=\"autofocus || null\">\r\n <option *ngIf=\"!required\"\r\n [ngValue]=\"null\">{{placeholder}}</option>\r\n <option *ngFor=\"let option of options\"\r\n [ngValue]=\"option.value\">{{option.label}}</option>\r\n </select>\r\n <i class=\"ec-icon icon-caret-down\"></i>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host .control{position:relative}:host label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}:host select{-webkit-appearance:none;appearance:none;background-color:var(--ec-form-control-background-color);border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);background-image:none;background-clip:padding-box;width:100%;line-height:1.25rem;padding:.3125rem 1.5rem .3125rem .5rem;height:2rem}:host select::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}:host select::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select~.icon-required,:host select~.icon-invalid{color:var(--ec-form-control-border-color-invalid)}:host select:required.is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched:focus{border-color:var(--ec-form-control-background-color-invalid)}:host select.is-pending.ng-valid,:host select.is-pending.ng-invalid,:host select.is-pending.ng-pending{background-image:\"\";background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select:focus,:host select:focus.is-empty{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}:host select:disabled{background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}:host select:disabled:required,:host select:disabled:required.is-empty{background-image:none;padding-left:.5rem;background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled)}:host select:disabled:required+.icon-required,:host select:disabled:required.is-empty+.icon-required{display:none}:host select.is-uppercase:not(.is-empty){text-transform:uppercase}:host select:focus{position:static}:host .icon-caret-down{position:absolute;right:.5rem;bottom:.5625rem;z-index:1;pointer-events:none}:host select:disabled~.icon-caret-down{opacity:var(--ec-form-control-opacity-disabled)}:host .is-readonly .icon-caret-down{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.HelpPopoverComponent, selector: "ec-help-popover", inputs: ["id", "text", "contentPosition", "maxWidth"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] });
78
78
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SelectComponent, decorators: [{
79
79
  type: Component,
80
- args: [{ selector: 'ec-select', template: "<div class=\"control\"\r\n [ngClass]=\"{'is-readonly': readonly, 'is-disabled': formModel.disabled}\">\r\n\r\n <label *ngIf=\"label\"\r\n for=\"{{id}}_select\">\r\n <span>{{label | translate}}</span>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n *ngIf=\"helpPopover\"\r\n class=\"d-inline-block my-n3 mx-n1\"\r\n text=\"{{helpPopover | translate}}\"\r\n contentPosition=\"{{helpPopoverPosition}}\">\r\n </ec-help-popover>\r\n </label>\r\n\r\n <select [attr.id]=\"inputId\"\r\n tabindex=\"{{tabindex}}\"\r\n [formControl]=\"formModel\"\r\n [attr.required]=\"required\"\r\n [attr.cdkFocusInitial]=\"autofocus || null\">\r\n <option *ngIf=\"!required\"\r\n [ngValue]=\"null\">{{placeholder}}</option>\r\n <option *ngFor=\"let option of options\"\r\n [ngValue]=\"option.value\">{{option.label}}</option>\r\n </select>\r\n <i class=\"ec-icon icon-caret-down\"></i>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host .control{position:relative}:host label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}:host select{appearance:none;background-color:var(--ec-form-control-background-color);border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);background-image:none;background-clip:padding-box;width:100%;line-height:1.25rem;padding:.3125rem 1.5rem .3125rem .5rem;height:2rem}:host select::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}:host select::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select~.icon-required,:host select~.icon-invalid{color:var(--ec-form-control-border-color-invalid)}:host select:required.is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched:focus{border-color:var(--ec-form-control-background-color-invalid)}:host select.is-pending.ng-valid,:host select.is-pending.ng-invalid,:host select.is-pending.ng-pending{background-image:\"\";background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select:focus,:host select:focus.is-empty{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}:host select:disabled{background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}:host select:disabled:required,:host select:disabled:required.is-empty{background-image:none;padding-left:.5rem;background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled)}:host select:disabled:required+.icon-required,:host select:disabled:required.is-empty+.icon-required{display:none}:host select.is-uppercase:not(.is-empty){text-transform:uppercase}:host select:focus{position:static}:host .icon-caret-down{position:absolute;right:.5rem;bottom:.5625rem;z-index:1;pointer-events:none}:host select:disabled~.icon-caret-down{opacity:var(--ec-form-control-opacity-disabled)}:host .is-readonly .icon-caret-down{display:none}\n"] }]
80
+ args: [{ selector: 'ec-select', template: "<div class=\"control\"\r\n [ngClass]=\"{'is-readonly': readonly, 'is-disabled': formModel.disabled}\">\r\n\r\n <label *ngIf=\"label\"\r\n for=\"{{id}}_select\">\r\n <span>{{label | translate}}</span>\r\n <ec-help-popover id=\"{{id}}_helpPopover\"\r\n *ngIf=\"helpPopover\"\r\n class=\"d-inline-block my-n3 mx-n1\"\r\n text=\"{{helpPopover | translate}}\"\r\n contentPosition=\"{{helpPopoverPosition}}\">\r\n </ec-help-popover>\r\n </label>\r\n\r\n <select [attr.id]=\"inputId\"\r\n tabindex=\"{{tabindex}}\"\r\n [formControl]=\"formModel\"\r\n [attr.required]=\"required\"\r\n [attr.cdkFocusInitial]=\"autofocus || null\">\r\n <option *ngIf=\"!required\"\r\n [ngValue]=\"null\">{{placeholder}}</option>\r\n <option *ngFor=\"let option of options\"\r\n [ngValue]=\"option.value\">{{option.label}}</option>\r\n </select>\r\n <i class=\"ec-icon icon-caret-down\"></i>\r\n</div>", styles: [":host{color:var(--ec-form-control-color);font-size:var(--ec-form-control-font-size);display:block;margin-bottom:1rem;width:100%}:host :host-context(.form-condensed){margin-bottom:.5rem}:host .control{width:100%;display:flex;flex-direction:column}:host .control.control-label-bottom{flex-direction:column-reverse}:host .control.control-label-left{flex-direction:row}:host .control.control-label-left label{margin-right:.25rem}:host .control.control-label-right{flex-direction:row-reverse}:host .control.control-label-right label{margin-left:.25rem}:host .control.control-label-left,:host .control.control-label-right{align-items:center}:host .control.control-label-left label,:host .control.control-label-right label{flex:1 1;margin-top:0;margin-bottom:0}:host .control.control-label-left .control-input,:host .control.control-label-right .control-input{flex:2 2}:host .control.is-readonly input,:host .control.is-readonly select,:host .control.is-readonly textarea{border-color:var(--ec-form-control-border-color-readonly);background-color:var(--ec-form-control-background-color-readonly);background-clip:border-box;background-image:none;color:var(--ec-form-control-color-readonly);opacity:1;-webkit-user-select:none;user-select:none;pointer-events:none;overflow:hidden;white-space:nowrap}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem;background-image:none}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid:focus,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid:focus{border-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-invalid,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-invalid{display:inline-flex;position:absolute;left:.5rem;top:.5rem;z-index:1}:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-invalid~.icon-required,:host .control.invalid .textbox-group-input ::ng-deep .control input.ng-valid~.icon-required{display:none}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button{background-color:var(--ec-form-control-background-color-invalid)}:host .control.invalid:not(.open) .textbox-group-btn-right ::ng-deep button:not(:focus){border-color:var(--ec-form-control-border-color-invalid)}:host .textbox-group{display:flex;position:relative}:host textarea:focus,:host input:focus,:host select:focus{outline:none}:host .control{position:relative}:host label{color:var(--ec-form-control-label-color, var(--ec-color-secondary-dark));display:block;font-size:var(--ec-font-size-label);line-height:1;margin:calc(var(--ec-font-size-label) / 2) 0}:host select{-webkit-appearance:none;appearance:none;background-color:var(--ec-form-control-background-color);border:1px solid var(--ec-form-control-border-color);border-radius:var(--ec-border-radius);background-image:none;background-clip:padding-box;width:100%;line-height:1.25rem;padding:.3125rem 1.5rem .3125rem .5rem;height:2rem}:host select::selection{background-color:var(--ec-form-control-background-color-selection);color:var(--ec-form-control-color-selection)}:host select::-webkit-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select::-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select:-ms-input-placeholder{color:var(--ec-form-control-color-placeholder)}:host select:-moz-placeholder{color:var(--ec-form-control-color-placeholder);opacity:1}:host select~.icon-required,:host select~.icon-invalid{color:var(--ec-form-control-border-color-invalid)}:host select:required.is-empty{background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched{background-color:var(--ec-form-control-background-color-invalid);border-color:var(--ec-form-control-border-color-invalid);background-image:none;background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select.ng-invalid.ng-touched:focus{border-color:var(--ec-form-control-background-color-invalid)}:host select.is-pending.ng-valid,:host select.is-pending.ng-invalid,:host select.is-pending.ng-pending{background-image:\"\";background-repeat:no-repeat;background-position:.5rem center;background-size:1rem,1rem;padding-left:1.75rem}:host select:focus,:host select:focus.is-empty{border-color:var(--ec-form-control-border-color-focus);box-shadow:var(--ec-form-control-box-shadow-focus);position:relative;z-index:1}:host select:disabled{background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled);color:var(--ec-form-control-color-disabled);opacity:var(--ec-form-control-opacity-disabled)}:host select:disabled:required,:host select:disabled:required.is-empty{background-image:none;padding-left:.5rem;background-color:var(--ec-form-control-background-color-disabled);border-color:var(--ec-form-control-border-color-disabled)}:host select:disabled:required+.icon-required,:host select:disabled:required.is-empty+.icon-required{display:none}:host select.is-uppercase:not(.is-empty){text-transform:uppercase}:host select:focus{position:static}:host .icon-caret-down{position:absolute;right:.5rem;bottom:.5625rem;z-index:1;pointer-events:none}:host select:disabled~.icon-caret-down{opacity:var(--ec-form-control-opacity-disabled)}:host .is-readonly .icon-caret-down{display:none}\n"] }]
81
81
  }], ctorParameters: function () { return [{ type: i1.ValidationMessageService }, { type: i2.FormGroupHelper }, { type: i0.ElementRef }]; }, propDecorators: { placeholder: [{
82
82
  type: Input
83
83
  }], options: [{