@messaia/cdk 18.1.2 → 18.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -113,6 +113,10 @@ export class BaseComponent {
113
113
  * Permission flag for creating new entries.
114
114
  */
115
115
  canCreate = false;
116
+ /**
117
+ * Permission flag for reading new entries.
118
+ */
119
+ canRead = false;
116
120
  /**
117
121
  * Permission flag for updating existing entries.
118
122
  */
@@ -897,4 +901,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
897
901
  type: ViewChildren,
898
902
  args: [MatExpansionPanel]
899
903
  }] } });
900
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9iYXNlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFRLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBeUMsTUFBTSxFQUErQixNQUFNLGlCQUFpQixDQUFDO0FBQzdILE9BQU8sRUFBNEIsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0Is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YTs4R0FBYixhQUFhLHVMQWlNcEIsaUJBQWlCLDJCQUFVLFVBQVUsNkRBTXJDLGlCQUFpQjs7MkZBdk1WLGFBQWE7a0JBRGxDLFNBQVM7bUhBOENGLDJCQUEyQjtzQkFEakMsS0FBSztnQkFrSEMsTUFBTTtzQkFEWixNQUFNO2dCQXFDRyxpQ0FBaUM7c0JBRDFDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQU8zQywwQkFBMEI7c0JBRG5DLFlBQVk7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVHlwZSwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTWF0RGlhbG9nQ29uZmlnLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlciwgU2Nyb2xsLCBVcmxTZWdtZW50LCBVcmxUcmVlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvbnRleHRIZWxwZXIgfSBmcm9tICcuLi8uLi9jb21tb24vY29tbW9uLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFwcFNldHRpbmcgfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2FwcC1zZXR0aW5nJztcclxuaW1wb3J0IHsgU2VydmljZUxvY2F0b3IgfSBmcm9tICcuLi8uLi9jb21tb24vc2VydmljZXMvc2VydmljZS1sb2NhdG9yJztcclxuaW1wb3J0IHsgVmREaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFZkTWVkaWFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vbWVkaWEvc2VydmljZXMvbWVkaWEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1lbnUgfSBmcm9tICcuLi8uLi9tZW51L21vZGVscy9tZW51JztcclxuaW1wb3J0IHsgVGFza0RpYWxvZ0RhdGEgfSBmcm9tICcuLi9iYXNlLm1vZHVsZSc7XHJcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4uL2NvbnN0YW50cy9jb21tb24nO1xyXG5pbXBvcnQgeyBHbG9iYWxSb2xlcyB9IGZyb20gJy4uL2NvbnN0YW50cy9nbG9iYWwtcm9sZXMnO1xyXG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gJy4uL2VudW1zL21lc3NhZ2UtdHlwZSc7XHJcbmltcG9ydCB7IEF1dGhIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2F1dGgtaGVscGVyJztcclxuaW1wb3J0IHsgSUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2liYXNlLWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEF1dGhVc2VyIH0gZnJvbSAnLi4vbW9kZWxzL2F1dGgtdXNlcic7XHJcbmltcG9ydCB7IFZkVGFza0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vdGFzay1kaWFsb2cvdGFzay1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBBIGJhc2UgbGlzdCBjb21wb25lbnQgZm9yIGNvbXBvbmVudHMgd2l0aCBwYWdpbmF0aW9uIHN1cHBvcnQuXHJcbiAqL1xyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJQmFzZUNvbXBvbmVudCwgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHQvKipcclxuXHQgKiBBcHBsaWNhdGlvbiBzZXR0aW5ncy5cclxuXHQgKi9cclxuXHRwdWJsaWMgYXBwU2V0dGluZzogQXBwU2V0dGluZztcclxuXHJcblx0LyoqXHJcblx0ICogR2VuZXJhbCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB3aXRoIGEgZmxleGlibGUgdHlwZSB0byBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIHNldHRpbmdzOiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogTWVudSBpdGVtcyBmb3IgbmF2aWdhdGlvbi5cclxuXHQgKi9cclxuXHRwdWJsaWMgbWVudT86IE1lbnU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hbWUgb2YgdGhlIHByb2plY3QsIHVzZWQgZm9yIGRpc3BsYXkgb3IgbG9nZ2luZyBwdXJwb3Nlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgcHJvamVjdE5hbWU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRpdGxlIG9mIHRoZSBjdXJyZW50IHBhZ2UsIGRpc3BsYXllZCBpbiB0aGUgcGFnZSBoZWFkZXIuXHJcblx0ICovXHJcblx0cHVibGljIHRpdGxlPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBTdWJ0aXRsZSBvZiB0aGUgY3VycmVudCBvdXRsZXQsIHVzZWQgZm9yIGFkZGl0aW9uYWwgcGFnZSBjb250ZXh0LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzdWJ0aXRsZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgZHVtbXkgZGF0YSBpcyB1c2VkIGZvciB0ZXN0aW5nLCBhbmQgZGVidWcgbG9ncyBhcmUgZW5hYmxlZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGVidWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHQgXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgYSBsb2FkaW5nIHByb2Nlc3MgaXMgYWN0aXZlLCBvZnRlbiB1c2VkIHRvIHNob3cgYSBsb2FkaW5nIHNwaW5uZXIuXHJcblx0ICovXHJcblx0cHVibGljIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gaGFuZGxlIGNoYW5nZXMgaW4gZXhwYW5zaW9uIHBhbmVscy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBoYW5kbGVFeHBhbnNpb25QYW5lbENoYW5nZXM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgd2hldGhlciBhIHNhdmUgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgX2lzU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XHJcblx0cHVibGljIGdldCBpc1NhdmluZygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuX2lzU2F2aW5nIHx8IHRoaXMuaXNMb2FkaW5nOyB9XHJcblx0cHVibGljIHNldCBpc1NhdmluZyhpc1NhdmluZzogYm9vbGVhbikgeyB0aGlzLmlzTG9hZGluZyA9IHRoaXMuX2lzU2F2aW5nID0gaXNTYXZpbmc7IH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVkaXRvciBoYXMgYmVlbiBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNFZGl0b3JJbml0aWFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTdG9yZXMgYW55IGVycm9ycyBlbmNvdW50ZXJlZCBkdXJpbmcgcmVxdWVzdHMgb3Igb3BlcmF0aW9ucy5cclxuXHQgKi9cclxuXHRwdWJsaWMgZXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogVXRpbGl0eSB0byBldmFsdWF0ZSBtZWRpYSBxdWVyaWVzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNjcmVlbiBvciB3aW5kb3cgc2l6ZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgbWVkaWE6IFZkTWVkaWFTZXJ2aWNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBMaXN0IG9mIHBlcm1pdHRlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZCBvciBzZWxlY3Rpb24uXHJcblx0ICovXHJcblx0cHVibGljIGFsbG93ZWRFeHRlbnNpb25zOiBzdHJpbmdbXSA9IENvbW1vbi5hbGxvd2VkRXh0ZW5zaW9ucztcclxuXHJcblx0LyoqXHJcblx0ICogUGx1Z2lucyBlbmFibGVkIGluIHRoZSBUaW55TUNFIGVkaXRvci5cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yUGx1Z2luczogc3RyaW5nID0gQ29tbW9uLmVkaXRvclBsdWdpbnM7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvb2xiYXIgY29uZmlndXJhdGlvbiBmb3IgVGlueU1DRSBlZGl0b3IuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvclRvb2xiYXI6IHN0cmluZyA9IENvbW1vbi5lZGl0b3JUb29sYmFyO1xyXG5cclxuXHQvKipcclxuXHQgKiBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIHRoZSBlZGl0b3IuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvckNvbmZpZzogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIG5hdmlnYXRpb24gYW5kIFVSTCBtYW5pcHVsYXRpb24uXHJcblx0ICovXHJcblx0cHVibGljIHJvdXRlcjogUm91dGVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBPcHRpb25hbCBoYXNoIHZhbHVlIGFwcGVuZGVkIHRvIFVSTHMgZm9yIGJvb2ttYXJraW5nIG9yIHN0YXRlIG1hbmFnZW1lbnQuXHJcblx0ICovXHJcblx0cHVibGljIHVybEhhc2g/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENTUyBjbGFzcyBuYW1lKHMpIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBQZXJtaXNzaW9uIGZsYWcgZm9yIGNyZWF0aW5nIG5ldyBlbnRyaWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5DcmVhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogUGVybWlzc2lvbiBmbGFnIGZvciB1cGRhdGluZyBleGlzdGluZyBlbnRyaWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5VcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogUGVybWlzc2lvbiBmbGFnIGZvciBkZWxldGluZyBlbnRyaWVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjYW5EZWxldGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRnVsbCBwYXRoIG9mIHRoZSBjdXJyZW50IHJvdXRlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50Um91dGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJhc2UgcGF0aCBvZiB0aGUgY3VycmVudCByb3V0ZSwgZXhjbHVkaW5nIHNwZWNpZmljIHBhcmFtZXRlcnMgb3Igc3ViLXBhdGhzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50QmFzZVJvdXRlPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBVUkwgdG8gbmF2aWdhdGUgYmFjayB0byBhZnRlciBzYXZpbmcgY2hhbmdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgcmV0dXJuVXJsPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGF1dGhlbnRpY2F0ZWQgdXNlci5cclxuXHQgKi9cclxuXHRwdWJsaWMgY3VycmVudFVzZXI6IEF1dGhVc2VyID0gQXV0aEhlbHBlci51c2VyO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgYWRtaW4gcHJpdmlsZWdlcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5BZG1pbmlzdHJhdG9yKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGNsaWVudCBhZG1pbiBwcml2aWxlZ2VzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0NsaWVudEFkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkNsaWVudEFkbWluaXN0cmF0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgZGVwYXJ0bWVudCBhZG1pbiBwcml2aWxlZ2VzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0RlcGFydG1lbnRBZG1pbiA9IEF1dGhIZWxwZXIuaGFzUm9sZShHbG9iYWxSb2xlcy5EZXBhcnRtZW50QWRtaW5pc3RyYXRvcik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZXIgZm9yIHJlbG9hZCBhY3Rpb25zLCB1c2VmdWwgZm9yIHJlZnJlc2hpbmcgZGF0YS5cclxuXHQgKi9cclxuXHRAT3V0cHV0KClcclxuXHRwdWJsaWMgcmVsb2FkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBzZXR0aW5nIHRoZSBkb2N1bWVudCdzIHRpdGxlLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0aXRsZVNlcnZpY2U6IFRpdGxlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBkaXNwbGF5aW5nIHNuYWNrIGJhciBub3RpZmljYXRpb25zLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzbmFja0JhclNlcnZpY2U6IE1hdFNuYWNrQmFyO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBkaXNwbGF5aW5nIGNvbmZpcm1hdGlvbiBhbmQgcHJvbXB0IGRpYWxvZ3MuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGRpYWxvZ1NlcnZpY2U6IFZkRGlhbG9nU2VydmljZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3Igb3BlbmluZyBtb2RhbCBkaWFsb2dzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZztcclxuXHJcblx0LyoqXHJcblx0ICogU2VydmljZSBmb3IgbWFuYWdpbmcgYnJvd3NlciBsb2NhdGlvbiBhbmQgaGlzdG9yeS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbG9jYXRpb246IExvY2F0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBJZiB0cnVlLCBzZXRzIGEgVVJMIGhhc2ggZm9yIG5hdmlnYXRpb24gc3RhdGUuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFVybEhhc2g6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBRdWVyeSBsaXN0IGZvciBhY2Nlc3NpbmcgZXhwYW5zaW9uIHBhbmVsIGVsZW1lbnRzIGFzIERPTSByZWZlcmVuY2VzLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oTWF0RXhwYW5zaW9uUGFuZWwsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG5cdHByb3RlY3RlZCBtYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/OiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFF1ZXJ5IGxpc3QgZm9yIGFjY2Vzc2luZyBNYXRFeHBhbnNpb25QYW5lbCBjb21wb25lbnQgcmVmZXJlbmNlcy5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKE1hdEV4cGFuc2lvblBhbmVsKVxyXG5cdHByb3RlY3RlZCBtYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD86IFF1ZXJ5TGlzdDxNYXRFeHBhbnNpb25QYW5lbD47XHJcblxyXG5cdC8qKlxyXG5cdCAqIFN1YnNjcmlwdGlvbnMgZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzLCBtYW5hZ2VkIHRvIGF2b2lkIG1lbW9yeSBsZWFrcy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgbWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGUgYSBiZWVwIGF1ZGlvIG9iamVjdCBhbmQgbG9hZCBhIHNvdW5kIGZpbGUgZnJvbSBhIGRhdGEgVVJMLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBiZWVwQXVkaW8gPSBuZXcgQXVkaW8oXCJkYXRhOmF1ZGlvL3dhdjtiYXNlNjQsLy91UVJBQUFBV01TTHdVSVlBQXNZa1hnb1F3QUVhWUxXZmtXZ0FJMHdXcy9JdEFBQUdEZ1l0QWdBeU4rUVdhQUFpaHdNV200RzhRUVJEaU1jQ0JjSDNDYytDRHYvN3hBNFR2aDlSei95OFFBREJ3TVdnUUFaRy9JTE5BQVJRNEdMVGNEZUlJSWh4R09CQXVEN2hPZkJCMy85NGdjSjN3K281LzVlSUFJQUFBVndXZ1FBVlEyT1JhSVF3RU1BSmlEZzk1RzRuUUw3bVFWV0k2R3dSY2ZzWkFjc0trSnZ4Z3hFanpGVWdmSG9TUTlRcTdLTndxSHd1QjEzTUE0YTFxL0RtQnJIZ1BjbWppR29oLy9Fd0M1bkdQRW1TNFJjZmtWS09oSmYrV09nb3hKY2xGejNrZ24vL2RCQSt5YTFHaHVyTm44emIvLzlOTnV0TnVoejMxZi8vLy85dnQvLy96K0lkQUVBQUFLNExRSUFLb2JISXRFSVlDR0FFeEJ3ZThqY1RvRjl6SUtyRWREWUl1UDJNZ09XRlNFMzR3WWlSNWlxUVBqMEpJZW9WZGxHNFZENFhBNjdtQWNOYTFmaHpBMWp3SHVUUnhEVVEvL2lZQmN6akhpVEpjSXVQeUtsSFFrdi9MSFFVWWt1U2k1N3lRVC8vdWdnZlpOYWpRM1ZteitadC8vK21tM1dtM1E1NzZ2Ly8vLyszMi8vLzUvRU9nQUFBRFZnaFFBQUFBQS8vdVFaQVVBQjFXSTBQWnVnQUFBQUFvUXdBQUFFazNuUmQycUFBQUFBQ2lEZ0FBQUFBQUFCQ3FFRVFSTENnd3BCR01sSmtJejhqS2hHdmo0azZqelJucWFzTktJZW9oNWdJN0JKYUMxQTFBb05CakpnYnlBcFZTNElEbFpnRFU1V1VBeEVLRE5tbUFMSHpacDBGa3oxRk1UbUdGbDFGTUV5b2RJYXZjQ0FVSERXcktBSUE0YWEyb0NnSUxFQnVwWmdIdkFoRUJjWjZqb1FCeFM3NkFnY2NyRmxjekJ2S0xDMFFJMmNCb0NGdmZUREFvN2VvT1FJbnFEUEJ0dnJERVpCTllONXh3Tnd4UVJmdzhaUTV3UVZMdk84T1lVK21IdkZMbERoMDVNZGc3QlQ2WXJSUHBDQnpuTUIyci8veEtKanl5T2grY0ltcjIvNGRvc2N3RDZuZVpqdVpSNEFnQUFCWUFBQUFCeTF4Y2RRdHhZQllZWmRpZmtVRGd6elhhWG45OFowb2k5SUxVNW1CakZBTm1Sd2xWSjMvNmpZREFteGFpREczLzZ4alFRQ0NLa1JiLzZrZy93VytrU0o1Ly9yTG9ia0xTaUttcVAvMGlrSnVEYVNhU2YvNkppTFlMRVluVy8ra1hnMVdSVkpMLzlFbVExWVpJc3YvNlF6d3k1cWs3Lyt0RVUwbmtsczMveklVTVBLTlgvNnlaTGYra0ZnQWZnR3lMRkFVd1kvL3VRWkFVQUJjZDVVaU5QVlhBQUFBcEFBQUFBRTBWWlFLdzlJU0FBQUNnQUFBQUFWUUl5Z0lFbFZyRmtCUytKaGkrRUF1dStsS0FrWVVFSXNtRUFFb01lRG1DRVRNdmZTSFRHa0Y1UldIN2t6L0VTSFdQQXEva2NDUmhxQnRNZG9rUGRNN3ZpbDdSRzk4QTJzYzd6TzZadlRkTTdwbU9VQVpUbkpXK05YeHFtZDQxZHFKNm1MVFh4clBwblY4YXZhSWY1U3ZMN3BuZFB2UHBuZEpSOUt1dThmZVB2dWl1aG9yZ1dqcDdNZi9QUmp4Y0ZDUERrVzMxc3Jpb0NFeGl2djlsY3dLRWFIc2YvN293MkZsMVQvOVJrWGdFaFlFbEFvQ0xGdE1Bcnh3aXZESkorYlIxSFRLSmRsRW9URUxDSXFnRXdWR1NRK2hJbTBOYks4V1hjVEVJMFVQb2EyTmJHNHkySzAwSkVXYlphdkpYa1lhcW85Q1JIUzU1RmNaVGpLRWszTktvQ1lVblNRMHJXeHJaYkZLYktJaE9LUFplMWNKS3paU2FRckl5VUxIRFptVjVLNHh5U3NEUktXT3J1YW5HdGpMSlhGRW13YUliRExYMGhJUEJVUVBWRlZrUWtEb1VOZlNvRGdRR0tQZWtveGVHekE0RFV2bm40Ynh6Y1pydEp5aXBLZlBOeTV3Kzlsblh3Z3FzaXlITmVTVnBlbXc0YldiOXBzWWVxLy91UVpCb0FCUXQ0eU1WeFlBSUFBQWtRb0FBQUh2WXBMNW02QUFnQUFDWERBQUFBRDU5amJsVGlyUWU5dXBGc21aYnBNdWR5N0x6MVgxRFlzeE9PU1dwZlBxTlgyV3FrdEswRE12dUd3bGJOajQ0VGxlTFBRK0dzZmIrR09XT0tKb0lyV2IzY0lNZWVPTjZsejJ1bVRxTVhWOE1qMzB5V1Bwam9TYTl1aks4U3llSlA1eTVtT1cxRDZodkxlcGV2ZUVBRURvMG1nQ1JDbE9FZ0FOdjNCOWE2ZmlrZ1VTdS9EbUFNQVRyR3g3bm5nNXA1aWltUE5ac2ZRTFlCMnNETElrelJLWk9IR0FhVXlEY3BGQlNMRzlNQ1FBTGdBSWdRczJZdW5Pc3pMU0F5UVlQVkMyWWRHR2VIRDJkVGRKazFwQUhHQVdEam5rY0xLRnltUzNSUVpUSW56eVNvQndNRzBRdWVDM2dNc0NFWXhVcWxyY3hLNmsxTFFRY3NteVllUVBkQzJZZnVHUEFTQ0JrY1ZNUVFxcFZKc2h1aTF0a1hRSlFWME9YR0FaTVhTT0VFQlJpclhiVlJRVzd1Z3E3SU03clBXU1p5RGxNM0l1TkVreHpDT0owbnkyVGhOa3lSYWkxYjZldi8vM2R6Tkd6TmIvLzR1QXZIVDVzVVJjWkNGY3VLTGhPRnM4bUxBQUVBdDRVV0FBSUFCQUFBQUFCNHFiSG8wdElqVmtVVS8vdVFaQXdBQmZTRnozWnFRQUFBQUFuZ3dBQUFFMUhqTXAycUFBQUFBQ1pEZ0FBQUQ1VWtURTFVZ1pFVUV4cVl5bk4xcVp2cUlPUkVFRm1CY0pRa3dkeGlGdHcwcUVPa0dZZlJEaWZCdWk5TVFnNFFBSEFxV3RBV0hvQ3h1MVlmNFZmV0xQSU0ybUhERnNiUUVWR3d5cVFvUWN3bmZIZUlrTnQ5WW5raWFTMW9penljcUpyeDRLT1FqYWhaeFdiY1pnenRqMmM0OW5LbWtJZDQ0UzcxajBjOGVWOXlESzZ1UFJ6eDVYMThlRHZqdlE2eUtvOVpTUzZsLy84ZWxlUEsvTGYvL0lJbnJPRi9GdkRvQURZQUdCTUdiN0Z0RXJtNU1YTWxtUEFKUVZnV3RhN1p4MmdvKzh4SjBVaUNiOExISGRmdFd5TEpFMFFJQUlzSStVYlh1NjdkWk1qbWdER0NHbDFIK3ZwRjROU0Rja1NJa2s3VmQrc3hFaEJRTVJVOGovMTJVSVJoelNhVWRRK3JRVTVrR2VGeG0raGIxb2g2cFdXbXYzdXZtUmVEbDBVbnZ0YXBWYUl6bzFqWmJmL3BENkVsTHFTWCtyVW1PUU5wSkZhL3Irc2E0ZS9wQmxBQUJvQUFBQUEzQ1VnU2hMZEdJeHNZN0FVQUJQUnJnQ0FCZER1UTVHQzdEcVBRQ2diYkpVQW9SU1VqK05JRWlnMFlmeVdVaG8xVkJCQkEvL3VRWkI0QUJaeDV6Zk1ha2VBQUFBbXdBQUFBRjVGM1AwdzlHdEFBQUNmQUFBQUF3TGhNRG1BWVdNZ1ZFRzFVMEZJR0NCZ1hCWEF0Zk1IMTAwMDBFRUVFRUVDVUJZbG4wM1RUVGROQkRab3BvcFl2clRUZE5hMzI1bUltTmczVFRQVjlxM3BtWTB4b082YnYzcjAweStJREdpZC85YWFhWlRHTXVqOW1wdTlNcGlvMWRYcnI1SEVSVFpTbXFVMzZBM0N1bXpOLzlSb2J2L1h4NHY5aWprU1JTTkxRaEFXdW1hcDgyV1JTQlVxWFN0Vi9ZY1MrWFZMblNTK1dMRHJvcUFyRmtNRXNBUytlV21yVXpyTzBvRW1FNDBSbE1aNStPRElrQXlLQUdVd1ozbVZLbWNhbWNKbk1XMjZNUlBnVXc2aitMa2h5SEdWR1lqU1VVS05wdUpVUW9PSUF5RHZFeUc4UzV5Zks2ZGhaYzBUeDFLSS9ndmlLTDZxdnZGczErYld0YXo1OHVVTm5yeXE2a3Q1UnpPQ2tQV2xWcVZYMmEvRUVCVWRVMUtyWExmNDBHb2lpRlhLLy8vcXBvaURYck9ncURSMzhKQjBidzdTb0wrWkI5bzFSQ2tRalEyQ0JZWktkLytWSnhaUlJabHFTa0tpd3MwV0Z4VXlDd3NLaU15N2hVVkZoSWFDck5Rc0trVElzTGl2d0tLaWdzajhYWWx3dC9XS2kyTjRkLy91UVJDU0FBalVSTklIcE1aQkdZaWFRUFNZeUFBQUJMQUFBQUFBQUFDV0FBQUFBcFVGL01nKzBhb2hTSVJvYkJBc01sTy8vS2s0c29vc3kxSlNGUllXYUxDNHFaQllXRlJHWmR3cUtpd2tOQlZtb1dGU0prV0Z4WDRGRlJRV1IrTHNTNFcvckZSYi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1ZFRkhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBVTI5MWJtUmliM2t1WkdVQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNakF3TkdoMGRIQTZMeTkzZDNjdWMyOTFibVJpYjNrdVpHVUFBQUFBQUFBQUFDVT1cIik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBhIHdhcm4gYXVkaW8gb2JqZWN0IGFuZCBsb2FkIGEgc291bmQgZmlsZSBmcm9tIGEgZGF0YSBVUkwuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHdhcm5BdWRpbyA9IG5ldyBBdWRpbyhcImRhdGE6YXVkaW8vbXAzO2Jhc2U2NCwvL3VReEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBV0dsdVp3QUFBQThBQUFBSEFBQUtZd0FwS1NrcEtTa3BLU2twS1NrcEtVMU5UVTFOVFUxTlRVMU5UVTFOZDNkM2QzZDNkM2QzZDNkM2QzZUNnb0tDZ29LQ2dvS0Nnb0tDZ29LeXNyS3lzckt5c3JLeXNyS3lzdGJXMXRiVzF0YlcxdGJXMXRiVy8vLy8vLy8vLy8vLy8vLy8vLzhBQUFBNVRFRk5SVE11TVRBd0FxVUFBQUFBTG40QUFCUkdKQU1mUWdBQVJnQUFDbU9LbHVRYkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBLy91QXhBQUFDVlJMWk5TUmdBUENRaXozTTBBQUFJQUFyQW1DWlBwQUNBQUFRTVZEUE5HalJ6TC9pSWdHTGYrdTRnRUhSQUQ0UDRPQWdHTUh3ZkIvVUNBWTRQaC9nZzcwY1FBL3djREdvSHcvbEFRZHhPL2lCM0I4UDZnUWQvejRBQUFCYUxVa2xlS1lBQUFBQUNSd0Z3d0VaWEM4NVJpK28rWlhKME91Q1hnb0JVRFFYUEMrNFpHQlEwYmlVRHdub0Nvd0w2amZBcVJMb2dvQmlraHFKUkpRREpCQk96azhCa3c2UllFOGdPR0RoU0JNRUE0Q0xsSTA4VndjYUpSQW1RS0VRYk5ETERNa0FFK0pKQzhMcERnNEZUQjFDMFRvTEJDZUprUWlFR01zblNYVWtRT2tNNGZxSE1kUkpGeVpEMldrVkVpYk9rUmV0WjBkMmRJTk5HTEJCRFZSUktocXNvbHRKSXZyUmxrcklGbEIySlhtaGJrYXRKWk1rZ2tzbWtNbjJXaWNTbVpQc282bGNtWHlaUExVY2FpVkVsRlpTS2lYWkVzRnhGaWlndFNSVS8vLy9hb3RmLy8vb3FMTHFxWUFSbUJCREhRQWE2LzdEWEpsSUp6WExGV2N3ODFxTFAxWmVtbi8rM0RFRGdCUVlhMXAzWmFBQ2pFMXJQcXcwQUZkRVNBTVJnUzZlcVNNcGdKRVRrMVdnbXBhNngrQ3hLTm5kV3RFSGt2MGx1em9Kb0NxRzJTS0NMMVhkQVM4bFR5MUw5RlE2SHY2TWtUNkx0MUpxSnhkUi8wQi9NZjlsbEJCZjdPZVJiK3N5S0pyYjY1V2RkdnJuVFJTbS9UTDZMZjdsaDcrdVlyV2d3QXpjRVFGbGdaa2R0dURjRG9rSk83N2J5dUg0YmpjRHZ4VVhnWFJFc0RuampUTmp0VEY4QlVuVnU2MVhUWVFnTnNocDN1dFJ3dUFuQVg4MloxM3NjTVFoalpOZDEzU2NMYVBkYnJxdlFLaVJOMS9WWWFIUnV1NjZSd1pac3YxVXBSTDkxK3lsRUZObDMxV0hjYnQvWTRYejY3NjlpUVRkMlgyVXNnSS8xeTZaM1g5UmthbTYvcXNWS2JxQUFBSklCbE1ZNFVBQUFBckNCOUtpQ3NYWE1lNkhxV0lzSzBodXR5Q0FDTXB3cWhiY3dBc0ZnU3hCQTFCc3lMZS8vdUF4QmdBSHZJUlk1bXFBQUdSREdxam5tQUFGakFHa1RHSVh6QTRvRU5KRTJBSUFqcUh3TFNCbVNCU1BxQUthbFFjQTNBK1l0RVZEOGdVVGtzY1VMV0RjNHBJa0VGK0xDUkVpNU5CdlpxWkMwRGJHY0UvTGlLRGFGOGlmSndVa1M1eFFub21FVGd5ZU9XUzJQQ0JnTE5QVmpMRlJVZ3g1SXBEVEx4ak1obWM2UUtUekdJeXpKbUl6SnZIVVRDSmtROUZTeDlGeVNoZngvNWZMU1pTSWtmTUIwbXhvbVFFcXBHUTd5OG92TXlSSGsra21SeGhrNmZ5QkpUeE5aWUo4M1JJRWZUVU9haW80UlhVUkkyTWo1aC8vLy9uU1cvLy8vUW5TUlFDcEFBa1NMYUxhSnFTMVpQNFc0TlVYRllUeUhJY3JrOGN4MVlEQUpKeUpHZTFlU0pIRGlVLy9zY0RBSkZpU1FkTEJRR2p3S2dyZ3JQWU5BMG9HZzZWQmJFb0t2QlhrbEExcVBGUTNsUVZXQ3ZCV0RRZDZ6c1NncmlXV0Rtb0dwNzd2TEJ5Ly84dGZsMFpsNy85Zi8vLy8vLy8vMzB5N2N5WnFlRmwxeVlVWlFFd3VHTmFJRS8vLy8vLy8vLy8vLy8vK3hERUZnUEVWYkVRQUFSK3lLUTBZZ0tBSUFILy90M3AvN3MrMVdST245Zi8vLy92WDZWZGpsYmM3VGxLc2pobEVrQW9sWWpRY0RnWTVrOEZRUVVBUVNBTHRNQVFjZElBSUVtT2VEQklGREFBc3dkQVpzcGJaS3hIeUVEQVNaSUZoMkJPNE5qaERmLzdrTVFaZ0IrcUVWdTV1cEFTd1RYc003TVFBUU1hQkVBWUFvTTRCd2JETDRzUUdIajRCMFF6QU1MWW5DcVhpQ0VFRkNBM2dLb0FRQkMvd0djVW1Bd0hSNEl1bzBURndFeVJOTXZoZkVEQVFqQUlFQXg0Z0RxUVBKbTV1WEdJSVloK1FNQzVBUmNvaklGZ3ovSW1Td3k1WEl1YkdnZjRHOG9HRWdBQ3dHUkhVQmdrSC84bkdjcUY4M0w1dXdka1hLUThDQUJMd3BJUFpEYWtmL3VoTkNiSW1PZVQ3a1RVb2RRV0tER2tGREZpaWFIS0M5QkVmLy9RV2JtWmZjdnBNMnMzYU5VY1NLSTN5a1hpTGlsMlNLSTVILy8vL3VYMGtQLy8velpRdmlkUUFiZ0FDRUFCakthanRJSWp0SUNXV3V1NURFUFB0S3M0OXBSTUkyRndrc3pPczRxVUFJd1VSWmc2S1MwMmlNUkFZaXhzdDBsNXE0YU9VelZBMk9xYzBTTElha0dOQ2dYakd0Q2l4d1IyVHBWZGFyc3Baa0ovTmxwWFpTTXpIZ2tpZHJaMnJRTVJoRjVPN0tXdGpNWlVuMGsycFZKeUhFUktLRktwZDJHNFgyZGxMdXl5SEY4dnNreWs2S1N4eURJMlpTck90UmlTQmFXcXpyVWlZRTRibGFodXkxSkR3WFZMdldwMENlS0JxSVh3RFRCa0pDQURkYTBmYVUxVVZwc051UC83Y01RSWdGSmRyV1dOUFcrS1RiWXM4ckRRQU9DODh0bzVQS3AvUzJTNkIzSDFhTFRFS1NzTUdlZlZxNis5NHhoaERjZzV6dlZNVzFVZUJqdXZuUDM4NWpFVGZPZTdtZFVCeVE2MVJIZHpKV0lKckkvNnBBVXFXcUkrcVlVcUkvZlAwd1dQdTdtUHJLaC9VanU1bnV4N2UyNy80bHcxb1JGVlV6dU0ySHVmcW9oaENuMlIxWDhrcWw3bWU3aUZEcDY1Lysza0RDblFDbEVRUjMzM3R1Z3dBSHREVnUvQTlDNWJXNld6UllPd0pSR0hEbGt1dGFhWmltYUFUVVpadWJwS3V1Z0o0RlZWOVNuU0JMSUhrakJCM1V3N3dSOE5sQTZuWmExdVpCMFBtakw5bGs4ZUNsS3N2WTZPTThoK3BBNk5oeFY2dVpsTTFkbVh1cFRrSTZ1L1hRSlV1MlpkbVhNeVdPdjYxMkpGVHVwZHRSZ2lnNnIxWFNLMERkMWU2akEzUExYWlNycU1ITkdWQUF3UVFZaUFBQUFBQUFBaVFnei8rNERFQndBZFpkbGZXYW1BQVZFVW81ZVlVQUNKam1Gd01CY0FXMWFDSjRLSUZubmliRURuMGhHVktnMGpBVTBzUTBVbVE0ZHdxQUR2RjRMcXc0WXhCalVUVmFRTGpQbGNPakF0Z1pOakU0T2NXUWFFQTBQSE5LNGZBRi9BVkVJU0RQbkNCRll5SjRSVWFhVENuQ3FEMnhjUzQ0aGlGRkZwaWhXSC9LdFkyUzRSZ2owK1JReEVwRTBvdkY0eU5sa3pMWXB1aUpJeGVNelVWc2NKd2ZST21uUlltcGtYcEhqdVZGMXVPa2x5S0RwTFNKdUxwTXdJSVBvbWtrdEd0aktxb1doTEcrY25pQlprTnMwSW9WelZFdmp5VXl3T1FUSk1HaG9SWXlVK2l5MFRMTWxYa29TMy8vLzVmTVNlUi8vYUNvRW9CYU1qNkV4SnF3UWdKS0JDQWtGVFpKUFlESmdHQUlEQ3lpSWRLLzBNYVoxS1ZCSVBNSkI0eWxaRE1ZV00vLzBOVEtXWVBNRFE4TkEwQWdhLzRLbGc0RFN6b2lVSGYrZExIazNDS2Uvd1Zjbzl4RXBNUVUxRk15NHhNRENxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcWc9PVwiKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5pdGlhbGl6ZXMgc2VydmljZXMgYW5kIGFwcGxpY2F0aW9uIHNldHRpbmdzLCBzZXRzIHVwIGNvbnRleHQgaGVscGVycywgXHJcblx0ICogYW5kIGluaXRpYWxpemVzIHRoZSBlZGl0b3Igd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHJvdXRlIC0gQWN0aXZhdGVkUm91dGUgaW5zdGFuY2UgZm9yIGFjY2Vzc2luZyByb3V0ZSBwYXJhbWV0ZXJzIGFuZCBkYXRhLlxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiAtIENoYW5nZURldGVjdG9yUmVmIGluc3RhbmNlIGZvciBtYW51YWxseSB0cmlnZ2VyaW5nIGNoYW5nZSBkZXRlY3Rpb24uXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IocHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSwgcHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgVGl0bGUgc2VydmljZSAqL1xyXG5cdFx0dGhpcy50aXRsZVNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoVGl0bGUpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGRpYWxvZyBzZXJ2aWNlIGZvciBzaG93aW5nIG1vZGFscyAqL1xyXG5cdFx0dGhpcy5kaWFsb2dTZXJ2aWNlID0gdGhpcy5nZXRTZXJ2aWNlKFZkRGlhbG9nU2VydmljZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgTWF0ZXJpYWwgZGlhbG9nIGZvciBtYW5hZ2luZyBkaWFsb2dzICovXHJcblx0XHR0aGlzLmRpYWxvZyA9IHRoaXMuZ2V0U2VydmljZShNYXREaWFsb2cpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIG1lZGlhIHNlcnZpY2UgZm9yIG1lZGlhIHF1ZXJpZXMgYW5kIGJyb2FkY2FzdCAqL1xyXG5cdFx0dGhpcy5tZWRpYSA9IHRoaXMuZ2V0U2VydmljZShWZE1lZGlhU2VydmljZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgc25hY2tiYXIgc2VydmljZSBmb3Igbm90aWZpY2F0aW9ucyAqL1xyXG5cdFx0dGhpcy5zbmFja0JhclNlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoTWF0U25hY2tCYXIpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIHJvdXRlciBzZXJ2aWNlIGZvciBuYXZpZ2F0aW9uICovXHJcblx0XHR0aGlzLnJvdXRlciA9IHRoaXMuZ2V0U2VydmljZShSb3V0ZXIpO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzICovXHJcblx0XHR0aGlzLmFwcFNldHRpbmcgPSB0aGlzLmdldFNlcnZpY2UoQXBwU2V0dGluZyk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgbG9jYXRpb24gc2VydmljZSBmb3IgVVJMIG1hbmlwdWxhdGlvbiAqL1xyXG5cdFx0dGhpcy5sb2NhdGlvbiA9IHRoaXMuZ2V0U2VydmljZShMb2NhdGlvbik7XHJcblxyXG5cdFx0LyogU2V0IHVwIGNvbnRleHQgaGVscGVycyB3aXRoIHJvdXRlIGFuZCBhcHBsaWNhdGlvbiBzZXR0aW5ncyAqL1xyXG5cdFx0Q29udGV4dEhlbHBlci5hY3RpdmF0ZWRSb3V0ZSA9IHJvdXRlO1xyXG5cdFx0Q29udGV4dEhlbHBlci5yb3V0ZXIgPSB0aGlzLnJvdXRlcjtcclxuXHRcdENvbnRleHRIZWxwZXIuYXBwU2V0dGluZyA9IHRoaXMuYXBwU2V0dGluZztcclxuXHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBlZGl0b3Igd2l0aCBkZWZhdWx0IGNvbmZpZ3VyYXRpb25zICovXHJcblx0XHR0aGlzLmluaXRFZGl0b3IoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGRhdGEtYm91bmQgcHJvcGVydGllcyBvZiBhIGRpcmVjdGl2ZSBhcmUgaW5pdGlhbGl6ZWRcclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEdldCBtZW51IGl0ZW1zIGZyb20gcm91dGUgc25hcHNob3QgKi9cclxuXHRcdHZhciBtYWluUm91dGUgPSB0aGlzLmdldE1haW5Sb3V0ZSh0aGlzLnJvdXRlLnNuYXBzaG90KTtcclxuXHRcdGlmIChtYWluUm91dGUpIHtcclxuXHRcdFx0dGhpcy5tZW51ID0gbWFpblJvdXRlLmRhdGEubWVudTtcclxuXHRcdFx0dGhpcy5zZXRUaXRsZXMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcHJvamVjdCBuYW1lICYgZGVidWcgbW9kZSAqL1xyXG5cdFx0dGhpcy5wcm9qZWN0TmFtZSA9IHRoaXMuYXBwU2V0dGluZy5wcm9qZWN0TmFtZTtcclxuXHRcdHRoaXMuZGVidWcgPSB0aGlzLmFwcFNldHRpbmcuZGVidWcgPz8gZmFsc2U7XHJcblxyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIHVzZXIgaGFzIHBlcm1pc3Npb24gdG8gY3JlYXRlLCB1cGRhdGUsIGFuZCBkZWxldGUgKi9cclxuXHRcdHRoaXMuY2FuQ3JlYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdDcmVhdGUnKTtcclxuXHRcdHRoaXMuY2FuVXBkYXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdVcGRhdGUnKTtcclxuXHRcdHRoaXMuY2FuRGVsZXRlIHx8PSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKCdEZWxldGUnKTtcclxuXHJcblx0XHQvKiBHZXQgdGhlIGhhc2ggZnJvbSB0aGUgVVJMICovXHJcblx0XHR0aGlzLnJvdXRlLmZyYWdtZW50LnN1YnNjcmliZSgoZnJhZ21lbnQ6IHN0cmluZyB8IGFueSkgPT4gdGhpcy51cmxIYXNoID0gZnJhZ21lbnQpO1xyXG5cclxuXHRcdC8qIENoZWNrIHBlcm1pc3Npb25zIGJhc2VkIG9uIHRoZSByb3V0ZSAqL1xyXG5cdFx0aWYgKHRoaXMucm91dGUucGFyZW50KSB7XHJcblx0XHRcdHRoaXMucm91dGUucGFyZW50LnVybC5zdWJzY3JpYmUoKHVybDogVXJsU2VnbWVudFtdKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5jbGFzc05hbWUgPz89IHVybC5sZW5ndGggPyB1cmxbMF0ucGF0aC5yZXBsYWNlKC8oLiopcyQvLCAnJDEnKS5yZXBsYWNlKC9eLi8sICh1cmxbMF0ucGF0aFswXSB8fCAnJykudG9VcHBlckNhc2UoKSkgOiAnJztcclxuXHRcdFx0XHR0aGlzLmNhbkNyZWF0ZSA9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYENyZWF0ZSR7dGhpcy5jbGFzc05hbWV9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5VcGRhdGUgPSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBVcGRhdGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHRcdHRoaXMuY2FuRGVsZXRlID0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgRGVsZXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogU2V0IHRoZSBjdXJyZW50IHJvdXRlIGFuZCBiYXNlIHJvdXRlICovXHJcblx0XHR0aGlzLmN1cnJlbnRSb3V0ZSA9IHdpbmRvdy5idG9hKHRoaXMucm91dGVyLnVybCk7XHJcblx0XHR0aGlzLmN1cnJlbnRCYXNlUm91dGUgPSB0aGlzLnJvdXRlci51cmw/LnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0LyoqXHJcblx0XHQgKiBTZXQgdGhlIHBhZ2UgdGl0bGUgYmFzZWQgb24gdGhlIG5hdmlnYXRpb24gZW5kIGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoeCA9PiB7XHJcblx0XHRcdGxldCBuYXZpZ2F0aW9uRW5kID0gKHggYXMgU2Nyb2xsKT8ucm91dGVyRXZlbnQgYXMgTmF2aWdhdGlvbkVuZDtcclxuXHRcdFx0aWYgKG5hdmlnYXRpb25FbmQpIHtcclxuXHRcdFx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudFJvdXRlID0gd2luZG93LmJ0b2EobmF2aWdhdGlvbkVuZC51cmwpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHQvKiBSZXRyaWV2ZSB0aGUgcmV0dXJuIFVSTCBpZiBhbnkgZnJvbSB0aGUgcXVlcnkgcGFyYW1ldGVycyAqL1xyXG5cdFx0dGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoeCA9PiB0aGlzLnNldFJldHVyblVybCh4LnJldHVyblVybCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgYSBjb21wb25lbnQncyB2aWV3IGhhcyBiZWVuIGZ1bGx5IGluaXRpYWxpemVkXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0LyogQnJvYWRjYXN0IHRvIGFsbCBsaXN0ZW5lciBvYnNlcnZhYmxlcyB3aGVuIGxvYWRpbmcgdGhlIHBhZ2UgKi9cclxuXHRcdHRoaXMubWVkaWEuYnJvYWRjYXN0KCk7XHJcblxyXG5cdFx0LyogU2V0IHBhZ2UgdGl0bGVzICovXHJcblx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cclxuXHRcdC8qIFxyXG5cdFx0ICogRm9yY2UgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHRcdCAqIGhhdmUgZmluaXNoZWQgd2hlbiBgbmdBZnRlclZpZXdJbml0YCBpcyBleGVjdXRlZFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzIGlmIGVuYWJsZWQgKi9cclxuXHRcdGlmICh0aGlzLmhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlcykge1xyXG5cdFx0XHR0aGlzLm9uRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZWxvYWRzIHRoZSBjdXJyZW50IHBhZ2Ugb3IgY29tcG9uZW50LlxyXG5cdCAqIFxyXG5cdCAqIFRoaXMgbWV0aG9kIG5hdmlnYXRlcyB0ZW1wb3JhcmlseSB0byB0aGUgcm9vdCBVUkwgYW5kIHRoZW4gXHJcblx0ICogbmF2aWdhdGVzIGJhY2sgdG8gdGhlIGN1cnJlbnQgVVJMIHRvIGVmZmVjdGl2ZWx5IHJlZnJlc2ggdGhlIHBhZ2Ugb3IgY29tcG9uZW50LlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIGNhbGxiYWNrIC0gQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIG5hdmlnYXRpb24gaXMgc3VjY2Vzc2Z1bCxcclxuXHQgKiAgICAgICAgICAgICAgICAgICByZWNlaXZlcyB0aGUgY3VycmVudCBVUkwgYXMgYW4gYXJndW1lbnQuXHJcblx0ICovXHJcblx0cHVibGljIHJlbG9hZFBhZ2UoY2FsbGJhY2s/OiAoY3VycmVudFVybDogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRsZXQgY3VycmVudFVybCA9IHRoaXMucm91dGVyLnVybDtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy8nLCB7IHJlcGxhY2VVcmw6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcblx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoY3VycmVudFVybCwgeyByZXBsYWNlVXJsOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG5cdFx0XHRcdC8qIEV4ZWN1dGUgdGhlIGNhbGxiYWNrIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRjYWxsYmFjayhjdXJyZW50VXJsKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZXMgYmFjayB0byB0aGUgcmV0dXJuIFVSTCBpZiBpdCBleGlzdHMuXHJcblx0ICovXHJcblx0cHVibGljIG5hdmlnYXRlVG9SZXR1cm5VcmwoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0LyogUGFyc2UgdGhlIHJldHVybiBVUkwgaW50byBhIFVybFRyZWUgb2JqZWN0ICovXHJcblx0XHRcdGxldCB1cmxUcmVlOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yZXR1cm5VcmwpO1xyXG5cclxuXHRcdFx0LyogTmF2aWdhdGUgdG8gdGhlIHJldHVybiBVUkwgKi9cclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCh1cmxUcmVlLnRvU3RyaW5nKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyogXHJcblx0ICogRm9yY2VzIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xyXG5cdFx0LyogVHJpZ2dlciBjaGFuZ2UgZGV0ZWN0aW9uICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgdGhlIHJldHVybiBVUkwgYWZ0ZXIgZGVjb2RpbmcgaXQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIC0gVGhlIGVuY29kZWQgcmV0dXJuIFVSTCB0byBzZXQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFJldHVyblVybChyZXR1cm5Vcmw6IHN0cmluZyk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0LyogRGVjb2RlIGFuZCBzZXQgdGhlIHJldHVybiBVUkwsIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgKi9cclxuXHRcdFx0dGhpcy5yZXR1cm5VcmwgPSByZXR1cm5VcmwgPyBkZWNvZGVVUklDb21wb25lbnQoYXRvYihyZXR1cm5VcmwpKSA6IHVuZGVmaW5lZDtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdC8qIEhhbmRsZSBlcnJvciBzaWxlbnRseSAqL1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlzdGVuIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkV4cGFuc2lvblBhbmVsQ2hhbmdlcygpOiB2b2lkIHtcclxuXHRcdC8qIExpc3RlbiBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/LmNoYW5nZXMuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHQvKiBVbnN1YnNjcmliZSBmcm9tIG9sZCAnb3BlbmVkJyBhbmQgJ2Nsb3NlZCcgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHggPT4geC51bnN1YnNjcmliZSgpKTtcclxuXHJcblx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdFx0LyogR2V0IHRoZSBwYW5lbCBlbmRzIHdpdGggdGhlIElEICduZXcnICovXHJcblx0XHRcdHZhciBuZXdFeHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50Py5pZD8uZW5kc1dpdGgoJy5uZXcnKSkgPz8gLTE7XHJcblx0XHRcdGlmIChuZXdFeHBhbnNpb25QYW5lbEluZGV4ID49IDApIHtcclxuXHRcdFx0XHQvKiBDbG9zZSBhbGwgcGFuZWxzICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uZmlyc3Q/LmFjY29yZGlvbj8uY2xvc2VBbGwoKTtcclxuXHJcblx0XHRcdFx0LyogT3BlbiB0aGUgbmV3IHBhbmVsICovXHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW25ld0V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblxyXG5cdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogRmluZCB0aGUgaW5kZXggb2YgdGhlIHBhbmVsIHdpdGggdGhlIHNwZWNpZmllZCBlbGVtZW50IElEICovXHJcblx0XHRcdFx0dGhpcy51cmxIYXNoPy5zcGxpdCgnLicpXHJcblx0XHRcdFx0XHQ/LnJlZHVjZSgoYWNjdW11bGF0b3I6IGFueSwgY3VycmVudFZhbHVlLCBpbmRleCkgPT4gYWNjdW11bGF0b3IuY29uY2F0KChpbmRleCA+IDAgPyAoYWNjdW11bGF0b3Iuc2xpY2UoLTEpLmpvaW4oJy4nKSArICcuJykgOiAnJykgKyBjdXJyZW50VmFsdWUpLCBbXSlcclxuXHRcdFx0XHRcdD8uZm9yRWFjaCgoaGFzaDogc3RyaW5nKSA9PiB7XHJcblx0XHRcdFx0XHRcdHZhciBleHBhbnNpb25QYW5lbEluZGV4ID0gdGhpcy5tYXRFeHBhbnNpb25QYW5lbEVsZW1lbnRRdWVyeUxpc3Q/LnRvQXJyYXkoKT8uZmluZEluZGV4KHggPT4geC5uYXRpdmVFbGVtZW50LmlkID09IGhhc2gpID8/IC0xO1xyXG5cdFx0XHRcdFx0XHRpZiAoZXhwYW5zaW9uUGFuZWxJbmRleCA+PSAwKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8udG9BcnJheSgpW2V4cGFuc2lvblBhbmVsSW5kZXhdPy5vcGVuKCk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyBmb3Igb3BlbmVkIHBhbmVscyAqL1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py5mb3JFYWNoKHkgPT4ge1xyXG5cdFx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLnB1c2goeS5vcGVuZWQuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0VXJsSGFzaCkge1xyXG5cdFx0XHRcdFx0XHQvKiBHZXQgdGhlIGlkIG9mIHRoZSBjdXJyZW50IG9wZW5lZCBwYW5lbCAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY3VycmVudFBhbmVsSWQgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZDtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgZnJhZ21lbnQ6IGN1cnJlbnRQYW5lbElkLCByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHQvKiBPdGhlcndpc2UgcmVtb3ZlIHRoZSBzZWdtZW50IGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRcdFx0XHRlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHRcdH0pKTtcclxuXHJcblx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgZm9yIGNsb3NlZCBwYW5lbHMgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5wdXNoKHkuY2xvc2VkLnN1YnNjcmliZShfID0+IHtcclxuXHRcdFx0XHRcdGlmICh0aGlzLnNldFVybEhhc2gpIHtcclxuXHRcdFx0XHRcdFx0LyogR2V0IHRoZSBpZCBvZiB0aGUgY3VycmVudCBvcGVuZWQgcGFuZWwgKi9cclxuXHRcdFx0XHRcdFx0dmFyIGN1cnJlbnRQYW5lbElkUGFydHMgPSB5Wydfdmlld0NvbnRhaW5lclJlZiddPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50Py5pZD8uc3BsaXQoJy4nKTtcclxuXHJcblx0XHRcdFx0XHRcdC8qIElmIHRoZSBwYW5lbCBJRCBpcyBzZXQsIHNldCBpdCBhcyB1cmwgc2VnbWVudCAoaGFzaCkgKi9cclxuXHRcdFx0XHRcdFx0aWYgKGN1cnJlbnRQYW5lbElkUGFydHMubGVuZ3RoID4gMSkge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IGZyYWdtZW50OiBjdXJyZW50UGFuZWxJZFBhcnRzLnNsaWNlKDAsIC0xKS5qb2luKCcuJyksIHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIE5vdGlmeSBleHBhbnNpb24gcGFuZWwgbGlzdCBjaGFuZ2VzICovXHJcblx0XHRpZiAodGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdCkge1xyXG5cdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Lm5vdGlmeU9uQ2hhbmdlcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmV0cmlldmVzIGFuIGluc3RhbmNlIGZyb20gdGhlIGluamVjdG9yIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB0b2tlbi5cclxuXHQgKiBJZiBub3QgZm91bmQ6XHJcblx0ICogLSBUaHJvd3Mge0BsaW5rIE5vUHJvdmlkZXJFcnJvcn0gaWYgbm8gYG5vdEZvdW5kVmFsdWVgIHRoYXQgaXMgbm90IGVxdWFsIHRvXHJcblx0ICogSW5qZWN0b3IuVEhST1dfSUZfTk9UX0ZPVU5EIGlzIGdpdmVuXHJcblx0ICogLSBSZXR1cm5zIHRoZSBgbm90Rm91bmRWYWx1ZWAgb3RoZXJ3aXNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldFNlcnZpY2U8VD4odG9rZW46IFR5cGU8VD4pOiBUIHtcclxuXHRcdHJldHVybiBTZXJ2aWNlTG9jYXRvci5nZXRTZXJ2aWNlKHRva2VuKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIG1haW4gcm91dGUgZnJvbSB0aGUgZ2l2ZW4gc25hcHNob3QgYnkgdHJhdmVyc2luZyB1cCB0byB0aGUgcGFyZW50IHJvdXRlc1xyXG5cdCAqIGlmIHRoZSBjdXJyZW50IHNuYXBzaG90IGRvZXMgbm90IGhhdmUgYSBtZW51IGRlZmluZWQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gc25hcHNob3QgLSBUaGUgYWN0aXZhdGVkIHJvdXRlIHNuYXBzaG90IHRvIGV2YWx1YXRlLlxyXG5cdCAqIEByZXR1cm5zIFRoZSBtYWluIHJvdXRlIHNuYXBzaG90IHRoYXQgaGFzIGEgbWVudSBkZWZpbmVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBnZXRNYWluUm91dGUoc25hcHNob3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcclxuXHRcdGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdCEucGFyZW50ICYmICFzbmFwc2hvdC5kYXRhLm1lbnUpIHtcclxuXHRcdFx0LyogUmVjdXJzaXZlbHkgY2FsbCB0byBnZXQgdGhlIG1haW4gcm91dGUgZnJvbSB0aGUgcGFyZW50IHNuYXBzaG90ICovXHJcblx0XHRcdHJldHVybiB0aGlzLmdldE1haW5Sb3V0ZShzbmFwc2hvdCEucGFyZW50ISk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHNuYXBzaG90O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgYSBjb25maXJtIGRpYWxvZyB0byBkZWxldGUgYSBzaW5nbGUgaXRlbS5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgY2xvc2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbURpYWxvZygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7XHJcblx0XHRcdG1lc3NhZ2U6ICRsb2NhbGl6ZWA6QEBkaWFsb2cubWVzc2FnZS5kZWxldGUub25lOkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBpdGVtP2AsXHJcblx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmRlbGV0ZTpDb25maXJtIERlbGV0ZWAsXHJcblx0XHRcdGNhbmNlbEJ1dHRvbjogJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRhY2NlcHRCdXR0b246ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdH0pLmFmdGVyQ2xvc2VkKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIGRlbGV0ZSBtdWx0aXBsZSBzZWxlY3RlZCBpdGVtcy5cclxuXHQgKlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB0aGUgcmVzdWx0IG9mIHRoZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgY2xvc2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93RGVsZXRlSXRlbXNEaWFsb2coKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpcm0oe1xyXG5cdFx0XHRtZXNzYWdlOiAkbG9jYWxpemVgOkBAZGlhbG9nLm1lc3NhZ2UuZGVsZXRlLmxpc3Q6QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgc2VsZWN0ZWQgaXRlbXM/YCxcclxuXHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkaWFsb2cudGl0bGUuZGVsZXRlOkNvbmZpcm0gRGVsZXRlYCxcclxuXHRcdFx0Y2FuY2VsQnV0dG9uOiAkbG9jYWxpemVgOkBAY2FuY2VsOkNhbmNlbGAsXHJcblx0XHRcdGFjY2VwdEJ1dHRvbjogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB0byBzZW5kIHNvbWUgZGF0YS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgaW4gdGhlIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0gb2JzZXJ2YWJsZSAtIFRoZSBvYnNlcnZhYmxlIGluc3RhbmNlIHRvIGhhbmRsZSB0aGUgZGF0YS5cclxuXHQgKiBAcGFyYW0gc3VjY2Vzc0NhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBzdWNjZXNzZnVsIG9wZXJhdGlvbi5cclxuXHQgKiBAcGFyYW0gZXJyb3JDYWxsYmFjayAtIE9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gYW4gZXJyb3IuXHJcblx0ICogQHBhcmFtIGFjY2VwdEJ1dHRvblRleHQgLSBPcHRpb25hbCB0ZXh0IGZvciB0aGUgYWNjZXB0IGJ1dHRvbi5cclxuXHQgKiBAcGFyYW0gY2FuY2VsQnV0dG9uVGV4dCAtIE9wdGlvbmFsIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzaG93Q29uZmlybWF0aW9uRGlhbG9nKFxyXG5cdFx0bWVzc2FnZTogc3RyaW5nLFxyXG5cdFx0b2JzZXJ2YWJlOiBPYnNlcnZhYmxlPGFueT4sXHJcblx0XHRzdWNjZXNzQ2FsbGJhY2s/OiBGdW5jdGlvbixcclxuXHRcdGVycm9yQ2FsbGJhY2s/OiBGdW5jdGlvbixcclxuXHRcdGFjY2VwdEJ1dHRvblRleHQ/OiBzdHJpbmcsXHJcblx0XHRjYW5jZWxCdXR0b25UZXh0Pzogc3RyaW5nLFxyXG5cdFx0ZGlhbG9nQ29uZmlnPzogTWF0RGlhbG9nQ29uZmlnXHJcblx0KTogdm9pZCB7XHJcblx0XHR0aGlzLmRpYWxvZ1NlcnZpY2VcclxuXHRcdFx0Lm9wZW5Db25maXJtKHtcclxuXHRcdFx0XHRtZXNzYWdlOiBtZXNzYWdlLFxyXG5cdFx0XHRcdHRpdGxlOiAkbG9jYWxpemVgOkBAZGlhbG9nLnRpdGxlLmNvbmZpcm06Q29uZmlybWAsXHJcblx0XHRcdFx0Y2FuY2VsQnV0dG9uOiBjYW5jZWxCdXR0b25UZXh0ID8/ICRsb2NhbGl6ZWA6QEBjYW5jZWw6Q2FuY2VsYCxcclxuXHRcdFx0XHRhY2NlcHRCdXR0b246IGFjY2VwdEJ1dHRvblRleHQgPz8gJGxvY2FsaXplYDpAQHllczpZZXNgLFxyXG5cdFx0XHR9LCBkaWFsb2dDb25maWcgPz8gKDxNYXREaWFsb2dDb25maWc+eyBtYXhXaWR0aDogNDgwIH0pKVxyXG5cdFx0XHQuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGFjY2VwdDogYm9vbGVhbikgPT4ge1xyXG5cdFx0XHRcdGlmIChhY2NlcHQpIHtcclxuXHRcdFx0XHRcdG9ic2VydmFiZS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdFx0XHRuZXh0OiAoeCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMuc2hvd01lc3NhZ2UoJGxvY2FsaXplYDpAQHNuYWNrYmFyLnNlbmQuc3VjY2VzczpEYXRhIHNlbnQgc3VjY2Vzc2Z1bGx5LmApO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChzdWNjZXNzQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdHN1Y2Nlc3NDYWxsYmFjayh4KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH0sIGVycm9yOiAoZXJyb3JzKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHRcdGlmIChlcnJvckNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKGVycm9ycyk7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogT3BlbnMgYSB0YXNrIGRpYWxvZyB3aXRoIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbi5cclxuXHQgKiBcclxuXHQgKiBAdHlwZXBhcmFtIFRSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IHJldHVybmVkIGZyb20gdGhlIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0ge1BhcnRpYWw8VGFza0RpYWxvZ0RhdGE8VFJlc3VsdD4+fSBjb25maWcgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSB0YXNrIGRpYWxvZywgaW5jbHVkaW5nIG1lc3NhZ2VzLCBjYWxsYmFja3MsIGFuZCBvYnNlcnZhYmxlIHRhc2tzLlxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlIFxyXG5cdCAqIC8vIEV4YW1wbGUgb2YgaG93IHRvIGNhbGwgc2hvd1Rhc2tEaWFsb2dcclxuXHQgKiB0aGlzLnNob3dUYXNrRGlhbG9nKHtcclxuXHQgKiAgICAgdGl0bGU6ICdQcm9jZXNzaW5nIFRhc2snLFxyXG5cdCAqICAgICBpblByb2dyZXNzTWVzc2FnZTogJ1lvdXIgdGFzayBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuLi4nLFxyXG5cdCAqICAgICBzdWNjZXNzTWVzc2FnZTogJ1Rhc2sgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSEnLFxyXG5cdCAqICAgICBlcnJvck1lc3NhZ2U6ICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHlvdXIgdGFzay4nLFxyXG5cdCAqICAgICB0YXNrOiB0aGlzLnNvbWVPYnNlcnZhYmxlVGFzaygpLCAvLyBZb3VyIG9ic2VydmFibGUgdGFzayBnb2VzIGhlcmVcclxuXHQgKiAgICAgc3VjY2Vzc0J1dHRvbkNsaWNrOiAocmVzdWx0LCBkcikgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3MgYnV0dG9uIGNsaWNrZWQhJywgcmVzdWx0KTtcclxuXHQgKiAgICAgICAgIC8vIE9wdGlvbmFsbHkgaGFuZGxlIHRoZSBkaWFsb2cgcmVmZXJlbmNlIGhlcmVcclxuXHQgKiAgICAgICAgIGRyLmNsb3NlKHJlc3VsdCk7IC8vIENsb3NlIHRoZSBkaWFsb2cgd2l0aCB0aGUgcmVzdWx0XHJcblx0ICogICAgIH0sXHJcblx0ICogICAgIHN1Y2Nlc3NDYWxsYmFjazogKHJlc3VsdCkgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3MhJywgcmVzdWx0KTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgZXJyb3JDYWxsYmFjazogKGVycm9ycykgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IhJywgZXJyb3JzKTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgY2FuY2VsQ2FsbGJhY2s6ICgpID0+IHtcclxuXHQgKiAgICAgICAgIGNvbnNvbGUubG9nKCdUYXNrIHdhcyBjYW5jZWxlZC4nKTtcclxuXHQgKiAgICAgfSxcclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRwdWJsaWMgc2hvd1Rhc2tEaWFsb2c8VFJlc3VsdCA9IGFueT4oY29uZmlnOiBQYXJ0aWFsPFRhc2tEaWFsb2dEYXRhPFRSZXN1bHQ+PiwgZGlhbG9nQ29uZmlnPzogTWF0RGlhbG9nQ29uZmlnPFRSZXN1bHQ+KTogTWF0RGlhbG9nUmVmPFZkVGFza0RpYWxvZ0NvbXBvbmVudCwgVFJlc3VsdD4ge1xyXG5cdFx0cmV0dXJuIHRoaXMub3BlbkRpYWxvZzxWZFRhc2tEaWFsb2dDb21wb25lbnQ+KFZkVGFza0RpYWxvZ0NvbXBvbmVudCwgT2JqZWN0LmFzc2lnbihkaWFsb2dDb25maWcgPz8ge30sIDxNYXREaWFsb2dDb25maWc+e1xyXG5cdFx0XHRkYXRhOiBuZXcgVGFza0RpYWxvZ0RhdGEoY29uZmlnKSxcclxuXHRcdFx0ZGlzYWJsZUNsb3NlOiB0cnVlXHJcblx0XHR9KSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPcGVucyBhIGRpYWxvZyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgd2l0aCB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cclxuXHQgKlxyXG5cdCAqIEB0eXBlcGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBjb21wb25lbnQgdG8gYmUgb3BlbmVkIGFzIGEgZGlhbG9nLlxyXG5cdCAqIEB0eXBlcGFyYW0gRCAtIFRoZSB0eXBlIG9mIHRoZSBkYXRhIHBhc3NlZCB0byB0aGUgZGlhbG9nIChkZWZhdWx0IGlzIGFueSkuXHJcblx0ICogQHBhcmFtIHtUeXBlPFQ+fSBkaWFsb2dUeXBlIC0gVGhlIGNvbXBvbmVudCB0eXBlIHRvIG9wZW4gYXMgYSBkaWFsb2cuXHJcblx0ICogQHBhcmFtIHtNYXREaWFsb2dDb25maWc8RD59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBkaWFsb2csIHN1Y2ggYXMgZGF0YSBhbmQgc3R5bGVzLlxyXG5cdCAqIEBwYXJhbSB7RnVuY3Rpb259IFtjYWxsYmFja10gLSBPcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkLlxyXG5cdCAqIFxyXG5cdCAqIEByZXR1cm5zIHtNYXREaWFsb2dSZWY8VCwgRD59IEEgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgZGlhbG9nLlxyXG5cdCAqIFxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy8gRXhhbXBsZSBvZiBob3cgdG8gdXNlIG9wZW5EaWFsb2dcclxuXHQgKiBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm9wZW5EaWFsb2coTXlEaWFsb2dDb21wb25lbnQsIHtcclxuXHQgKiAgICAgZGF0YTogeyBkaWFsb2cgZGF0YSBoZXJlIH0sXHJcblx0ICogICAgIHdpZHRoOiAnODAwcHgnLFxyXG5cdCAqICAgICBwYW5lbENsYXNzOiAnY3VzdG9tLWRpYWxvZy1jbGFzcydcclxuXHQgKiB9LCAoKSA9PiB7XHJcblx0ICogICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgY2xvc2VkLicpO1xyXG5cdCAqIH0pO1xyXG5cdCAqIFxyXG5cdCAqIC8vIEhhbmRsaW5nIHRoZSByZXN1bHQgZnJvbSB0aGUgZGlhbG9nXHJcblx0ICogZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XHJcblx0ICogICAgIGlmIChyZXN1bHQpIHtcclxuXHQgKiAgICAgICAgIGNvbnNvbGUubG9nKCdEaWFsb2cgcmVzdWx0OicsIHJlc3VsdCk7XHJcblx0ICogICAgIH1cclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRwdWJsaWMgb3BlbkRpYWxvZzxULCBEID0gYW55PihkaWFsb2dUeXBlOiBUeXBlPFQ+LCBjb25maWc6IE1hdERpYWxvZ0NvbmZpZzxEPiwgY2FsbGJhY2s/OiBGdW5jdGlvbik6IE1hdERpYWxvZ1JlZjxULCBEPiB7XHJcblx0XHQvKiBPcGVuIHRoZSBkaWFsb2cgd2l0aCBzcGVjaWZpZWQgdHlwZSBhbmQgY29uZmlndXJhdGlvbiAqL1xyXG5cdFx0dmFyIGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oZGlhbG9nVHlwZSwgT2JqZWN0LmFzc2lnbih7XHJcblx0XHRcdHdpZHRoOiAnNjUwcHgnLCAvKiBEZWZhdWx0IHdpZHRoIGZvciB0aGUgZGlhbG9nICovXHJcblx0XHRcdGRhdGE6IHt9LCAvKiBEZWZhdWx0IGRhdGEgcGFzc2VkIHRvIHRoZSBkaWFsb2cgKi9cclxuXHRcdFx0cGFuZWxDbGFzczogWydkaWFsb2ctZnVsbC1zY3JlZW4nXSAvKiBDbGFzcyBmb3IgdGhlIGRpYWxvZyBwYW5lbCAqL1xyXG5cdFx0fSwgY29uZmlnKSk7IC8qIE1lcmdlIHVzZXItZGVmaW5lZCBjb25maWcgd2l0aCBkZWZhdWx0cyAqL1xyXG5cclxuXHRcdC8qIElmIGEgY2FsbGJhY2sgaXMgcHJvdmlkZWQsIHN1YnNjcmliZSB0byB0aGUgZGlhbG9nJ3MgYWZ0ZXJDbG9zZWQgZXZlbnQgKi9cclxuXHRcdGlmIChjYWxsYmFjaykge1xyXG5cdFx0XHQvKiBFeGVjdXRlIGNhbGxiYWNrIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkICovXHJcblx0XHRcdGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShfID0+IGNhbGxiYWNrKCkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0aGUgcmVmZXJlbmNlIHRvIHRoZSBvcGVuZWQgZGlhbG9nICovXHJcblx0XHRyZXR1cm4gZGlhbG9nUmVmO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRGlzcGxheXMgYSBtZXNzYWdlIHVzaW5nIHRoZSBzbmFjayBiYXIgc2VydmljZS5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBkaXNwbGF5IChvcHRpb25hbCwgZGVmYXVsdHMgdG8gYSBzdWNjZXNzIG1lc3NhZ2UgaWYgbm90IHByb3ZpZGVkKVxyXG5cdCAqIEBwYXJhbSB0eXBlIFRoZSB0eXBlIG9mIHRoZSBtZXNzYWdlIChTdWNjZXNzLCBXYXJuaW5nLCBvciBFcnJvcikuIERlZmF1bHRzIHRvIFN1Y2Nlc3MuXHJcblx0ICogQHBhcmFtIGR1cmF0aW9uIFRoZSBkdXJhdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSB0byBzaG93IHRoZSBtZXNzYWdlLiBEZWZhdWx0cyB0byAzMDAwbXMuXHJcblx0ICogQHBhcmFtIGFjdGlvbkxhYmVsIFRoZSBsYWJlbCBmb3IgdGhlIGFjdGlvbiBidXR0b24uIERlZmF1bHRzIHRvICdPSycuXHJcblx0ICogQHBhcmFtIHBsYXlTb3VuZCBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHBsYXkgYSB3YXJuaW5nIHNvdW5kIHdoZW4gdGhlIG1lc3NhZ2UgdHlwZSBpcyBXYXJuaW5nLiBEZWZhdWx0cyB0byBmYWxzZS5cclxuXHQgKiBAcmV0dXJucyBBbiBvYnNlcnZhYmxlIHRoYXQgZW1pdHMgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzaG93TWVzc2FnZShcclxuXHRcdG1lc3NhZ2U6IHN0cmluZyxcclxuXHRcdHR5cGU6IE1lc3NhZ2VUeXBlID0gTWVzc2FnZVR5cGUuU3VjY2VzcyxcclxuXHRcdGR1cmF0aW9uOiBudW1iZXIgPSAzMDAwLFxyXG5cdFx0YWN0aW9uTGFiZWw6IHN0cmluZyA9ICRsb2NhbGl6ZWA6QEBvazpPS2AsXHJcblx0XHRwbGF5U291bmQ6IGJvb2xlYW4gPSBmYWxzZVxyXG5cdCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG5cdFx0LyogRGVmYXVsdCBzbmFjayBiYXIgY2xhc3MgdG8gJ3ByaW1hcnknIChmb3Igc3VjY2VzcyBtZXNzYWdlcykgKi9cclxuXHRcdGxldCBzbmFja0JhckNsYXNzID0gJ3ByaW1hcnknO1xyXG5cclxuXHRcdC8qIERldGVybWluZSB0aGUgYXBwcm9wcmlhdGUgQ1NTIGNsYXNzIGJhc2VkIG9uIHRoZSBtZXNzYWdlIHR5cGUgKi9cclxuXHRcdHN3aXRjaCAodHlwZSkge1xyXG5cdFx0XHRjYXNlIE1lc3NhZ2VUeXBlLlN1Y2Nlc3M6XHJcblx0XHRcdFx0c25hY2tCYXJDbGFzcyA9ICdwcmltYXJ5JztcclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuV2FybmluZzpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ3dhcm4nO1xyXG5cclxuXHRcdFx0XHQvKiBQbGF5IHRoZSB3YXJuaW5nIHNvdW5kIGlmIHRoZSBwbGF5U291bmQgZmxhZyBpcyB0cnVlICovXHJcblx0XHRcdFx0aWYgKHBsYXlTb3VuZCkge1xyXG5cdFx0XHRcdFx0dGhpcy5wbGF5V2FyblNvdW5kKCk7XHJcblx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuRXJyb3I6XHJcblx0XHRcdFx0c25hY2tCYXJDbGFzcyA9ICdlcnJvcic7XHJcblxyXG5cdFx0XHRcdC8qIFBsYXkgdGhlIHdhcm5pbmcgc291bmQgaWYgdGhlIHBsYXlTb3VuZCBmbGFnIGlzIHRydWUgKi9cclxuXHRcdFx0XHRpZiAocGxheVNvdW5kKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBsYXlXYXJuU291bmQoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdH1cclxuXHJcblx0XHQvKiBEaXNwbGF5IHRoZSBtZXNzYWdlIGluIHRoZSBzbmFjayBiYXIsIHdpdGggc3BlY2lmaWVkIGR1cmF0aW9uIGFuZCBDU1MgY2xhc3MgKi9cclxuXHRcdGNvbnN0IHNuYWNrQmFyUmVmID0gdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihcclxuXHRcdFx0bWVzc2FnZSxcclxuXHRcdFx0YWN0aW9uTGFiZWwsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRkdXJhdGlvbjogZHVyYXRpb24sXHJcblx0XHRcdFx0cGFuZWxDbGFzczogW3NuYWNrQmFyQ2xhc3NdXHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblxyXG5cdFx0LyogRW1pdHMgd2hlbiB0aGUgYWN0aW9uIGJ1dHRvbiBpcyBjbGlja2VkICovXHJcblx0XHRyZXR1cm4gc25hY2tCYXJSZWYub25BY3Rpb24oKS5waXBlKG1hcCgoKSA9PiB7IH0pKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemVzIHRoZSBUaW55TUNFIGVkaXRvciB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBlZGl0b3JDb25maWcgT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBkZWZhdWx0IGVkaXRvciBzZXR0aW5nc1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbml0RWRpdG9yKGVkaXRvckNvbmZpZzogYW55ID0ge30pIHtcclxuXHRcdC8qIE1lcmdlIHRoZSBwcm92aWRlZCBlZGl0b3IgY29uZmlndXJhdGlvbiB3aXRoIGRlZmF1bHQgc2V0dGluZ3MgKi9cclxuXHRcdE9iamVjdC5hc3NpZ24odGhpcy5lZGl0b3JDb25maWcsIHtcclxuXHRcdFx0LyogRGlzYWJsZSBwcm9tb3Rpb25zIGluIHRoZSBlZGl0b3IgKi9cclxuXHRcdFx0cHJvbW90aW9uOiBmYWxzZSxcclxuXHRcdFx0LyogVXNlIHRoZSBtaW5pbWl6ZWQgdmVyc2lvbiBvZiBUaW55TUNFICovXHJcblx0XHRcdHN1ZmZpeDogJy5taW4nLFxyXG5cdFx0XHQvKiBEaXNhYmxlIGRlZmF1bHQgVGlueU1DRSBza2luICovXHJcblx0XHRcdHNraW46IGZhbHNlLFxyXG5cdFx0XHQvKiBTZXQgZWRpdG9yIGhlaWdodCB0byAxNzBweCAqL1xyXG5cdFx0XHRoZWlnaHQ6ICcxNzBweCcsXHJcblx0XHRcdC8qIERpc2FibGUgbG9hZGluZyBleHRlcm5hbCBDU1MgZm9yIGVkaXRvciBjb250ZW50ICovXHJcblx0XHRcdGNvbnRlbnRfY3NzOiBmYWxzZSxcclxuXHRcdFx0LyogU2V0IHRoZSBwbHVnaW5zIHRvIGJlIHVzZWQgaW4gdGhlIGVkaXRvciAqL1xyXG5cdFx0XHRwbHVnaW5zOiB0aGlzLmVkaXRvclBsdWdpbnMsXHJcblx0XHRcdC8qIFNldCB0aGUgdG9vbGJhciBjb25maWd1cmF0aW9uICovXHJcblx0XHRcdHRvb2xiYXI6IHRoaXMuZWRpdG9yVG9vbGJhcixcclxuXHRcdFx0LyogQWx3YXlzIHBhc3RlIGNvbnRlbnQgYXMgcGxhaW4gdGV4dCAqL1xyXG5cdFx0XHRwYXN0ZV9hc190ZXh0OiB0cnVlLFxyXG5cdFx0XHQvKiBTZXQgdGhlIGVkaXRvciBsYW5ndWFnZSB0byBHZXJtYW4gKi9cclxuXHRcdFx0bGFuZ3VhZ2U6ICdkZScsXHJcblx0XHRcdC8qIFNwZWNpZnkgdGhlIFVSTCB0byBsb2FkIHRoZSBHZXJtYW4gbGFuZ3VhZ2UgZmlsZSAqL1xyXG5cdFx0XHRsYW5ndWFnZV91cmw6ICcvYXNzZXRzL3RpbnltY2UvbGFuZ3MvZGUuanMnLFxyXG5cdFx0XHQvKiBTZXQgdGhlIGJhc2UgVVJMIGZvciBkb2N1bWVudHMvZmlsZXMgdXNlZCBpbiB0aGUgZWRpdG9yICovXHJcblx0XHRcdGRvY3VtZW50X2Jhc2VfdXJsOiBgJHt0aGlzLmFwcFNldHRpbmcuYXBpVXJsfWZpbGUvYCxcclxuXHRcdFx0LyogRW5hYmxlIGF1dG9tYXRpYyB1cGxvYWRzIGZvciBmaWxlIGlucHV0cyAqL1xyXG5cdFx0XHRhdXRvbWF0aWNfdXBsb2FkczogdHJ1ZSxcclxuXHRcdFx0LyogVXNlIHJlbGF0aXZlIFVSTHMgZm9yIGxpbmtzIGFuZCBpbWFnZXMgKi9cclxuXHRcdFx0cmVsYXRpdmVfdXJsczogdHJ1ZSxcclxuXHRcdFx0LyogRGlzYWJsZSBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiByZWxhdGl2ZSBVUkxzIHRvIGFic29sdXRlIFVSTHMgKi9cclxuXHRcdFx0Y29udmVydF91cmxzOiBmYWxzZSxcclxuXHRcdFx0LyogRXh0ZW5kIHZhbGlkIEhUTUwgZWxlbWVudHMgdG8gYWxsb3cgc3BlY2lmaWMgYXR0cmlidXRlcyAqL1xyXG5cdFx0XHRleHRlbmRlZF92YWxpZF9lbGVtZW50czogJ3NwYW5baWR8Y2xhc3N8c3R5bGVdLCtAW2RhdGEtb3B0aW9uc10nLFxyXG5cdFx0XHQvKiBBbGxvdyBIVE1MIGluIG5hbWVkIGFuY2hvcnMgKi9cclxuXHRcdFx0YWxsb3dfaHRtbF9pbl9uYW1lZF9hbmNob3I6IHRydWVcclxuXHRcdH0sIGVkaXRvckNvbmZpZyk7XHJcblxyXG5cdFx0LyogTWFyayB0aGUgZWRpdG9yIGFzIGluaXRpYWxpemVkICovXHJcblx0XHR0aGlzLmlzRWRpdG9ySW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyB0aGUgdGl0bGUgYW5kIHN1YnRpdGxlIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1lbnUgYW5kIHJvdXRlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNldFRpdGxlcygpOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIHRoZSBtZW51IG9iamVjdCBpcyBhdmFpbGFibGUgKi9cclxuXHRcdGlmICh0aGlzLm1lbnUpIHtcclxuXHRcdFx0LyogU2V0IHRoZSBicm93c2VyIHRhYiB0aXRsZSB1c2luZyB0aGUgbWVudSB0aXRsZSwgaWYgYXZhaWxhYmxlICovXHJcblx0XHRcdHRoaXMudGl0bGVTZXJ2aWNlLnNldFRpdGxlKHRoaXMubWVudS50aXRsZSA/PyAnJyk7XHJcblx0XHRcdC8qIFVwZGF0ZSB0aGUgbG9jYWwgdGl0bGUgdmFyaWFibGUgZnJvbSB0aGUgdGl0bGUgc2VydmljZSAqL1xyXG5cdFx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHRcdC8qIElmIHRoZXJlIGFyZSBubyBzdWJtZW51IGl0ZW1zLCBleGl0IHRoZSBtZXRob2QgKi9cclxuXHRcdFx0aWYgKCF0aGlzLm1lbnUuaXRlbXMpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIFRyeSB0byByZXRyaWV2ZSB0aGUgc3VidGl0bGUgZnJvbSB0aGUgVVJMIHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0dmFyIHN1YnRpdGxlID0gdGhpcy5yb3V0ZT8uc25hcHNob3Q/LnBhcmFtTWFwPy5nZXQoJ3N1YnRpdGxlJyk7XHJcblx0XHRcdGlmIChzdWJ0aXRsZSkge1xyXG5cdFx0XHRcdC8qIEF0dGVtcHQgdG8gZGVjb2RlIHRoZSBzdWJ0aXRsZSBpZiBpdCdzIEJhc2U2NCBlbmNvZGVkICovXHJcblx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdHRoaXMuc3VidGl0bGUgPSB3aW5kb3cuYXRvYihzdWJ0aXRsZSk7XHJcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0LyogSWYgZGVjb2RpbmcgZmFpbHMsIHVzZSB0aGUgcmF3IHN1YnRpdGxlICovXHJcblx0XHRcdFx0XHR0aGlzLnN1YnRpdGxlID0gc3VidGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdC8qIEdldCB0aGUgY3VycmVudCByb3V0ZSBwYXRoLCBleGNsdWRpbmcgcXVlcnkgcGFyYW1ldGVycyBhbmQgbWF0cml4IHBhcmFtZXRlcnMgKi9cclxuXHRcdFx0XHRsZXQgY3VycmVudFJvdXRlID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF0/LnNwbGl0KCc7JylbMF07XHJcblxyXG5cdFx0XHRcdC8qIEVuc3VyZSB0aGUgcm91dGUgZG9lc24ndCBoYXZlIGEgdHJhaWxpbmcgc2xhc2ggKi9cclxuXHRcdFx0XHRjdXJyZW50Um91dGUgPSBjdXJyZW50Um91dGUuZW5kc1dpdGgoJy8nKSA/IGN1cnJlbnRSb3V0ZS5zdWJzdHJpbmcoMCwgLTEpIDogY3VycmVudFJvdXRlO1xyXG5cclxuXHRcdFx0XHQvKiBGaW5kIHRoZSBzdWJtZW51IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IHJvdXRlICovXHJcblx0XHRcdFx0dmFyIHN1Ym1lbnUgPSB0aGlzLm1lbnUuaXRlbXMuZmlsdGVyKHggPT4geC5wYXRoID09IGN1cnJlbnRSb3V0ZSlbMF07XHJcblx0XHRcdFx0aWYgKHN1Ym1lbnUpIHtcclxuXHRcdFx0XHRcdC8qIFNldCB0aGUgc3VidGl0bGUgdG8gdGhlIG1hdGNoaW5nIHN1Ym1lbnUncyB0aXRsZSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zdWJ0aXRsZSA9IHN1Ym1lbnUudGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgY29tbWFuZHMgYW5kIGEgc3RhcnRpbmcgcG9pbnQuXHJcblx0ICogQHBhcmFtIGNvbW1hbmRzIEFycmF5IG9mIGNvbW1hbmRzIHJlcHJlc2VudGluZyB0aGUgcm91dGUgdG8gbmF2aWdhdGUgdG9cclxuXHQgKiBAcGFyYW0gcXVlcnlQYXJhbXMgT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBmcmFnbWVudCBPcHRpb25hbCBmcmFnbWVudCAoYW5jaG9yKSB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBwcmVzZXJ2ZUZyYWdtZW50IFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhZ21lbnQgaW4gdGhlIFVSTFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIHF1ZXJ5UGFyYW1zPzogYW55LCBmcmFnbWVudD86IHN0cmluZywgcHJlc2VydmVGcmFnbWVudD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XHJcblx0XHRcdC8qIE1lcmdlIGFueSBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgcmV0dXJuVXJsICovXHJcblx0XHRcdHF1ZXJ5UGFyYW1zOiBPYmplY3QuYXNzaWduKHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9LCBxdWVyeVBhcmFtcyB8fCB7fSksXHJcblx0XHRcdC8qIFNldCB0aGUgZnJhZ21lbnQsIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdGZyYWdtZW50OiBmcmFnbWVudCxcclxuXHRcdFx0LyogUHJlc2VydmUgdGhlIGZyYWdtZW50IGZyb20gdGhlIHByZXZpb3VzIFVSTCBpZiBzcGVjaWZpZWQgKi9cclxuXHRcdFx0cHJlc2VydmVGcmFnbWVudDogcHJlc2VydmVGcmFnbWVudCxcclxuXHRcdFx0LyogTWFrZSB0aGUgcm91dGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcm91dGUgaWYgYXBwbGljYWJsZSAqL1xyXG5cdFx0XHRyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBsYXlzIGEgc2hvcnQgYmVlcCBzb3VuZCB1c2luZyBhbiBlbWJlZGRlZCBhdWRpbyBmaWxlIGluIGJhc2U2NCBmb3JtYXQuXHJcblx0ICogVGhlIG1ldGhvZCBsb2FkcyBhbmQgcGxheXMgdGhlIGF1ZGlvIGZpbGUgaW1tZWRpYXRlbHkgdXBvbiBjYWxsaW5nLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwbGF5QmVlcFNvdW5kKCk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5iZWVwQXVkaW8ucGxheSgpO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGxheXMgYSBzaG9ydCB3YXJuaW5nIHNvdW5kIHVzaW5nIGFuIGVtYmVkZGVkIGF1ZGlvIGZpbGUgaW4gYmFzZTY0IGZvcm1hdC5cclxuXHQgKiBUaGUgbWV0aG9kIGxvYWRzIGFuZCBwbGF5cyB0aGUgYXVkaW8gZmlsZSBpbW1lZGlhdGVseSB1cG9uIGNhbGxpbmcuXHJcblx0ICovXHJcblx0cHVibGljIHBsYXlXYXJuU291bmQoKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLndhcm5BdWRpby5wbGF5KCk7XHJcblx0XHR9IGNhdGNoIChlcnJvcikgeyB9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2dzIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWRcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBsb2dcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGxvZ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2cobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pOiB2b2lkIHtcclxuXHRcdC8qIENoZWNrIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZCAqL1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0LyogTG9nIHRoZSBtZXNzYWdlIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zb2xlICovXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UsIG9wdGlvbmFsUGFyYW1zKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ3MgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZSB0byBsb2dcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHdhcm5pbmdcclxuXHQgKi9cclxuXHRwdWJsaWMgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkICovXHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHQvKiBMb2cgdGhlIHdhcm5pbmcgbWVzc2FnZSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUgY29uc29sZSAqL1xyXG5cdFx0XHRjb25zb2xlLndhcm4obWVzc2FnZSwgb3B0aW9uYWxQYXJhbXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ29udmVydCBhbiBvYmplY3QgdG8gSHR0cEhlYWRlcnMuXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGJvZHkgVGhlIG9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIHdpbGwgYmUgY29udmVydGVkIGludG8gaGVhZGVyc1xyXG5cdCAqIEByZXR1cm5zIEh0dHBIZWFkZXJzIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXktdmFsdWUgcGFpcnMgZnJvbSB0aGUgYm9keVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCB0b0h0dHBIZWFkZXJzKGJvZHk6IGFueSk6IEh0dHBIZWFkZXJzIHtcclxuXHRcdC8qIElmIHRoZSBib2R5IGlzIG51bGwgb3IgdW5kZWZpbmVkLCByZXR1cm4gZW1wdHkgaGVhZGVycyAqL1xyXG5cdFx0aWYgKCFib2R5KSB7XHJcblx0XHRcdHJldHVybiBuZXcgSHR0cEhlYWRlcnMoKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBDb252ZXJ0IHRoZSBvYmplY3QncyBwcm9wZXJ0aWVzIHRvIEh0dHBIZWFkZXJzLCBmaWx0ZXJpbmcgb3V0IG51bGwgb3IgZW1wdHkgdmFsdWVzICovXHJcblx0XHRyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYm9keSlcclxuXHRcdFx0LmZpbHRlcihrZXkgPT4gYm9keVtrZXldICE9IG51bGwgJiYgYm9keVtrZXldICE9ICcnKVxyXG5cdFx0XHQucmVkdWNlKChwLCBrZXkpID0+IHAuc2V0KGtleSwgYm9keVtrZXldKSwgbmV3IEh0dHBIZWFkZXJzKCkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGFyc2VzIGFuZCBmb3JtYXRzIEhUVFAgcmVzcG9uc2UgZXJyb3JzLlxyXG5cdCAqIEBwYXJhbSBlcnJvcnMgVGhlIGVycm9yIG9iamVjdCByZXR1cm5lZCBmcm9tIHRoZSBIVFRQIHJlc3BvbnNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHBhcnNlRXJyb3JzKGVycm9yczogYW55KTogdm9pZCB7XHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBlcnJvcnMgYXJyYXkgYW5kIHJlc2V0IGxvYWRpbmcvc2F2aW5nIGluZGljYXRvcnMgKi9cclxuXHRcdHRoaXMuZXJyb3JzID0gW107XHJcblx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cclxuXHRcdC8qIElmIHRoZXJlIGFyZSBlcnJvcnMsIGl0ZXJhdGUgdGhyb3VnaCB0aGVtIGFuZCBhZGQgdGhlbSB0byB0aGUgZXJyb3JzIGFycmF5ICovXHJcblx0XHRpZiAoZXJyb3JzKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChlbCA9PiB7XHJcblx0XHRcdFx0bGV0IGVycm9yID0gZXJyb3JzW2VsXTtcclxuXHRcdFx0XHQvKiBJZiB0aGUgZXJyb3IgaXMgYW4gYXJyYXksIGl0ZXJhdGUgb3ZlciB0aGUgYXJyYXkgYW5kIGFkZCBlYWNoIGVycm9yICovXHJcblx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoZXJyb3IpKSB7XHJcblx0XHRcdFx0XHRlcnJvci5mb3JFYWNoKGVyciA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuZXJyb3JzLnB1c2goZXJyKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGVycm9yID09PSBcInN0cmluZ1wiKSB7XHJcblx0XHRcdFx0XHQvKiBJZiB0aGUgZXJyb3IgaXMgYSBzdHJpbmcsIGFkZCBpdCBkaXJlY3RseSB0byB0aGUgZXJyb3JzIGFycmF5ICovXHJcblx0XHRcdFx0XHR0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSGFuZGxlIEh0dHAgb3BlcmF0aW9uIHRoYXQgZmFpbGVkLlxyXG5cdCAqIExldCB0aGUgYXBwIGNvbnRpbnVlLlxyXG5cdCAqIEBwYXJhbSBvcGVyYXRpb24gLSBuYW1lIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBmYWlsZWRcclxuXHQgKiBAcGFyYW0gcmVzdWx0IC0gb3B0aW9uYWwgdmFsdWUgdG8gcmV0dXJuIGFzIHRoZSBvYnNlcnZhYmxlIHJlc3VsdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xyXG5cdFx0cmV0dXJuIChlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcblxyXG5cdFx0XHQvKiBQYXJzZSB0aGUgZXJyb3IgbWVzc2FnZXMgKi9cclxuXHRcdFx0dGhpcy5wYXJzZUVycm9ycyhlcnJvcik7XHJcblxyXG5cdFx0XHQvKiBMb2cgdG8gY29uc29sZSAqL1xyXG5cdFx0XHR0aGlzLndhcm4oYCR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuXHJcblx0XHRcdC8qIExldCB0aGUgYXBwIGtlZXAgcnVubmluZyBieSByZXR1cm5pbmcgYW4gZW1wdHkgcmVzdWx0ICovXHJcblx0XHRcdHJldHVybiBvZihyZXN1bHQgYXMgVCk7XHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW5zIHRoZSBvYmplY3QgYnkgcmVtb3ZpbmcgcHJvcGVydGllcyB0aGF0IGFyZSBudWxsLCB1bmRlZmluZWQsIG9yIGVtcHR5IHN0cmluZ3NcclxuXHQgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY2xlYW5cclxuXHQgKiBAcmV0dXJucyBUaGUgY2xlYW5lZCBvYmplY3RcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2xlYW4ob2JqOiBhbnkpOiBhbnkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgKi9cclxuXHRcdFx0Zm9yICh2YXIgcHJvcE5hbWUgaW4gb2JqKSB7XHJcblx0XHRcdFx0LyogSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZWxldGUgaXQgKi9cclxuXHRcdFx0XHRpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgfHwgb2JqW3Byb3BOYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIG9ialtwcm9wTmFtZV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHQvKiBFcnJvciBoYW5kbGluZyBjYW4gYmUgZG9uZSBoZXJlIGlmIG5lY2Vzc2FyeSAqL1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0aGUgY2xlYW5lZCBvYmplY3QgKi9cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYW5pdGl6ZXMgdGhlIHNwZWNpZmllZCBvYmplY3QgYnkgcmVtb3ZpbmcgZmFsc3kgdmFsdWVzIGFuZCBjb252ZXJ0aW5nIHN0cmluZyBudW1iZXJzIHRvIG51bWJlcnNcclxuXHQgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gc2FuaXRpemVcclxuXHQgKiBAcGFyYW0gaWdub3JlIFByb3BlcnRpZXMgdG8gaWdub3JlIGR1cmluZyB0aGUgc2FuaXRpemF0aW9uXHJcblx0ICogQHJldHVybnMgVGhlIHNhbml0aXplZCBvYmplY3RcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2FuaXRpemVPYmplY3Qob2JqOiBhbnksIC4uLmlnbm9yZTogc3RyaW5nW10pOiBhbnkge1xyXG5cdFx0LyogSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzIGFuZCBmaWx0ZXIgb3V0IGZhbHN5IHZhbHVlcyAqL1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iailcclxuXHRcdFx0LmZpbHRlcih4ID0+IG9ialt4XSlcclxuXHRcdFx0LyogSWdub3JlIHByb3BlcnRpZXMgdGhhdCBhcmUgaW4gdGhlIGlnbm9yZSBsaXN0IChjYXNlIGluc2Vuc2l0aXZlKSAqL1xyXG5cdFx0XHQuZmlsdGVyKHggPT4gIShpZ25vcmUgfHwgW10pLm1hcCh4ID0+IHgudG9Mb3dlckNhc2UoKSkuaW5jbHVkZXMoeC50b0xvd2VyQ2FzZSgpKSlcclxuXHRcdFx0LyogQ29udmVydCBzdHJpbmcgbnVtYmVycyB0byBhY3R1YWwgbnVtYmVycyAqL1xyXG5cdFx0XHQucmVkdWNlKChyZXN1bHQ6IGFueSwga2V5KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBpc05hTigrb2JqW2tleV0pID8gb2JqW2tleV0gOiArb2JqW2tleV07XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhbnkgdGV4dCBpbiB0aGUgZG9jdW1lbnRcclxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRleHQgaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBmYWxzZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpc1RleHRTZWxlY3RlZCA9ICgpOiBib29sZWFuID0+XHJcblx0XHQvKiBVc2UgdGhlIHdpbmRvdy5nZXRTZWxlY3Rpb24gQVBJIHRvIGNoZWNrIGlmIHRleHQgaXMgc2VsZWN0ZWQgKi9cclxuXHRcdCh3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpPy5sZW5ndGggPz8gMCkgPiAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZFxyXG5cdCAqL1xyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0LyogVW5zdWJzY3JpYmUgZnJvbSBhbGwgTWF0RXhwYW5zaW9uUGFuZWwgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnMuZm9yRWFjaCh4ID0+IHgudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG59Il19
904
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9iYXNlL2NvbXBvbmVudHMvYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFRLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1SixPQUFPLEVBQUUsU0FBUyxFQUFpQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGNBQWMsRUFBeUMsTUFBTSxFQUErQixNQUFNLGlCQUFpQixDQUFDO0FBQzdILE9BQU8sRUFBNEIsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0Is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QUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOzBIQXQrQm9CLGFBQWE7OEdBQWIsYUFBYSx1TEFzTXBCLGlCQUFpQiwyQkFBVSxVQUFVLDZEQU1yQyxpQkFBaUI7OzJGQTVNVixhQUFhO2tCQURsQyxTQUFTO21IQThDRiwyQkFBMkI7c0JBRGpDLEtBQUs7Z0JBdUhDLE1BQU07c0JBRFosTUFBTTtnQkFxQ0csaUNBQWlDO3NCQUQxQyxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFPM0MsMEJBQTBCO3NCQURuQyxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFR5cGUsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ0NvbmZpZywgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uUGFuZWwgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIsIFNjcm9sbCwgVXJsU2VnbWVudCwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb250ZXh0SGVscGVyIH0gZnJvbSAnLi4vLi4vY29tbW9uL2NvbW1vbi5tb2R1bGUnO1xyXG5pbXBvcnQgeyBBcHBTZXR0aW5nIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9hcHAtc2V0dGluZyc7XHJcbmltcG9ydCB7IFNlcnZpY2VMb2NhdG9yIH0gZnJvbSAnLi4vLi4vY29tbW9uL3NlcnZpY2VzL3NlcnZpY2UtbG9jYXRvcic7XHJcbmltcG9ydCB7IFZkRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZ3Mvc2VydmljZXMvZGlhbG9nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWZE1lZGlhU2VydmljZSB9IGZyb20gJy4uLy4uL21lZGlhL3NlcnZpY2VzL21lZGlhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZW51IH0gZnJvbSAnLi4vLi4vbWVudS9tb2RlbHMvbWVudSc7XHJcbmltcG9ydCB7IFRhc2tEaWFsb2dEYXRhIH0gZnJvbSAnLi4vYmFzZS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBDb21tb24gfSBmcm9tICcuLi9jb25zdGFudHMvY29tbW9uJztcclxuaW1wb3J0IHsgR2xvYmFsUm9sZXMgfSBmcm9tICcuLi9jb25zdGFudHMvZ2xvYmFsLXJvbGVzJztcclxuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tICcuLi9lbnVtcy9tZXNzYWdlLXR5cGUnO1xyXG5pbXBvcnQgeyBBdXRoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9hdXRoLWhlbHBlcic7XHJcbmltcG9ydCB7IElCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pYmFzZS1jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBdXRoVXNlciB9IGZyb20gJy4uL21vZGVscy9hdXRoLXVzZXInO1xyXG5pbXBvcnQgeyBWZFRhc2tEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL3Rhc2stZGlhbG9nL3Rhc2stZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQSBiYXNlIGxpc3QgY29tcG9uZW50IGZvciBjb21wb25lbnRzIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0LlxyXG4gKi9cclxuLy8gQGR5bmFtaWNcclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUJhc2VDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblx0LyoqXHJcblx0ICogQXBwbGljYXRpb24gc2V0dGluZ3MuXHJcblx0ICovXHJcblx0cHVibGljIGFwcFNldHRpbmc6IEFwcFNldHRpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdlbmVyYWwgY29uZmlndXJhdGlvbiBzZXR0aW5ncywgd2l0aCBhIGZsZXhpYmxlIHR5cGUgdG8gYWNjb21tb2RhdGUgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBzZXR0aW5nczogYW55ID0ge307XHJcblxyXG5cdC8qKlxyXG5cdCAqIE1lbnUgaXRlbXMgZm9yIG5hdmlnYXRpb24uXHJcblx0ICovXHJcblx0cHVibGljIG1lbnU/OiBNZW51O1xyXG5cclxuXHQvKipcclxuXHQgKiBOYW1lIG9mIHRoZSBwcm9qZWN0LCB1c2VkIGZvciBkaXNwbGF5IG9yIGxvZ2dpbmcgcHVycG9zZXMuXHJcblx0ICovXHJcblx0cHVibGljIHByb2plY3ROYW1lPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaXRsZSBvZiB0aGUgY3VycmVudCBwYWdlLCBkaXNwbGF5ZWQgaW4gdGhlIHBhZ2UgaGVhZGVyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0aXRsZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogU3VidGl0bGUgb2YgdGhlIGN1cnJlbnQgb3V0bGV0LCB1c2VkIGZvciBhZGRpdGlvbmFsIHBhZ2UgY29udGV4dC5cclxuXHQgKi9cclxuXHRwdWJsaWMgc3VidGl0bGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIGR1bW15IGRhdGEgaXMgdXNlZCBmb3IgdGVzdGluZywgYW5kIGRlYnVnIGxvZ3MgYXJlIGVuYWJsZWQuXHJcblx0ICovXHJcblx0cHVibGljIGRlYnVnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlx0IFxyXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIGEgbG9hZGluZyBwcm9jZXNzIGlzIGFjdGl2ZSwgb2Z0ZW4gdXNlZCB0byBzaG93IGEgbG9hZGluZyBzcGlubmVyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGhhbmRsZSBjaGFuZ2VzIGluIGV4cGFuc2lvbiBwYW5lbHMuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaGFuZGxlRXhwYW5zaW9uUGFuZWxDaGFuZ2VzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5kaWNhdGVzIHdoZXRoZXIgYSBzYXZlIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MuXHJcblx0ICovXHJcblx0cHVibGljIF9pc1NhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdHB1YmxpYyBnZXQgaXNTYXZpbmcoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9pc1NhdmluZyB8fCB0aGlzLmlzTG9hZGluZzsgfVxyXG5cdHB1YmxpYyBzZXQgaXNTYXZpbmcoaXNTYXZpbmc6IGJvb2xlYW4pIHsgdGhpcy5pc0xvYWRpbmcgPSB0aGlzLl9pc1NhdmluZyA9IGlzU2F2aW5nOyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlZGl0b3IgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0cHVibGljIGlzRWRpdG9ySW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogU3RvcmVzIGFueSBlcnJvcnMgZW5jb3VudGVyZWQgZHVyaW5nIHJlcXVlc3RzIG9yIG9wZXJhdGlvbnMuXHJcblx0ICovXHJcblx0cHVibGljIGVycm9yczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFV0aWxpdHkgdG8gZXZhbHVhdGUgbWVkaWEgcXVlcmllcyBiYXNlZCBvbiB0aGUgY3VycmVudCBzY3JlZW4gb3Igd2luZG93IHNpemUuXHJcblx0ICovXHJcblx0cHVibGljIG1lZGlhOiBWZE1lZGlhU2VydmljZTtcclxuXHJcblx0LyoqXHJcblx0ICogTGlzdCBvZiBwZXJtaXR0ZWQgZmlsZSBleHRlbnNpb25zIGZvciB1cGxvYWQgb3Igc2VsZWN0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhbGxvd2VkRXh0ZW5zaW9uczogc3RyaW5nW10gPSBDb21tb24uYWxsb3dlZEV4dGVuc2lvbnM7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBsdWdpbnMgZW5hYmxlZCBpbiB0aGUgVGlueU1DRSBlZGl0b3IuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRvclBsdWdpbnM6IHN0cmluZyA9IENvbW1vbi5lZGl0b3JQbHVnaW5zO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIGNvbmZpZ3VyYXRpb24gZm9yIFRpbnlNQ0UgZWRpdG9yLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JUb29sYmFyOiBzdHJpbmcgPSBDb21tb24uZWRpdG9yVG9vbGJhcjtcclxuXHJcblx0LyoqXHJcblx0ICogQWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgZWRpdG9yLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JDb25maWc6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBuYXZpZ2F0aW9uIGFuZCBVUkwgbWFuaXB1bGF0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyByb3V0ZXI6IFJvdXRlcjtcclxuXHJcblx0LyoqXHJcblx0ICogT3B0aW9uYWwgaGFzaCB2YWx1ZSBhcHBlbmRlZCB0byBVUkxzIGZvciBib29rbWFya2luZyBvciBzdGF0ZSBtYW5hZ2VtZW50LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB1cmxIYXNoPzogc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBDU1MgY2xhc3MgbmFtZShzKSBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXHJcblx0ICovXHJcblx0cHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogUGVybWlzc2lvbiBmbGFnIGZvciBjcmVhdGluZyBuZXcgZW50cmllcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuQ3JlYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBlcm1pc3Npb24gZmxhZyBmb3IgcmVhZGluZyBuZXcgZW50cmllcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgY2FuUmVhZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBQZXJtaXNzaW9uIGZsYWcgZm9yIHVwZGF0aW5nIGV4aXN0aW5nIGVudHJpZXMuXHJcblx0ICovXHJcblx0cHVibGljIGNhblVwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBQZXJtaXNzaW9uIGZsYWcgZm9yIGRlbGV0aW5nIGVudHJpZXMuXHJcblx0ICovXHJcblx0cHVibGljIGNhbkRlbGV0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBGdWxsIHBhdGggb2YgdGhlIGN1cnJlbnQgcm91dGUuXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnRSb3V0ZT86IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogQmFzZSBwYXRoIG9mIHRoZSBjdXJyZW50IHJvdXRlLCBleGNsdWRpbmcgc3BlY2lmaWMgcGFyYW1ldGVycyBvciBzdWItcGF0aHMuXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnRCYXNlUm91dGU/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVSTCB0byBuYXZpZ2F0ZSBiYWNrIHRvIGFmdGVyIHNhdmluZyBjaGFuZ2VzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZXR1cm5Vcmw/OiBzdHJpbmc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCB1c2VyLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50VXNlcjogQXV0aFVzZXIgPSBBdXRoSGVscGVyLnVzZXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhZG1pbiBwcml2aWxlZ2VzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0FkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkFkbWluaXN0cmF0b3IpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBoYXMgY2xpZW50IGFkbWluIHByaXZpbGVnZXMuXHJcblx0ICovXHJcblx0cHVibGljIGlzQ2xpZW50QWRtaW4gPSBBdXRoSGVscGVyLmhhc1JvbGUoR2xvYmFsUm9sZXMuQ2xpZW50QWRtaW5pc3RyYXRvcik7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBkZXBhcnRtZW50IGFkbWluIHByaXZpbGVnZXMuXHJcblx0ICovXHJcblx0cHVibGljIGlzRGVwYXJ0bWVudEFkbWluID0gQXV0aEhlbHBlci5oYXNSb2xlKEdsb2JhbFJvbGVzLkRlcGFydG1lbnRBZG1pbmlzdHJhdG9yKTtcclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlciBmb3IgcmVsb2FkIGFjdGlvbnMsIHVzZWZ1bCBmb3IgcmVmcmVzaGluZyBkYXRhLlxyXG5cdCAqL1xyXG5cdEBPdXRwdXQoKVxyXG5cdHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIHNldHRpbmcgdGhlIGRvY3VtZW50J3MgdGl0bGUuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHRpdGxlU2VydmljZTogVGl0bGU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIGRpc3BsYXlpbmcgc25hY2sgYmFyIG5vdGlmaWNhdGlvbnMuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNuYWNrQmFyU2VydmljZTogTWF0U25hY2tCYXI7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNlcnZpY2UgZm9yIGRpc3BsYXlpbmcgY29uZmlybWF0aW9uIGFuZCBwcm9tcHQgZGlhbG9ncy5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZGlhbG9nU2VydmljZTogVmREaWFsb2dTZXJ2aWNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBvcGVuaW5nIG1vZGFsIGRpYWxvZ3MuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGRpYWxvZzogTWF0RGlhbG9nO1xyXG5cclxuXHQvKipcclxuXHQgKiBTZXJ2aWNlIGZvciBtYW5hZ2luZyBicm93c2VyIGxvY2F0aW9uIGFuZCBoaXN0b3J5LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBsb2NhdGlvbjogTG9jYXRpb247XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNldHMgYSBVUkwgaGFzaCBmb3IgbmF2aWdhdGlvbiBzdGF0ZS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2V0VXJsSGFzaDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFF1ZXJ5IGxpc3QgZm9yIGFjY2Vzc2luZyBleHBhbnNpb24gcGFuZWwgZWxlbWVudHMgYXMgRE9NIHJlZmVyZW5jZXMuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZHJlbihNYXRFeHBhbnNpb25QYW5lbCwgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcblx0cHJvdGVjdGVkIG1hdEV4cGFuc2lvblBhbmVsRWxlbWVudFF1ZXJ5TGlzdD86IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcclxuXHJcblx0LyoqXHJcblx0ICogUXVlcnkgbGlzdCBmb3IgYWNjZXNzaW5nIE1hdEV4cGFuc2lvblBhbmVsIGNvbXBvbmVudCByZWZlcmVuY2VzLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oTWF0RXhwYW5zaW9uUGFuZWwpXHJcblx0cHJvdGVjdGVkIG1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0PzogUXVlcnlMaXN0PE1hdEV4cGFuc2lvblBhbmVsPjtcclxuXHJcblx0LyoqXHJcblx0ICogU3Vic2NyaXB0aW9ucyBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMsIG1hbmFnZWQgdG8gYXZvaWQgbWVtb3J5IGxlYWtzLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBtYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZSBhIGJlZXAgYXVkaW8gb2JqZWN0IGFuZCBsb2FkIGEgc291bmQgZmlsZSBmcm9tIGEgZGF0YSBVUkwuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJlZXBBdWRpbyA9IG5ldyBBdWRpbyhcImRhdGE6YXVkaW8vd2F2O2Jhc2U2NCwvL3VRUkFBQUFXTVNMd1VJWUFBc1lrWGdvUXdBRWFZTFdma1dnQUkwd1dzL0l0QUFBR0RnWXRBZ0F5TitRV2FBQWlod01XbTRHOFFRUkRpTWNDQmNIM0NjK0NEdi83eEE0VHZoOVJ6L3k4UUFEQndNV2dRQVpHL0lMTkFBUlE0R0xUY0RlSUlJaHhHT0JBdUQ3aE9mQkIzLzk0Z2NKM3crbzUvNWVJQUlBQUFWd1dnUUFWUTJPUmFJUXdFTUFKaURnOTVHNG5RTDdtUVZXSTZHd1JjZnNaQWNzS2tKdnhneEVqekZVZ2ZIb1NROVFxN0tOd3FId3VCMTNNQTRhMXEvRG1CckhnUGNtamlHb2gvL0V3QzVuR1BFbVM0UmNma1ZLT2hKZitXT2dveEpjbEZ6M2tnbi8vZEJBK3lhMUdodXJObjh6Yi8vOU5OdXROdWh6MzFmLy8vLzl2dC8vL3orSWRBRUFBQUs0TFFJQUtvYkhJdEVJWUNHQUV4QndlOGpjVG9GOXpJS3JFZERZSXVQMk1nT1dGU0UzNHdZaVI1aXFRUGowSkllb1ZkbEc0VkQ0WEE2N21BY05hMWZoekExandIdVRSeERVUS8vaVlCY3pqSGlUSmNJdVB5S2xIUWt2L0xIUVVZa3VTaTU3eVFULy91Z2dmWk5halEzVm16K1p0Ly8rbW0zV20zUTU3NnYvLy8vKzMyLy8vNS9FT2dBQUFEVmdoUUFBQUFBLy91UVpBVUFCMVdJMFBadWdBQUFBQW9Rd0FBQUVrM25SZDJxQUFBQUFDaURnQUFBQUFBQUJDcUVFUVJMQ2d3cEJHTWxKa0l6OGpLaEd2ajRrNmp6Um5xYXNOS0llb2g1Z0k3QkphQzFBMUFvTkJqSmdieUFwVlM0SURsWmdEVTVXVUF4RUtETm1tQUxIelpwMEZrejFGTVRtR0ZsMUZNRXlvZElhdmNDQVVIRFdyS0FJQTRhYTJvQ2dJTEVCdXBaZ0h2QWhFQmNaNmpvUUJ4Uzc2QWdjY3JGbGN6QnZLTEMwUUkyY0JvQ0Z2ZlREQW83ZW9PUUlucURQQnR2ckRFWkJOWU41eHdOd3hRUmZ3OFpRNXdRVkx2TzhPWVUrbUh2RkxsRGgwNU1kZzdCVDZZclJQcENCem5NQjJyLy94S0pqeXlPaCtjSW1yMi80ZG9zY3dENm5lWmp1WlI0QWdBQUJZQUFBQUJ5MXhjZFF0eFlCWVlaZGlma1VEZ3p6WGFYbjk4WjBvaTlJTFU1bUJqRkFObVJ3bFZKMy82allEQW14YWlERzMvNnhqUVFDQ0trUmIvNmtnL3dXK2tTSjUvL3JMb2JrTFNpS21xUC8waWtKdURhU2FTZi82SmlMWUxFWW5XLytrWGcxV1JWSkwvOUVtUTFZWklzdi82UXp3eTVxazcvK3RFVTBua2xzMy96SVVNUEtOWC82eVpMZitrRmdBZmdHeUxGQVV3WS8vdVFaQVVBQmNkNVVpTlBWWEFBQUFwQUFBQUFFMFZaUUt3OUlTQUFBQ2dBQUFBQVZRSXlnSUVsVnJGa0JTK0poaStFQXV1K2xLQWtZVUVJc21FQUVvTWVEbUNFVE12ZlNIVEdrRjVSV0g3a3ovRVNIV1BBcS9rY0NSaHFCdE1kb2tQZE03dmlsN1JHOThBMnNjN3pPNlp2VGRNN3BtT1VBWlRuSlcrTlh4cW1kNDFkcUo2bUxUWHhyUHBuVjhhdmFJZjVTdkw3cG5kUHZQcG5kSlI5S3V1OGZlUHZ1aXVob3JnV2pwN01mL1BSanhjRkNQRGtXMzFzcmlvQ0V4aXZ2OWxjd0tFYUhzZi83b3cyRmwxVC85UmtYZ0VoWUVsQW9DTEZ0TUFyeHdpdkRKSitiUjFIVEtKZGxFb1RFTENJcWdFd1ZHU1EraEltME5iSzhXWGNURUkwVVBvYTJOYkc0eTJLMDBKRVdiWmF2SlhrWWFxbzlDUkhTNTVGY1pUaktFazNOS29DWVVuU1Ewcld4clpiRktiS0loT0tQWmUxY0pLelpTYVFySXlVTEhEWm1WNUs0eHlTc0RSS1dPcnVhbkd0akxKWEZFbXdhSWJETFgwaElQQlVRUFZGVmtRa0RvVU5mU29EZ1FHS1Bla294ZUd6QTREVXZubjRieHpjWnJ0SnlpcEtmUE55NXcrOWxuWHdncXNpeUhOZVNWcGVtdzRiV2I5cHNZZXEvL3VRWkJvQUJRdDR5TVZ4WUFJQUFBa1FvQUFBSHZZcEw1bTZBQWdBQUNYREFBQUFENTlqYmxUaXJRZTl1cEZzbVpicE11ZHk3THoxWDFEWXN4T09TV3BmUHFOWDJXcWt0SzBETXZ1R3dsYk5qNDRUbGVMUFErR3NmYitHT1dPS0pvSXJXYjNjSU1lZU9ONmx6MnVtVHFNWFY4TWozMHlXUHBqb1NhOXVqSzhTeWVKUDV5NW1PVzFENmh2TGVwZXZlRUFFRG8wbWdDUkNsT0VnQU52M0I5YTZmaWtnVVN1L0RtQU1BVHJHeDdubmc1cDVpaW1QTlpzZlFMWUIyc0RMSWt6UktaT0hHQWFVeURjcEZCU0xHOU1DUUFMZ0FJZ1FzMll1bk9zekxTQXlRWVBWQzJZZEdHZUhEMmRUZEprMXBBSEdBV0RqbmtjTEtGeW1TM1JRWlRJbnp5U29Cd01HMFF1ZUMzZ01zQ0VZeFVxbHJjeEs2azFMUVFjc215WWVRUGRDMllmdUdQQVNDQmtjVk1RUXFwVkpzaHVpMXRrWFFKUVYwT1hHQVpNWFNPRUVCUmlyWGJWUlFXN3VncTdJTTdyUFdTWnlEbE0zSXVORWt4ekNPSjBueTJUaE5reVJhaTFiNmV2Ly8zZHpOR3pOYi8vNHVBdkhUNXNVUmNaQ0ZjdUtMaE9GczhtTEFBRUF0NFVXQUFJQUJBQUFBQUI0cWJIbzB0SWpWa1VVLy91UVpBd0FCZlNGejNacVFBQUFBQW5nd0FBQUUxSGpNcDJxQUFBQUFDWkRnQUFBRDVVa1RFMVVnWkVVRXhxWXluTjFxWnZxSU9SRUVGbUJjSlFrd2R4aUZ0dzBxRU9rR1lmUkRpZkJ1aTlNUWc0UUFIQXFXdEFXSG9DeHUxWWY0VmZXTFBJTTJtSERGc2JRRVZHd3lxUW9RY3duZkhlSWtOdDlZbmtpYVMxb2l6eWNxSnJ4NEtPUWphaFp4V2JjWmd6dGoyYzQ5bktta0lkNDRTNzFqMGM4ZVY5eURLNnVQUnp4NVgxOGVEdmp2UTZ5S285WlNTNmwvLzhlbGVQSy9MZi8vSUluck9GL0Z2RG9BRFlBR0JNR2I3RnRFcm01TVhNbG1QQUpRVmdXdGE3WngyZ28rOHhKMFVpQ2I4TEhIZGZ0V3lMSkUwUUlBSXNJK1ViWHU2N2RaTWptZ0RHQ0dsMUgrdnBGNE5TRGNrU0lrazdWZCtzeEVoQlFNUlU4ai8xMlVJUmh6U2FVZFErclFVNWtHZUZ4bStoYjFvaDZwV1dtdjN1dm1SZURsMFVudnRhcFZhSXpvMWpaYmYvcEQ2RWxMcVNYK3JVbU9RTnBKRmEvcitzYTRlL3BCbEFBQm9BQUFBQTNDVWdTaExkR0l4c1k3QVVBQlBScmdDQUJkRHVRNUdDN0RxUFFDZ2JiSlVBb1JTVWorTklFaWcwWWZ5V1VobzFWQkJCQS8vdVFaQjRBQlp4NXpmTWFrZUFBQUFtd0FBQUFGNUYzUDB3OUd0QUFBQ2ZBQUFBQXdMaE1EbUFZV01nVkVHMVUwRklHQ0JnWEJYQXRmTUgxMDAwMEVFRUVFRUNVQllsbjAzVFRUZE5CRFpvcG9wWXZyVFRkTmEzMjVtSW1OZzNUVFBWOXEzcG1ZMHhvTzZidjNyMDB5K0lER2lkLzlhYWFaVEdNdWo5bXB1OU1waW8xZFhycjVIRVJUWlNtcVUzNkEzQ3Vtek4vOVJvYnYvWHg0djlpamtTUlNOTFFoQVd1bWFwODJXUlNCVXFYU3RWL1ljUytYVkxuU1MrV0xEcm9xQXJGa01Fc0FTK2VXbXJVenJPMG9FbUU0MFJsTVo1K09ESWtBeUtBR1V3WjNtVkttY2FtY0puTVcyNk1SUGdVdzZqK0xraHlIR1ZHWWpTVVVLTnB1SlVRb09JQXlEdkV5RzhTNXlmSzZkaFpjMFR4MUtJL2d2aUtMNnF2dkZzMStiV3RhejU4dVVObnJ5cTZrdDVSek9Da1BXbFZxVlgyYS9FRUJVZFUxS3JYTGY0MEdvaWlGWEsvLy9xcG9pRFhyT2dxRFIzOEpCMGJ3N1NvTCtaQjlvMVJDa1FqUTJDQllaS2QvK1ZKeFpSUlpscVNrS2l3czBXRnhVeUN3c0tpTXk3aFVWRmhJYUNyTlFzS2tUSXNMaXZ3S0tpZ3NqOFhZbHd0L1dLaTJONGQvL3VRUkNTQUFqVVJOSUhwTVpCR1lpYVFQU1l5QUFBQkxBQUFBQUFBQUNXQUFBQUFwVUYvTWcrMGFvaFNJUm9iQkFzTWxPLy9LazRzb29zeTFKU0ZSWVdhTEM0cVpCWVdGUkdaZHdxS2l3a05CVm1vV0ZTSmtXRnhYNEZGUlFXUitMc1M0Vy9yRlJiLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vVkVGSEFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFVMjkxYm1SaWIza3VaR1VBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1qQXdOR2gwZEhBNkx5OTNkM2N1YzI5MWJtUmliM2t1WkdVQUFBQUFBQUFBQUNVPVwiKTtcclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlIGEgd2FybiBhdWRpbyBvYmplY3QgYW5kIGxvYWQgYSBzb3VuZCBmaWxlIGZyb20gYSBkYXRhIFVSTC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgd2FybkF1ZGlvID0gbmV3IEF1ZGlvKFwiZGF0YTphdWRpby9tcDM7YmFzZTY0LC8vdVF4QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFXR2x1WndBQUFBOEFBQUFIQUFBS1l3QXBLU2twS1NrcEtTa3BLU2twS1UxTlRVMU5UVTFOVFUxTlRVMU5kM2QzZDNkM2QzZDNkM2QzZDNlQ2dvS0Nnb0tDZ29LQ2dvS0Nnb0t5c3JLeXNyS3lzckt5c3JLeXN0YlcxdGJXMXRiVzF0YlcxdGJXLy8vLy8vLy8vLy8vLy8vLy8vOEFBQUE1VEVGTlJUTXVNVEF3QXFVQUFBQUFMbjRBQUJSR0pBTWZRZ0FBUmdBQUNtT0tsdVFiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEvL3VBeEFBQUNWUkxaTlNSZ0FQQ1FpejNNMEFBQUlBQXJBbUNaUHBBQ0FBQVFNVkRQTkdqUnpML2lJZ0dMZit1NGdFSFJBRDRQNE9BZ0dNSHdmQi9VQ0FZNFBoL2dnNzBjUUEvd2NER29Idy9sQVFkeE8vaUIzQjhQNmdRZC96NEFBQUJhTFVrbGVLWUFBQUFBQ1J3Rnd3RVpYQzg1UmkrbytaWEowT3VDWGdvQlVEUVhQQys0WkdCUTBiaVVEd25vQ293TDZqZkFxUkxvZ29CaWtocUpSSlFESkJCT3prOEJrdzZSWUU4Z09HRGhTQk1FQTRDTGxJMDhWd2NhSlJBbVFLRVFiTkRMRE1rQUUrSkpDOExwRGc0RlRCMUMwVG9MQkNlSmtRaUVHTXNuU1hVa1FPa000ZnFITWRSSkZ5WkQyV2tWRWliT2tSZXRaMGQyZElOTkdMQkJEVlJSS2hxc29sdEpJdnJSbGtySUZsQjJKWG1oYmthdEpaTWtna3Nta01uMldpY1NtWlBzbzZsY21YeVpQTFVjYWlWRWxGWlNLaVhaRXNGeEZpaWd0U1JVLy8vL2FvdGYvLy9vcUxMcXFZQVJtQkJESFFBYTYvN0RYSmxJSnpYTEZXY3c4MXFMUDFaZW1uLyszREVEZ0JRWWExcDNaYUFDakUxclBxdzBBRmRFU0FNUmdTNmVxU01wZ0pFVGsxV2dtcGE2eCtDeEtObmRXdEVIa3YwbHV6b0pvQ3FHMlNLQ0wxWGRBUzhsVHkxTDlGUTZIdjZNa1Q2THQxSnFKeGRSLzBCL01mOWxsQkJmN09lUmIrc3lLSnJiNjVXZGR2cm5UUlNtL1RMNkxmN2xoNyt1WXJXZ3dBemNFUUZsZ1prZHR1RGNEb2tKTzc3Ynl1SDRiamNEdnhVWGdYUkVzRG5qalROanRURjhCVW5WdTYxWFRZUWdOc2hwM3V0Und1QW5BWDgyWjEzc2NNUWhqWk5kMTNTY0xhUGRicnF2UUtpUk4xL1ZZYUhSdXU2NlJ3WlpzdjFVcFJMOTEreWxFRk5sMzFXSGNidC9ZNFh6Njc2OWlRVGQyWDJVc2dJLzF5NlozWDlSa2FtNi9xc1ZLYnFBQUFKSUJsTVk0VUFBQUFyQ0I5S2lDc1hYTWU2SHFXSXNLMGh1dHlDQUNNcHdxaGJjd0FzRmdTeEJBMUJzeUxlLy91QXhCZ0FIdklSWTVtcUFBR1JER3Fqbm1BQUZqQUdrVEdJWHpBNG9FTkpFMkFJQWpxSHdMU0JtU0JTUHFBS2FsUWNBM0ErWXRFVkQ4Z1VUa3NjVUxXRGM0cElrRUYrTENSRWk1TkJ2WnFaQzBEYkdjRS9MaUtEYUY4aWZKd1VrUzV4UW5vbUVUZ3llT1dTMlBDQmdMTlBWakxGUlVneDVJcERUTHhqTWhtYzZRS1R6R0l5ekptSXpKdkhVVENKa1E5RlN4OUZ5U2hmeC81ZkxTWlNJa2ZNQjBteG9tUUVxcEdRN3k4b3ZNeVJIaytrbVJ4aGs2ZnlCSlR4TlpZSjgzUklFZlRVT2FpbzRSWFVSSTJNajVoLy8vL25TVy8vLy9RblNSUUNwQUFrU0xhTGFKcVMxWlA0VzROVVhGWVR5SEljcms4Y3gxWURBSkp5SkdlMWVTSkhEaVUvL3NjREFKRmlTUWRMQlFHandLZ3JnclBZTkEwb0dnNlZCYkVvS3ZCWGtsQTFxUEZRM2xRVldDdkJXRFFkNnpzU2dyaVdXRG1vR3A3N3ZMQnkvLzh0ZmwwWmw3LzlmLy8vLy8vLy8zMHk3Y3lacWVGbDF5WVVaUUV3dUdOYUlFLy8vLy8vLy8vLy8vLy8reERFRmdQRVZiRVFBQVIreUtRMFlnS0FJQUgvL3QzcC83cysxV1JPbjlmLy8vL3ZYNlZkamxiYzdUbEtzamhsRWtBb2xZalFjRGdZNWs4RlFRVUFRU0FMdE1BUWNkSUFJRW1PZURCSUZEQUFzd2RBWnNwYlpLeEh5RURBU1pJRmgyQk80TmpoRGYvN2tNUVpnQitxRVZ1NXVwQVN3VFhzTTdNUUFRTWFCRUFZQW9NNEJ3YkRMNHNRR0hqNEIwUXpBTUxZbkNxWGlDRUVGQ0EzZ0tvQVFCQy93R2NVbUF3SFI0SXVvMFRGd0V5Uk5NdmhmRURBUWpBSUVBeDRnRHFRUEptNXVYR0lJWWgrUU1DNUFSY29qSUZnei9JbVN3eTVYSXViR2dmNEc4b0dFZ0FDd0dSSFVCZ2tILzhuR2NxRjgzTDV1d2RrWEtROENBQkx3cElQWkRha2YvdWhOQ2JJbU9lVDdrVFVvZFFXS0RHa0ZERmlpYUhLQzlCRWYvL1FXYm1aZmN2cE0yczNhTlVjU0tJM3lrWGlMaWwyU0tJNUgvLy8vdVgwa1AvLy96WlF2aWRRQWJnQUNFQUJqS2FqdElJanRJQ1dXdXU1REVQUHRLczQ5cFJNSTJGd2tzek9zNHFVQUl3VVJaZzZLUzAyaU1SQVlpeHN0MGw1cTRhT1V6VkEyT3FjMFNMSWFrR05DZ1hqR3RDaXh3UjJUcFZkYXJzcFprSi9ObHBYWlNNekhna2lkcloyclFNUmhGNU83S1d0ak1aVW4wazJwVkp5SEVSS0tGS3BkMkc0WDJkbEx1eXlIRjh2c2t5azZLU3h5REkyWlNyT3RSaVNCYVdxenJVaVlFNGJsYWh1eTFKRHdYVkx2V3AwQ2VLQnFJWHdEVEJrSkNBRGRhMGZhVTFVVnBzTnVQLzdjTVFJZ0ZKZHJXV05QVytLVGJZczhyRFFBT0M4OHRvNVBLcC9TMlM2QjNIMWFMVEVLU3NNR2VmVnE2Kzk0eGhoRGNnNXp2Vk1XMVVlQmp1dm5QMzg1akVUZk9lN21kVUJ5UTYxUkhkekpXSUpySS82cEFVcVdxSStxWVVxSS9mUDB3V1B1N21QcktoL1VqdTVudXg3ZTI3LzRsdzFvUkZWVXp1TTJIdWZxb2hoQ24yUjFYOGtxbDdtZTdpRkRwNjUvKzNrRENuUUNsRVFSMzMzdHVnd0FIdERWdS9BOUM1Ylc2V3pSWU93SlJHSERsa3V0YWFaaW1hQVRVWlp1YnBLdXVnSjRGVlY5U25TQkxJSGtqQkIzVXc3d1I4TmxBNm5aYTF1WkIwUG1qTDlsazhlQ2xLc3ZZNk9NOGgrcEE2Tmh4VjZ1WmxNMWRtWHVwVGtJNnUvWFFKVXUyWmRtWE15V092NjEySkZUdXBkdFJnaWc2cjFYU0swRGQxZTZqQTNQTFhaU3JxTUhOR1ZBQXdRUVlpQUFBQUFBQUFpUWd6Lys0REVCd0FkWmRsZldhbUFBVkVVbzVlWVVBQ0pqbUZ3TUJjQVcxYUNKNEtJRm5uaWJFRG4waEdWS2cwakFVMHNRMFVtUTRkd3FBRHZGNExxdzRZeEJqVVRWYVFMalBsY09qQXRnWk5qRTRPY1dRYUVBMFBITks0ZkFGL0FWRUlTRFBuQ0JGWXlKNFJVYWFUQ25DcUQyeGNTNDRoaUZGRnBpaFdIL0t0WTJTNFJnajArUlF4RXBFMG92RjR5TmxrekxZcHVpSkl4ZU16VVZzY0p3ZlJPbW5SWW1wa1hwSGp1VkYxdU9rbHlLRHBMU0p1THBNd0lJUG9ta2t0R3RqS3FvV2hMRytjbmlCWmtOczBJb1Z6VkV2anlVeXdPUVRKTUdob1JZeVUraXkwVExNbFhrb1MzLy8vNWZNU2VSLy9hQ29Fb0JhTWo2RXhKcXdRZ0pLQkNBa0ZUWkpQWURKZ0dBSURDeWlJZEsvME1hWjFLVkJJUE1KQjR5bFpETVlXTS8vME5US1dZUE1EUThOQTBBZ2EvNEtsZzREU3pvaVVIZitkTEhrM0NLZS93VmNvOXhFcE1RVTFGTXk0eE1EQ3FxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxZz09XCIpO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbml0aWFsaXplcyBzZXJ2aWNlcyBhbmQgYXBwbGljYXRpb24gc2V0dGluZ3MsIHNldHMgdXAgY29udGV4dCBoZWxwZXJzLCBcclxuXHQgKiBhbmQgaW5pdGlhbGl6ZXMgdGhlIGVkaXRvciB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbnMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gcm91dGUgLSBBY3RpdmF0ZWRSb3V0ZSBpbnN0YW5jZSBmb3IgYWNjZXNzaW5nIHJvdXRlIHBhcmFtZXRlcnMgYW5kIGRhdGEuXHJcblx0ICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIC0gQ2hhbmdlRGV0ZWN0b3JSZWYgaW5zdGFuY2UgZm9yIG1hbnVhbGx5IHRyaWdnZXJpbmcgY2hhbmdlIGRldGVjdGlvbi5cclxuXHQgKi9cclxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBUaXRsZSBzZXJ2aWNlICovXHJcblx0XHR0aGlzLnRpdGxlU2VydmljZSA9IHRoaXMuZ2V0U2VydmljZShUaXRsZSk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgZGlhbG9nIHNlcnZpY2UgZm9yIHNob3dpbmcgbW9kYWxzICovXHJcblx0XHR0aGlzLmRpYWxvZ1NlcnZpY2UgPSB0aGlzLmdldFNlcnZpY2UoVmREaWFsb2dTZXJ2aWNlKTtcclxuXHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBNYXRlcmlhbCBkaWFsb2cgZm9yIG1hbmFnaW5nIGRpYWxvZ3MgKi9cclxuXHRcdHRoaXMuZGlhbG9nID0gdGhpcy5nZXRTZXJ2aWNlKE1hdERpYWxvZyk7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgbWVkaWEgc2VydmljZSBmb3IgbWVkaWEgcXVlcmllcyBhbmQgYnJvYWRjYXN0ICovXHJcblx0XHR0aGlzLm1lZGlhID0gdGhpcy5nZXRTZXJ2aWNlKFZkTWVkaWFTZXJ2aWNlKTtcclxuXHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBzbmFja2JhciBzZXJ2aWNlIGZvciBub3RpZmljYXRpb25zICovXHJcblx0XHR0aGlzLnNuYWNrQmFyU2VydmljZSA9IHRoaXMuZ2V0U2VydmljZShNYXRTbmFja0Jhcik7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgcm91dGVyIHNlcnZpY2UgZm9yIG5hdmlnYXRpb24gKi9cclxuXHRcdHRoaXMucm91dGVyID0gdGhpcy5nZXRTZXJ2aWNlKFJvdXRlcik7XHJcblxyXG5cdFx0LyogSW5pdGlhbGl6ZSB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MgKi9cclxuXHRcdHRoaXMuYXBwU2V0dGluZyA9IHRoaXMuZ2V0U2VydmljZShBcHBTZXR0aW5nKTtcclxuXHJcblx0XHQvKiBJbml0aWFsaXplIHRoZSBsb2NhdGlvbiBzZXJ2aWNlIGZvciBVUkwgbWFuaXB1bGF0aW9uICovXHJcblx0XHR0aGlzLmxvY2F0aW9uID0gdGhpcy5nZXRTZXJ2aWNlKExvY2F0aW9uKTtcclxuXHJcblx0XHQvKiBTZXQgdXAgY29udGV4dCBoZWxwZXJzIHdpdGggcm91dGUgYW5kIGFwcGxpY2F0aW9uIHNldHRpbmdzICovXHJcblx0XHRDb250ZXh0SGVscGVyLmFjdGl2YXRlZFJvdXRlID0gcm91dGU7XHJcblx0XHRDb250ZXh0SGVscGVyLnJvdXRlciA9IHRoaXMucm91dGVyO1xyXG5cdFx0Q29udGV4dEhlbHBlci5hcHBTZXR0aW5nID0gdGhpcy5hcHBTZXR0aW5nO1xyXG5cclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGVkaXRvciB3aXRoIGRlZmF1bHQgY29uZmlndXJhdGlvbnMgKi9cclxuXHRcdHRoaXMuaW5pdEVkaXRvcigpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTGlmZWN5Y2xlIGhvb2sgdGhhdCBpcyBjYWxsZWQgYWZ0ZXIgZGF0YS1ib3VuZCBwcm9wZXJ0aWVzIG9mIGEgZGlyZWN0aXZlIGFyZSBpbml0aWFsaXplZFxyXG5cdCAqL1xyXG5cdG5nT25Jbml0KCk6IHZvaWQge1xyXG5cdFx0LyogR2V0IG1lbnUgaXRlbXMgZnJvbSByb3V0ZSBzbmFwc2hvdCAqL1xyXG5cdFx0dmFyIG1haW5Sb3V0ZSA9IHRoaXMuZ2V0TWFpblJvdXRlKHRoaXMucm91dGUuc25hcHNob3QpO1xyXG5cdFx0aWYgKG1haW5Sb3V0ZSkge1xyXG5cdFx0XHR0aGlzLm1lbnUgPSBtYWluUm91dGUuZGF0YS5tZW51O1xyXG5cdFx0XHR0aGlzLnNldFRpdGxlcygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFNldCBwcm9qZWN0IG5hbWUgJiBkZWJ1ZyBtb2RlICovXHJcblx0XHR0aGlzLnByb2plY3ROYW1lID0gdGhpcy5hcHBTZXR0aW5nLnByb2plY3ROYW1lO1xyXG5cdFx0dGhpcy5kZWJ1ZyA9IHRoaXMuYXBwU2V0dGluZy5kZWJ1ZyA/PyBmYWxzZTtcclxuXHJcblx0XHQvKiBDaGVjayBpZiB0aGUgdXNlciBoYXMgcGVybWlzc2lvbiB0byBjcmVhdGUsIHVwZGF0ZSwgYW5kIGRlbGV0ZSAqL1xyXG5cdFx0dGhpcy5jYW5DcmVhdGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoJ0NyZWF0ZScpO1xyXG5cdFx0dGhpcy5jYW5VcGRhdGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoJ1VwZGF0ZScpO1xyXG5cdFx0dGhpcy5jYW5EZWxldGUgfHw9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoJ0RlbGV0ZScpO1xyXG5cclxuXHRcdC8qIEdldCB0aGUgaGFzaCBmcm9tIHRoZSBVUkwgKi9cclxuXHRcdHRoaXMucm91dGUuZnJhZ21lbnQuc3Vic2NyaWJlKChmcmFnbWVudDogc3RyaW5nIHwgYW55KSA9PiB0aGlzLnVybEhhc2ggPSBmcmFnbWVudCk7XHJcblxyXG5cdFx0LyogQ2hlY2sgcGVybWlzc2lvbnMgYmFzZWQgb24gdGhlIHJvdXRlICovXHJcblx0XHRpZiAodGhpcy5yb3V0ZS5wYXJlbnQpIHtcclxuXHRcdFx0dGhpcy5yb3V0ZS5wYXJlbnQudXJsLnN1YnNjcmliZSgodXJsOiBVcmxTZWdtZW50W10pID0+IHtcclxuXHRcdFx0XHR0aGlzLmNsYXNzTmFtZSA/Pz0gdXJsLmxlbmd0aCA/IHVybFswXS5wYXRoLnJlcGxhY2UoLyguKilzJC8sICckMScpLnJlcGxhY2UoL14uLywgKHVybFswXS5wYXRoWzBdIHx8ICcnKS50b1VwcGVyQ2FzZSgpKSA6ICcnO1xyXG5cdFx0XHRcdHRoaXMuY2FuQ3JlYXRlID0gQXV0aEhlbHBlci5pc1Blcm1pdHRlZChgQ3JlYXRlJHt0aGlzLmNsYXNzTmFtZX1gKTtcclxuXHRcdFx0XHR0aGlzLmNhblVwZGF0ZSA9IEF1dGhIZWxwZXIuaXNQZXJtaXR0ZWQoYFVwZGF0ZSR7dGhpcy5jbGFzc05hbWV9YCk7XHJcblx0XHRcdFx0dGhpcy5jYW5EZWxldGUgPSBBdXRoSGVscGVyLmlzUGVybWl0dGVkKGBEZWxldGUke3RoaXMuY2xhc3NOYW1lfWApO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgdGhlIGN1cnJlbnQgcm91dGUgYW5kIGJhc2Ugcm91dGUgKi9cclxuXHRcdHRoaXMuY3VycmVudFJvdXRlID0gd2luZG93LmJ0b2EodGhpcy5yb3V0ZXIudXJsKTtcclxuXHRcdHRoaXMuY3VycmVudEJhc2VSb3V0ZSA9IHRoaXMucm91dGVyLnVybD8uc3BsaXQoJz8nKVswXT8uc3BsaXQoJzsnKVswXTtcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIFNldCB0aGUgcGFnZSB0aXRsZSBiYXNlZCBvbiB0aGUgbmF2aWdhdGlvbiBlbmQgZXZlbnRcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSh4ID0+IHtcclxuXHRcdFx0bGV0IG5hdmlnYXRpb25FbmQgPSAoeCBhcyBTY3JvbGwpPy5yb3V0ZXJFdmVudCBhcyBOYXZpZ2F0aW9uRW5kO1xyXG5cdFx0XHRpZiAobmF2aWdhdGlvbkVuZCkge1xyXG5cdFx0XHRcdHRoaXMuc2V0VGl0bGVzKCk7XHJcblx0XHRcdFx0dGhpcy5jdXJyZW50Um91dGUgPSB3aW5kb3cuYnRvYShuYXZpZ2F0aW9uRW5kLnVybCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8qIFJldHJpZXZlIHRoZSByZXR1cm4gVVJMIGlmIGFueSBmcm9tIHRoZSBxdWVyeSBwYXJhbWV0ZXJzICovXHJcblx0XHR0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh4ID0+IHRoaXMuc2V0UmV0dXJuVXJsKHgucmV0dXJuVXJsKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBhIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWRcclxuXHQgKi9cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHQvKiBCcm9hZGNhc3QgdG8gYWxsIGxpc3RlbmVyIG9ic2VydmFibGVzIHdoZW4gbG9hZGluZyB0aGUgcGFnZSAqL1xyXG5cdFx0dGhpcy5tZWRpYS5icm9hZGNhc3QoKTtcclxuXHJcblx0XHQvKiBTZXQgcGFnZSB0aXRsZXMgKi9cclxuXHRcdHRoaXMuc2V0VGl0bGVzKCk7XHJcblxyXG5cdFx0LyogXHJcblx0XHQgKiBGb3JjZSBhIG5ldyBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIHNpbmNlIGNoYW5nZSBkZXRlY3Rpb25zIFxyXG5cdFx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdC8qIExpc3RlbiBmb3IgZXhwYW5zaW9uIHBhbmVsIGNoYW5nZXMgaWYgZW5hYmxlZCAqL1xyXG5cdFx0aWYgKHRoaXMuaGFuZGxlRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKSB7XHJcblx0XHRcdHRoaXMub25FeHBhbnNpb25QYW5lbENoYW5nZXMoKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlbG9hZHMgdGhlIGN1cnJlbnQgcGFnZSBvciBjb21wb25lbnQuXHJcblx0ICogXHJcblx0ICogVGhpcyBtZXRob2QgbmF2aWdhdGVzIHRlbXBvcmFyaWx5IHRvIHRoZSByb290IFVSTCBhbmQgdGhlbiBcclxuXHQgKiBuYXZpZ2F0ZXMgYmFjayB0byB0aGUgY3VycmVudCBVUkwgdG8gZWZmZWN0aXZlbHkgcmVmcmVzaCB0aGUgcGFnZSBvciBjb21wb25lbnQuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgbmF2aWdhdGlvbiBpcyBzdWNjZXNzZnVsLFxyXG5cdCAqICAgICAgICAgICAgICAgICAgIHJlY2VpdmVzIHRoZSBjdXJyZW50IFVSTCBhcyBhbiBhcmd1bWVudC5cclxuXHQgKi9cclxuXHRwdWJsaWMgcmVsb2FkUGFnZShjYWxsYmFjaz86IChjdXJyZW50VXJsOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcclxuXHRcdGxldCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgcmVwbGFjZVVybDogdHJ1ZSB9KS50aGVuKCgpID0+IHtcclxuXHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChjdXJyZW50VXJsLCB7IHJlcGxhY2VVcmw6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcblx0XHRcdFx0LyogRXhlY3V0ZSB0aGUgY2FsbGJhY2sgaWYgcHJvdmlkZWQgKi9cclxuXHRcdFx0XHRpZiAoY2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdGNhbGxiYWNrKGN1cnJlbnRVcmwpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlcyBiYWNrIHRvIHRoZSByZXR1cm4gVVJMIGlmIGl0IGV4aXN0cy5cclxuXHQgKi9cclxuXHRwdWJsaWMgbmF2aWdhdGVUb1JldHVyblVybCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnJldHVyblVybCkge1xyXG5cdFx0XHQvKiBQYXJzZSB0aGUgcmV0dXJuIFVSTCBpbnRvIGEgVXJsVHJlZSBvYmplY3QgKi9cclxuXHRcdFx0bGV0IHVybFRyZWU6IFVybFRyZWUgPSB0aGlzLnJvdXRlci5wYXJzZVVybCh0aGlzLnJldHVyblVybCk7XHJcblxyXG5cdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgcmV0dXJuIFVSTCAqL1xyXG5cdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHVybFRyZWUudG9TdHJpbmcoKSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKiBcclxuXHQgKiBGb3JjZXMgYSBuZXcgY2hhbmdlIGRldGVjdGlvbiBjeWNsZSBzaW5jZSBjaGFuZ2UgZGV0ZWN0aW9ucyBcclxuXHQgKiBoYXZlIGZpbmlzaGVkIHdoZW4gYG5nQWZ0ZXJWaWV3SW5pdGAgaXMgZXhlY3V0ZWQuXHJcblx0ICovXHJcblx0cHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XHJcblx0XHQvKiBUcmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb24gKi9cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyB0aGUgcmV0dXJuIFVSTCBhZnRlciBkZWNvZGluZyBpdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSByZXR1cm5VcmwgLSBUaGUgZW5jb2RlZCByZXR1cm4gVVJMIHRvIHNldC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2V0UmV0dXJuVXJsKHJldHVyblVybDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvKiBEZWNvZGUgYW5kIHNldCB0aGUgcmV0dXJuIFVSTCwgaGFuZGxpbmcgcG90ZW50aWFsIGVycm9ycyAqL1xyXG5cdFx0XHR0aGlzLnJldHVyblVybCA9IHJldHVyblVybCA/IGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHJldHVyblVybCkpIDogdW5kZWZpbmVkO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0LyogSGFuZGxlIGVycm9yIHNpbGVudGx5ICovXHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaXN0ZW4gZm9yIGV4cGFuc2lvbiBwYW5lbCBjaGFuZ2VzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uRXhwYW5zaW9uUGFuZWxDaGFuZ2VzKCk6IHZvaWQge1xyXG5cdFx0LyogTGlzdGVuIGZvciBleHBhbnNpb24gcGFuZWwgY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFF1ZXJ5TGlzdD8uY2hhbmdlcy5zdWJzY3JpYmUoXyA9PiB7XHJcblx0XHRcdC8qIFVuc3Vic2NyaWJlIGZyb20gb2xkICdvcGVuZWQnIGFuZCAnY2xvc2VkJyBzdWJzY3JpcHRpb25zICovXHJcblx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLmZvckVhY2goeCA9PiB4LnVuc3Vic2NyaWJlKCkpO1xyXG5cclxuXHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG5cdFx0XHQvKiBHZXQgdGhlIHBhbmVsIGVuZHMgd2l0aCB0aGUgSUQgJ25ldycgKi9cclxuXHRcdFx0dmFyIG5ld0V4cGFuc2lvblBhbmVsSW5kZXggPSB0aGlzLm1hdEV4cGFuc2lvblBhbmVsRWxlbWVudFF1ZXJ5TGlzdD8udG9BcnJheSgpPy5maW5kSW5kZXgoeCA9PiB4Lm5hdGl2ZUVsZW1lbnQ/LmlkPy5lbmRzV2l0aCgnLm5ldycpKSA/PyAtMTtcclxuXHRcdFx0aWYgKG5ld0V4cGFuc2lvblBhbmVsSW5kZXggPj0gMCkge1xyXG5cdFx0XHRcdC8qIENsb3NlIGFsbCBwYW5lbHMgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py5maXJzdD8uYWNjb3JkaW9uPy5jbG9zZUFsbCgpO1xyXG5cclxuXHRcdFx0XHQvKiBPcGVuIHRoZSBuZXcgcGFuZWwgKi9cclxuXHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py50b0FycmF5KClbbmV3RXhwYW5zaW9uUGFuZWxJbmRleF0/Lm9wZW4oKTtcclxuXHJcblx0XHRcdFx0LyogRGV0ZWN0IGNoYW5nZXMgKi9cclxuXHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgcGFuZWwgd2l0aCB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgSUQgKi9cclxuXHRcdFx0XHR0aGlzLnVybEhhc2g/LnNwbGl0KCcuJylcclxuXHRcdFx0XHRcdD8ucmVkdWNlKChhY2N1bXVsYXRvcjogYW55LCBjdXJyZW50VmFsdWUsIGluZGV4KSA9PiBhY2N1bXVsYXRvci5jb25jYXQoKGluZGV4ID4gMCA/IChhY2N1bXVsYXRvci5zbGljZSgtMSkuam9pbignLicpICsgJy4nKSA6ICcnKSArIGN1cnJlbnRWYWx1ZSksIFtdKVxyXG5cdFx0XHRcdFx0Py5mb3JFYWNoKChoYXNoOiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdFx0dmFyIGV4cGFuc2lvblBhbmVsSW5kZXggPSB0aGlzLm1hdEV4cGFuc2lvblBhbmVsRWxlbWVudFF1ZXJ5TGlzdD8udG9BcnJheSgpPy5maW5kSW5kZXgoeCA9PiB4Lm5hdGl2ZUVsZW1lbnQuaWQgPT0gaGFzaCkgPz8gLTE7XHJcblx0XHRcdFx0XHRcdGlmIChleHBhbnNpb25QYW5lbEluZGV4ID49IDApIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0Py50b0FycmF5KClbZXhwYW5zaW9uUGFuZWxJbmRleF0/Lm9wZW4oKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIERldGVjdCBjaGFuZ2VzIGZvciBvcGVuZWQgcGFuZWxzICovXHJcblx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Q/LmZvckVhY2goeSA9PiB7XHJcblx0XHRcdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnMucHVzaCh5Lm9wZW5lZC5zdWJzY3JpYmUoXyA9PiB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy5zZXRVcmxIYXNoKSB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgb3BlbmVkIHBhbmVsICovXHJcblx0XHRcdFx0XHRcdHZhciBjdXJyZW50UGFuZWxJZCA9IHlbJ192aWV3Q29udGFpbmVyUmVmJ10/LmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmlkO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIHBhbmVsIElEIGlzIHNldCwgc2V0IGl0IGFzIHVybCBzZWdtZW50IChoYXNoKSAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFBhbmVsSWQpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwgeyBmcmFnbWVudDogY3VycmVudFBhbmVsSWQsIHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHRcdC8qIE90aGVyd2lzZSByZW1vdmUgdGhlIHNlZ21lbnQgZnJvbSB0aGUgdXJsICovXHJcblx0XHRcdFx0XHRcdGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7IHJlcGxhY2VVcmw6IHRydWUgfSk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyAqL1xyXG5cdFx0XHRcdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHRcdFx0fSkpO1xyXG5cclxuXHRcdFx0XHQvKiBEZXRlY3QgY2hhbmdlcyBmb3IgY2xvc2VkIHBhbmVscyAqL1xyXG5cdFx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxTdWJzY3JpcHRpb25zLnB1c2goeS5jbG9zZWQuc3Vic2NyaWJlKF8gPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuc2V0VXJsSGFzaCkge1xyXG5cdFx0XHRcdFx0XHQvKiBHZXQgdGhlIGlkIG9mIHRoZSBjdXJyZW50IG9wZW5lZCBwYW5lbCAqL1xyXG5cdFx0XHRcdFx0XHR2YXIgY3VycmVudFBhbmVsSWRQYXJ0cyA9IHlbJ192aWV3Q29udGFpbmVyUmVmJ10/LmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQ/LmlkPy5zcGxpdCgnLicpO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogSWYgdGhlIHBhbmVsIElEIGlzIHNldCwgc2V0IGl0IGFzIHVybCBzZWdtZW50IChoYXNoKSAqL1xyXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudFBhbmVsSWRQYXJ0cy5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHsgZnJhZ21lbnQ6IGN1cnJlbnRQYW5lbElkUGFydHMuc2xpY2UoMCwgLTEpLmpvaW4oJy4nKSwgcmVwbGFjZVVybDogdHJ1ZSB9KTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHRcdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0LyogTm90aWZ5IGV4cGFuc2lvbiBwYW5lbCBsaXN0IGNoYW5nZXMgKi9cclxuXHRcdGlmICh0aGlzLm1hdEV4cGFuc2lvblBhbmVsUXVlcnlMaXN0KSB7XHJcblx0XHRcdHRoaXMubWF0RXhwYW5zaW9uUGFuZWxRdWVyeUxpc3Qubm90aWZ5T25DaGFuZ2VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXRyaWV2ZXMgYW4gaW5zdGFuY2UgZnJvbSB0aGUgaW5qZWN0b3IgYmFzZWQgb24gdGhlIHByb3ZpZGVkIHRva2VuLlxyXG5cdCAqIElmIG5vdCBmb3VuZDpcclxuXHQgKiAtIFRocm93cyB7QGxpbmsgTm9Qcm92aWRlckVycm9yfSBpZiBubyBgbm90Rm91bmRWYWx1ZWAgdGhhdCBpcyBub3QgZXF1YWwgdG9cclxuXHQgKiBJbmplY3Rvci5USFJPV19JRl9OT1RfRk9VTkQgaXMgZ2l2ZW5cclxuXHQgKiAtIFJldHVybnMgdGhlIGBub3RGb3VuZFZhbHVlYCBvdGhlcndpc2VcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgZ2V0U2VydmljZTxUPih0b2tlbjogVHlwZTxUPik6IFQge1xyXG5cdFx0cmV0dXJuIFNlcnZpY2VMb2NhdG9yLmdldFNlcnZpY2UodG9rZW4pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgbWFpbiByb3V0ZSBmcm9tIHRoZSBnaXZlbiBzbmFwc2hvdCBieSB0cmF2ZXJzaW5nIHVwIHRvIHRoZSBwYXJlbnQgcm91dGVzXHJcblx0ICogaWYgdGhlIGN1cnJlbnQgc25hcHNob3QgZG9lcyBub3QgaGF2ZSBhIG1lbnUgZGVmaW5lZC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSBzbmFwc2hvdCAtIFRoZSBhY3RpdmF0ZWQgcm91dGUgc25hcHNob3QgdG8gZXZhbHVhdGUuXHJcblx0ICogQHJldHVybnMgVGhlIG1haW4gcm91dGUgc25hcHNob3QgdGhhdCBoYXMgYSBtZW51IGRlZmluZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldE1haW5Sb3V0ZShzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xyXG5cdFx0aWYgKHNuYXBzaG90ICYmIHNuYXBzaG90IS5wYXJlbnQgJiYgIXNuYXBzaG90LmRhdGEubWVudSkge1xyXG5cdFx0XHQvKiBSZWN1cnNpdmVseSBjYWxsIHRvIGdldCB0aGUgbWFpbiByb3V0ZSBmcm9tIHRoZSBwYXJlbnQgc25hcHNob3QgKi9cclxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0TWFpblJvdXRlKHNuYXBzaG90IS5wYXJlbnQhKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gc25hcHNob3Q7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTaG93cyBhIGNvbmZpcm0gZGlhbG9nIHRvIGRlbGV0ZSBhIHNpbmdsZSBpdGVtLlxyXG5cdCAqXHJcblx0ICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgdGhlIGRpYWxvZyBhZnRlciBpdCBpcyBjbG9zZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNob3dEZWxldGVJdGVtRGlhbG9nKCk6IE9ic2VydmFibGU8YW55PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Db25maXJtKHtcclxuXHRcdFx0bWVzc2FnZTogJGxvY2FsaXplYDpAQGRpYWxvZy5tZXNzYWdlLmRlbGV0ZS5vbmU6QXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGl0ZW0/YCxcclxuXHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkaWFsb2cudGl0bGUuZGVsZXRlOkNvbmZpcm0gRGVsZXRlYCxcclxuXHRcdFx0Y2FuY2VsQnV0dG9uOiAkbG9jYWxpemVgOkBAY2FuY2VsOkNhbmNlbGAsXHJcblx0XHRcdGFjY2VwdEJ1dHRvbjogJGxvY2FsaXplYDpAQGRlbGV0ZTpEZWxldGVgLFxyXG5cdFx0fSkuYWZ0ZXJDbG9zZWQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNob3dzIGEgY29uZmlybSBkaWFsb2cgdG8gZGVsZXRlIG11bHRpcGxlIHNlbGVjdGVkIGl0ZW1zLlxyXG5cdCAqXHJcblx0ICogQHJldHVybnMgQW4gb2JzZXJ2YWJsZSB0aGF0IGVtaXRzIHRoZSByZXN1bHQgb2YgdGhlIGRpYWxvZyBhZnRlciBpdCBpcyBjbG9zZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNob3dEZWxldGVJdGVtc0RpYWxvZygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7XHJcblx0XHRcdG1lc3NhZ2U6ICRsb2NhbGl6ZWA6QEBkaWFsb2cubWVzc2FnZS5kZWxldGUubGlzdDpBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBzZWxlY3RlZCBpdGVtcz9gLFxyXG5cdFx0XHR0aXRsZTogJGxvY2FsaXplYDpAQGRpYWxvZy50aXRsZS5kZWxldGU6Q29uZmlybSBEZWxldGVgLFxyXG5cdFx0XHRjYW5jZWxCdXR0b246ICRsb2NhbGl6ZWA6QEBjYW5jZWw6Q2FuY2VsYCxcclxuXHRcdFx0YWNjZXB0QnV0dG9uOiAkbG9jYWxpemVgOkBAZGVsZXRlOkRlbGV0ZWAsXHJcblx0XHR9KS5hZnRlckNsb3NlZCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgYSBjb25maXJtYXRpb24gZGlhbG9nIHRvIHNlbmQgc29tZSBkYXRhLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBpbiB0aGUgZGlhbG9nLlxyXG5cdCAqIEBwYXJhbSBvYnNlcnZhYmxlIC0gVGhlIG9ic2VydmFibGUgaW5zdGFuY2UgdG8gaGFuZGxlIHRoZSBkYXRhLlxyXG5cdCAqIEBwYXJhbSBzdWNjZXNzQ2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIHN1Y2Nlc3NmdWwgb3BlcmF0aW9uLlxyXG5cdCAqIEBwYXJhbSBlcnJvckNhbGxiYWNrIC0gT3B0aW9uYWwgY2FsbGJhY2sgdG8gYmUgaW52b2tlZCBvbiBhbiBlcnJvci5cclxuXHQgKiBAcGFyYW0gYWNjZXB0QnV0dG9uVGV4dCAtIE9wdGlvbmFsIHRleHQgZm9yIHRoZSBhY2NlcHQgYnV0dG9uLlxyXG5cdCAqIEBwYXJhbSBjYW5jZWxCdXR0b25UZXh0IC0gT3B0aW9uYWwgdGV4dCBmb3IgdGhlIGNhbmNlbCBidXR0b24uXHJcblx0ICovXHJcblx0cHVibGljIHNob3dDb25maXJtYXRpb25EaWFsb2coXHJcblx0XHRtZXNzYWdlOiBzdHJpbmcsXHJcblx0XHRvYnNlcnZhYmU6IE9ic2VydmFibGU8YW55PixcclxuXHRcdHN1Y2Nlc3NDYWxsYmFjaz86IEZ1bmN0aW9uLFxyXG5cdFx0ZXJyb3JDYWxsYmFjaz86IEZ1bmN0aW9uLFxyXG5cdFx0YWNjZXB0QnV0dG9uVGV4dD86IHN0cmluZyxcclxuXHRcdGNhbmNlbEJ1dHRvblRleHQ/OiBzdHJpbmcsXHJcblx0XHRkaWFsb2dDb25maWc/OiBNYXREaWFsb2dDb25maWdcclxuXHQpOiB2b2lkIHtcclxuXHRcdHRoaXMuZGlhbG9nU2VydmljZVxyXG5cdFx0XHQub3BlbkNvbmZpcm0oe1xyXG5cdFx0XHRcdG1lc3NhZ2U6IG1lc3NhZ2UsXHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkaWFsb2cudGl0bGUuY29uZmlybTpDb25maXJtYCxcclxuXHRcdFx0XHRjYW5jZWxCdXR0b246IGNhbmNlbEJ1dHRvblRleHQgPz8gJGxvY2FsaXplYDpAQGNhbmNlbDpDYW5jZWxgLFxyXG5cdFx0XHRcdGFjY2VwdEJ1dHRvbjogYWNjZXB0QnV0dG9uVGV4dCA/PyAkbG9jYWxpemVgOkBAeWVzOlllc2AsXHJcblx0XHRcdH0sIGRpYWxvZ0NvbmZpZyA/PyAoPE1hdERpYWxvZ0NvbmZpZz57IG1heFdpZHRoOiA0ODAgfSkpXHJcblx0XHRcdC5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoYWNjZXB0OiBib29sZWFuKSA9PiB7XHJcblx0XHRcdFx0aWYgKGFjY2VwdCkge1xyXG5cdFx0XHRcdFx0b2JzZXJ2YWJlLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0XHRcdG5leHQ6ICh4KSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5zaG93TWVzc2FnZSgkbG9jYWxpemVgOkBAc25hY2tiYXIuc2VuZC5zdWNjZXNzOkRhdGEgc2VudCBzdWNjZXNzZnVsbHkuYCk7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHN1Y2Nlc3NDYWxsYmFjaykge1xyXG5cdFx0XHRcdFx0XHRcdFx0c3VjY2Vzc0NhbGxiYWNrKHgpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fSwgZXJyb3I6IChlcnJvcnMpID0+IHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGVycm9yQ2FsbGJhY2spIHtcclxuXHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soZXJyb3JzKTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBPcGVucyBhIHRhc2sgZGlhbG9nIHdpdGggdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uLlxyXG5cdCAqIFxyXG5cdCAqIEB0eXBlcGFyYW0gVFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgZnJvbSB0aGUgZGlhbG9nLlxyXG5cdCAqIEBwYXJhbSB7UGFydGlhbDxUYXNrRGlhbG9nRGF0YTxUUmVzdWx0Pj59IGNvbmZpZyAtIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIHRhc2sgZGlhbG9nLCBpbmNsdWRpbmcgbWVzc2FnZXMsIGNhbGxiYWNrcywgYW5kIG9ic2VydmFibGUgdGFza3MuXHJcblx0ICogXHJcblx0ICogQGV4YW1wbGUgXHJcblx0ICogLy8gRXhhbXBsZSBvZiBob3cgdG8gY2FsbCBzaG93VGFza0RpYWxvZ1xyXG5cdCAqIHRoaXMuc2hvd1Rhc2tEaWFsb2coe1xyXG5cdCAqICAgICB0aXRsZTogJ1Byb2Nlc3NpbmcgVGFzaycsXHJcblx0ICogICAgIGluUHJvZ3Jlc3NNZXNzYWdlOiAnWW91ciB0YXNrIGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4uLicsXHJcblx0ICogICAgIHN1Y2Nlc3NNZXNzYWdlOiAnVGFzayBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IScsXHJcblx0ICogICAgIGVycm9yTWVzc2FnZTogJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHByb2Nlc3NpbmcgeW91ciB0YXNrLicsXHJcblx0ICogICAgIHRhc2s6IHRoaXMuc29tZU9ic2VydmFibGVUYXNrKCksIC8vIFlvdXIgb2JzZXJ2YWJsZSB0YXNrIGdvZXMgaGVyZVxyXG5cdCAqICAgICBzdWNjZXNzQnV0dG9uQ2xpY2s6IChyZXN1bHQsIGRyKSA9PiB7XHJcblx0ICogICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzcyBidXR0b24gY2xpY2tlZCEnLCByZXN1bHQpO1xyXG5cdCAqICAgICAgICAgLy8gT3B0aW9uYWxseSBoYW5kbGUgdGhlIGRpYWxvZyByZWZlcmVuY2UgaGVyZVxyXG5cdCAqICAgICAgICAgZHIuY2xvc2UocmVzdWx0KTsgLy8gQ2xvc2UgdGhlIGRpYWxvZyB3aXRoIHRoZSByZXN1bHRcclxuXHQgKiAgICAgfSxcclxuXHQgKiAgICAgc3VjY2Vzc0NhbGxiYWNrOiAocmVzdWx0KSA9PiB7XHJcblx0ICogICAgICAgICBjb25zb2xlLmxvZygnU3VjY2VzcyEnLCByZXN1bHQpO1xyXG5cdCAqICAgICB9LFxyXG5cdCAqICAgICBlcnJvckNhbGxiYWNrOiAoZXJyb3JzKSA9PiB7XHJcblx0ICogICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciEnLCBlcnJvcnMpO1xyXG5cdCAqICAgICB9LFxyXG5cdCAqICAgICBjYW5jZWxDYWxsYmFjazogKCkgPT4ge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ1Rhc2sgd2FzIGNhbmNlbGVkLicpO1xyXG5cdCAqICAgICB9LFxyXG5cdCAqIH0pO1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBzaG93VGFza0RpYWxvZzxUUmVzdWx0ID0gYW55Pihjb25maWc6IFBhcnRpYWw8VGFza0RpYWxvZ0RhdGE8VFJlc3VsdD4+LCBkaWFsb2dDb25maWc/OiBNYXREaWFsb2dDb25maWc8VFJlc3VsdD4pOiBNYXREaWFsb2dSZWY8VmRUYXNrRGlhbG9nQ29tcG9uZW50LCBUUmVzdWx0PiB7XHJcblx0XHRyZXR1cm4gdGhpcy5vcGVuRGlhbG9nPFZkVGFza0RpYWxvZ0NvbXBvbmVudD4oVmRUYXNrRGlhbG9nQ29tcG9uZW50LCBPYmplY3QuYXNzaWduKGRpYWxvZ0NvbmZpZyA/PyB7fSwgPE1hdERpYWxvZ0NvbmZpZz57XHJcblx0XHRcdGRhdGE6IG5ldyBUYXNrRGlhbG9nRGF0YShjb25maWcpLFxyXG5cdFx0XHRkaXNhYmxlQ2xvc2U6IHRydWVcclxuXHRcdH0pKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE9wZW5zIGEgZGlhbG9nIG9mIHRoZSBzcGVjaWZpZWQgdHlwZSB3aXRoIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uLlxyXG5cdCAqXHJcblx0ICogQHR5cGVwYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGNvbXBvbmVudCB0byBiZSBvcGVuZWQgYXMgYSBkaWFsb2cuXHJcblx0ICogQHR5cGVwYXJhbSBEIC0gVGhlIHR5cGUgb2YgdGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBkaWFsb2cgKGRlZmF1bHQgaXMgYW55KS5cclxuXHQgKiBAcGFyYW0ge1R5cGU8VD59IGRpYWxvZ1R5cGUgLSBUaGUgY29tcG9uZW50IHR5cGUgdG8gb3BlbiBhcyBhIGRpYWxvZy5cclxuXHQgKiBAcGFyYW0ge01hdERpYWxvZ0NvbmZpZzxEPn0gY29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIGRpYWxvZywgc3VjaCBhcyBkYXRhIGFuZCBzdHlsZXMuXHJcblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gW2NhbGxiYWNrXSAtIE9wdGlvbmFsIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgYWZ0ZXIgdGhlIGRpYWxvZyBpcyBjbG9zZWQuXHJcblx0ICogXHJcblx0ICogQHJldHVybnMge01hdERpYWxvZ1JlZjxULCBEPn0gQSByZWZlcmVuY2UgdG8gdGhlIG9wZW5lZCBkaWFsb2cuXHJcblx0ICogXHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiAvLyBFeGFtcGxlIG9mIGhvdyB0byB1c2Ugb3BlbkRpYWxvZ1xyXG5cdCAqIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMub3BlbkRpYWxvZyhNeURpYWxvZ0NvbXBvbmVudCwge1xyXG5cdCAqICAgICBkYXRhOiB7IGRpYWxvZyBkYXRhIGhlcmUgfSxcclxuXHQgKiAgICAgd2lkdGg6ICc4MDBweCcsXHJcblx0ICogICAgIHBhbmVsQ2xhc3M6ICdjdXN0b20tZGlhbG9nLWNsYXNzJ1xyXG5cdCAqIH0sICgpID0+IHtcclxuXHQgKiAgICAgY29uc29sZS5sb2coJ0RpYWxvZyBjbG9zZWQuJyk7XHJcblx0ICogfSk7XHJcblx0ICogXHJcblx0ICogLy8gSGFuZGxpbmcgdGhlIHJlc3VsdCBmcm9tIHRoZSBkaWFsb2dcclxuXHQgKiBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuXHQgKiAgICAgaWYgKHJlc3VsdCkge1xyXG5cdCAqICAgICAgICAgY29uc29sZS5sb2coJ0RpYWxvZyByZXN1bHQ6JywgcmVzdWx0KTtcclxuXHQgKiAgICAgfVxyXG5cdCAqIH0pO1xyXG5cdCAqL1xyXG5cdHB1YmxpYyBvcGVuRGlhbG9nPFQsIEQgPSBhbnk+KGRpYWxvZ1R5cGU6IFR5cGU8VD4sIGNvbmZpZzogTWF0RGlhbG9nQ29uZmlnPEQ+LCBjYWxsYmFjaz86IEZ1bmN0aW9uKTogTWF0RGlhbG9nUmVmPFQsIEQ+IHtcclxuXHRcdC8qIE9wZW4gdGhlIGRpYWxvZyB3aXRoIHNwZWNpZmllZCB0eXBlIGFuZCBjb25maWd1cmF0aW9uICovXHJcblx0XHR2YXIgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihkaWFsb2dUeXBlLCBPYmplY3QuYXNzaWduKHtcclxuXHRcdFx0d2lkdGg6ICc2NTBweCcsIC8qIERlZmF1bHQgd2lkdGggZm9yIHRoZSBkaWFsb2cgKi9cclxuXHRcdFx0ZGF0YToge30sIC8qIERlZmF1bHQgZGF0YSBwYXNzZWQgdG8gdGhlIGRpYWxvZyAqL1xyXG5cdFx0XHRwYW5lbENsYXNzOiBbJ2RpYWxvZy1mdWxsLXNjcmVlbiddIC8qIENsYXNzIGZvciB0aGUgZGlhbG9nIHBhbmVsICovXHJcblx0XHR9LCBjb25maWcpKTsgLyogTWVyZ2UgdXNlci1kZWZpbmVkIGNvbmZpZyB3aXRoIGRlZmF1bHRzICovXHJcblxyXG5cdFx0LyogSWYgYSBjYWxsYmFjayBpcyBwcm92aWRlZCwgc3Vic2NyaWJlIHRvIHRoZSBkaWFsb2cncyBhZnRlckNsb3NlZCBldmVudCAqL1xyXG5cdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdC8qIEV4ZWN1dGUgY2FsbGJhY2sgYWZ0ZXIgdGhlIGRpYWxvZyBpcyBjbG9zZWQgKi9cclxuXHRcdFx0ZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKF8gPT4gY2FsbGJhY2soKSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmV0dXJuIHRoZSByZWZlcmVuY2UgdG8gdGhlIG9wZW5lZCBkaWFsb2cgKi9cclxuXHRcdHJldHVybiBkaWFsb2dSZWY7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBEaXNwbGF5cyBhIG1lc3NhZ2UgdXNpbmcgdGhlIHNuYWNrIGJhciBzZXJ2aWNlLlxyXG5cdCAqIFxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGRpc3BsYXkgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBhIHN1Y2Nlc3MgbWVzc2FnZSBpZiBub3QgcHJvdmlkZWQpXHJcblx0ICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIG1lc3NhZ2UgKFN1Y2Nlc3MsIFdhcm5pbmcsIG9yIEVycm9yKS4gRGVmYXVsdHMgdG8gU3VjY2Vzcy5cclxuXHQgKiBAcGFyYW0gZHVyYXRpb24gVGhlIGR1cmF0aW9uIChpbiBtaWxsaXNlY29uZHMpIHRvIHNob3cgdGhlIG1lc3NhZ2UuIERlZmF1bHRzIHRvIDMwMDBtcy5cclxuXHQgKiBAcGFyYW0gYWN0aW9uTGFiZWwgVGhlIGxhYmVsIGZvciB0aGUgYWN0aW9uIGJ1dHRvbi4gRGVmYXVsdHMgdG8gJ09LJy5cclxuXHQgKiBAcGFyYW0gcGxheVNvdW5kIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcGxheSBhIHdhcm5pbmcgc291bmQgd2hlbiB0aGUgbWVzc2FnZSB0eXBlIGlzIFdhcm5pbmcuIERlZmF1bHRzIHRvIGZhbHNlLlxyXG5cdCAqIEByZXR1cm5zIEFuIG9ic2VydmFibGUgdGhhdCBlbWl0cyB3aGVuIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHNob3dNZXNzYWdlKFxyXG5cdFx0bWVzc2FnZTogc3RyaW5nLFxyXG5cdFx0dHlwZTogTWVzc2FnZVR5cGUgPSBNZXNzYWdlVHlwZS5TdWNjZXNzLFxyXG5cdFx0ZHVyYXRpb246IG51bWJlciA9IDMwMDAsXHJcblx0XHRhY3Rpb25MYWJlbDogc3RyaW5nID0gJGxvY2FsaXplYDpAQG9rOk9LYCxcclxuXHRcdHBsYXlTb3VuZDogYm9vbGVhbiA9IGZhbHNlXHJcblx0KTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcblx0XHQvKiBEZWZhdWx0IHNuYWNrIGJhciBjbGFzcyB0byAncHJpbWFyeScgKGZvciBzdWNjZXNzIG1lc3NhZ2VzKSAqL1xyXG5cdFx0bGV0IHNuYWNrQmFyQ2xhc3MgPSAncHJpbWFyeSc7XHJcblxyXG5cdFx0LyogRGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSBDU1MgY2xhc3MgYmFzZWQgb24gdGhlIG1lc3NhZ2UgdHlwZSAqL1xyXG5cdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdGNhc2UgTWVzc2FnZVR5cGUuU3VjY2VzczpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ3ByaW1hcnknO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBNZXNzYWdlVHlwZS5XYXJuaW5nOlxyXG5cdFx0XHRcdHNuYWNrQmFyQ2xhc3MgPSAnd2Fybic7XHJcblxyXG5cdFx0XHRcdC8qIFBsYXkgdGhlIHdhcm5pbmcgc291bmQgaWYgdGhlIHBsYXlTb3VuZCBmbGFnIGlzIHRydWUgKi9cclxuXHRcdFx0XHRpZiAocGxheVNvdW5kKSB7XHJcblx0XHRcdFx0XHR0aGlzLnBsYXlXYXJuU291bmQoKTtcclxuXHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cclxuXHRcdFx0Y2FzZSBNZXNzYWdlVHlwZS5FcnJvcjpcclxuXHRcdFx0XHRzbmFja0JhckNsYXNzID0gJ2Vycm9yJztcclxuXHJcblx0XHRcdFx0LyogUGxheSB0aGUgd2FybmluZyBzb3VuZCBpZiB0aGUgcGxheVNvdW5kIGZsYWcgaXMgdHJ1ZSAqL1xyXG5cdFx0XHRcdGlmIChwbGF5U291bmQpIHtcclxuXHRcdFx0XHRcdHRoaXMucGxheVdhcm5Tb3VuZCgpO1xyXG5cdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0YnJlYWs7XHJcblxyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIERpc3BsYXkgdGhlIG1lc3NhZ2UgaW4gdGhlIHNuYWNrIGJhciwgd2l0aCBzcGVjaWZpZWQgZHVyYXRpb24gYW5kIENTUyBjbGFzcyAqL1xyXG5cdFx0Y29uc3Qgc25hY2tCYXJSZWYgPSB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKFxyXG5cdFx0XHRtZXNzYWdlLFxyXG5cdFx0XHRhY3Rpb25MYWJlbCxcclxuXHRcdFx0e1xyXG5cdFx0XHRcdGR1cmF0aW9uOiBkdXJhdGlvbixcclxuXHRcdFx0XHRwYW5lbENsYXNzOiBbc25hY2tCYXJDbGFzc11cclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHJcblx0XHQvKiBFbWl0cyB3aGVuIHRoZSBhY3Rpb24gYnV0dG9uIGlzIGNsaWNrZWQgKi9cclxuXHRcdHJldHVybiBzbmFja0JhclJlZi5vbkFjdGlvbigpLnBpcGUobWFwKCgpID0+IHsgfSkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW5pdGlhbGl6ZXMgdGhlIFRpbnlNQ0UgZWRpdG9yIHdpdGggY3VzdG9tIGNvbmZpZ3VyYXRpb24uXHJcblx0ICogXHJcblx0ICogQHBhcmFtIGVkaXRvckNvbmZpZyBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIG92ZXJyaWRlIGRlZmF1bHQgZWRpdG9yIHNldHRpbmdzXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGluaXRFZGl0b3IoZWRpdG9yQ29uZmlnOiBhbnkgPSB7fSkge1xyXG5cdFx0LyogTWVyZ2UgdGhlIHByb3ZpZGVkIGVkaXRvciBjb25maWd1cmF0aW9uIHdpdGggZGVmYXVsdCBzZXR0aW5ncyAqL1xyXG5cdFx0T2JqZWN0LmFzc2lnbih0aGlzLmVkaXRvckNvbmZpZywge1xyXG5cdFx0XHQvKiBEaXNhYmxlIHByb21vdGlvbnMgaW4gdGhlIGVkaXRvciAqL1xyXG5cdFx0XHRwcm9tb3Rpb246IGZhbHNlLFxyXG5cdFx0XHQvKiBVc2UgdGhlIG1pbmltaXplZCB2ZXJzaW9uIG9mIFRpbnlNQ0UgKi9cclxuXHRcdFx0c3VmZml4OiAnLm1pbicsXHJcblx0XHRcdC8qIERpc2FibGUgZGVmYXVsdCBUaW55TUNFIHNraW4gKi9cclxuXHRcdFx0c2tpbjogZmFsc2UsXHJcblx0XHRcdC8qIFNldCBlZGl0b3IgaGVpZ2h0IHRvIDE3MHB4ICovXHJcblx0XHRcdGhlaWdodDogJzE3MHB4JyxcclxuXHRcdFx0LyogRGlzYWJsZSBsb2FkaW5nIGV4dGVybmFsIENTUyBmb3IgZWRpdG9yIGNvbnRlbnQgKi9cclxuXHRcdFx0Y29udGVudF9jc3M6IGZhbHNlLFxyXG5cdFx0XHQvKiBTZXQgdGhlIHBsdWdpbnMgdG8gYmUgdXNlZCBpbiB0aGUgZWRpdG9yICovXHJcblx0XHRcdHBsdWdpbnM6IHRoaXMuZWRpdG9yUGx1Z2lucyxcclxuXHRcdFx0LyogU2V0IHRoZSB0b29sYmFyIGNvbmZpZ3VyYXRpb24gKi9cclxuXHRcdFx0dG9vbGJhcjogdGhpcy5lZGl0b3JUb29sYmFyLFxyXG5cdFx0XHQvKiBBbHdheXMgcGFzdGUgY29udGVudCBhcyBwbGFpbiB0ZXh0ICovXHJcblx0XHRcdHBhc3RlX2FzX3RleHQ6IHRydWUsXHJcblx0XHRcdC8qIFNldCB0aGUgZWRpdG9yIGxhbmd1YWdlIHRvIEdlcm1hbiAqL1xyXG5cdFx0XHRsYW5ndWFnZTogJ2RlJyxcclxuXHRcdFx0LyogU3BlY2lmeSB0aGUgVVJMIHRvIGxvYWQgdGhlIEdlcm1hbiBsYW5ndWFnZSBmaWxlICovXHJcblx0XHRcdGxhbmd1YWdlX3VybDogJy9hc3NldHMvdGlueW1jZS9sYW5ncy9kZS5qcycsXHJcblx0XHRcdC8qIFNldCB0aGUgYmFzZSBVUkwgZm9yIGRvY3VtZW50cy9maWxlcyB1c2VkIGluIHRoZSBlZGl0b3IgKi9cclxuXHRcdFx0ZG9jdW1lbnRfYmFzZV91cmw6IGAke3RoaXMuYXBwU2V0dGluZy5hcGlVcmx9ZmlsZS9gLFxyXG5cdFx0XHQvKiBFbmFibGUgYXV0b21hdGljIHVwbG9hZHMgZm9yIGZpbGUgaW5wdXRzICovXHJcblx0XHRcdGF1dG9tYXRpY191cGxvYWRzOiB0cnVlLFxyXG5cdFx0XHQvKiBVc2UgcmVsYXRpdmUgVVJMcyBmb3IgbGlua3MgYW5kIGltYWdlcyAqL1xyXG5cdFx0XHRyZWxhdGl2ZV91cmxzOiB0cnVlLFxyXG5cdFx0XHQvKiBEaXNhYmxlIGF1dG9tYXRpYyBjb252ZXJzaW9uIG9mIHJlbGF0aXZlIFVSTHMgdG8gYWJzb2x1dGUgVVJMcyAqL1xyXG5cdFx0XHRjb252ZXJ0X3VybHM6IGZhbHNlLFxyXG5cdFx0XHQvKiBFeHRlbmQgdmFsaWQgSFRNTCBlbGVtZW50cyB0byBhbGxvdyBzcGVjaWZpYyBhdHRyaWJ1dGVzICovXHJcblx0XHRcdGV4dGVuZGVkX3ZhbGlkX2VsZW1lbnRzOiAnc3BhbltpZHxjbGFzc3xzdHlsZV0sK0BbZGF0YS1vcHRpb25zXScsXHJcblx0XHRcdC8qIEFsbG93IEhUTUwgaW4gbmFtZWQgYW5jaG9ycyAqL1xyXG5cdFx0XHRhbGxvd19odG1sX2luX25hbWVkX2FuY2hvcjogdHJ1ZVxyXG5cdFx0fSwgZWRpdG9yQ29uZmlnKTtcclxuXHJcblx0XHQvKiBNYXJrIHRoZSBlZGl0b3IgYXMgaW5pdGlhbGl6ZWQgKi9cclxuXHRcdHRoaXMuaXNFZGl0b3JJbml0aWFsaXplZCA9IHRydWU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHRoZSB0aXRsZSBhbmQgc3VidGl0bGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgbWVudSBhbmQgcm91dGVcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2V0VGl0bGVzKCk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgaWYgdGhlIG1lbnUgb2JqZWN0IGlzIGF2YWlsYWJsZSAqL1xyXG5cdFx0aWYgKHRoaXMubWVudSkge1xyXG5cdFx0XHQvKiBTZXQgdGhlIGJyb3dzZXIgdGFiIHRpdGxlIHVzaW5nIHRoZSBtZW51IHRpdGxlLCBpZiBhdmFpbGFibGUgKi9cclxuXHRcdFx0dGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGhpcy5tZW51LnRpdGxlID8/ICcnKTtcclxuXHRcdFx0LyogVXBkYXRlIHRoZSBsb2NhbCB0aXRsZSB2YXJpYWJsZSBmcm9tIHRoZSB0aXRsZSBzZXJ2aWNlICovXHJcblx0XHRcdHRoaXMudGl0bGUgPSB0aGlzLnRpdGxlU2VydmljZS5nZXRUaXRsZSgpO1xyXG5cclxuXHRcdFx0LyogSWYgdGhlcmUgYXJlIG5vIHN1Ym1lbnUgaXRlbXMsIGV4aXQgdGhlIG1ldGhvZCAqL1xyXG5cdFx0XHRpZiAoIXRoaXMubWVudS5pdGVtcykge1xyXG5cdFx0XHRcdHJldHVybjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0LyogVHJ5IHRvIHJldHJpZXZlIHRoZSBzdWJ0aXRsZSBmcm9tIHRoZSBVUkwgcGFyYW1ldGVycyAqL1xyXG5cdFx0XHR2YXIgc3VidGl0bGUgPSB0aGlzLnJvdXRlPy5zbmFwc2hvdD8ucGFyYW1NYXA/LmdldCgnc3VidGl0bGUnKTtcclxuXHRcdFx0aWYgKHN1YnRpdGxlKSB7XHJcblx0XHRcdFx0LyogQXR0ZW1wdCB0byBkZWNvZGUgdGhlIHN1YnRpdGxlIGlmIGl0J3MgQmFzZTY0IGVuY29kZWQgKi9cclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0dGhpcy5zdWJ0aXRsZSA9IHdpbmRvdy5hdG9iKHN1YnRpdGxlKTtcclxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0XHQvKiBJZiBkZWNvZGluZyBmYWlscywgdXNlIHRoZSByYXcgc3VidGl0bGUgKi9cclxuXHRcdFx0XHRcdHRoaXMuc3VidGl0bGUgPSBzdWJ0aXRsZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogR2V0IHRoZSBjdXJyZW50IHJvdXRlIHBhdGgsIGV4Y2x1ZGluZyBxdWVyeSBwYXJhbWV0ZXJzIGFuZCBtYXRyaXggcGFyYW1ldGVycyAqL1xyXG5cdFx0XHRcdGxldCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXT8uc3BsaXQoJzsnKVswXTtcclxuXHJcblx0XHRcdFx0LyogRW5zdXJlIHRoZSByb3V0ZSBkb2Vzbid0IGhhdmUgYSB0cmFpbGluZyBzbGFzaCAqL1xyXG5cdFx0XHRcdGN1cnJlbnRSb3V0ZSA9IGN1cnJlbnRSb3V0ZS5lbmRzV2l0aCgnLycpID8gY3VycmVudFJvdXRlLnN1YnN0cmluZygwLCAtMSkgOiBjdXJyZW50Um91dGU7XHJcblxyXG5cdFx0XHRcdC8qIEZpbmQgdGhlIHN1Ym1lbnUgaXRlbSB0aGF0IG1hdGNoZXMgdGhlIGN1cnJlbnQgcm91dGUgKi9cclxuXHRcdFx0XHR2YXIgc3VibWVudSA9IHRoaXMubWVudS5pdGVtcy5maWx0ZXIoeCA9PiB4LnBhdGggPT0gY3VycmVudFJvdXRlKVswXTtcclxuXHRcdFx0XHRpZiAoc3VibWVudSkge1xyXG5cdFx0XHRcdFx0LyogU2V0IHRoZSBzdWJ0aXRsZSB0byB0aGUgbWF0Y2hpbmcgc3VibWVudSdzIHRpdGxlICovXHJcblx0XHRcdFx0XHR0aGlzLnN1YnRpdGxlID0gc3VibWVudS50aXRsZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcnJheSBvZiBjb21tYW5kcyBhbmQgYSBzdGFydGluZyBwb2ludC5cclxuXHQgKiBAcGFyYW0gY29tbWFuZHMgQXJyYXkgb2YgY29tbWFuZHMgcmVwcmVzZW50aW5nIHRoZSByb3V0ZSB0byBuYXZpZ2F0ZSB0b1xyXG5cdCAqIEBwYXJhbSBxdWVyeVBhcmFtcyBPcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGFwcGVuZCB0byB0aGUgVVJMXHJcblx0ICogQHBhcmFtIGZyYWdtZW50IE9wdGlvbmFsIGZyYWdtZW50IChhbmNob3IpIHRvIGFwcGVuZCB0byB0aGUgVVJMXHJcblx0ICogQHBhcmFtIHByZXNlcnZlRnJhZ21lbnQgV2hldGhlciB0byBwcmVzZXJ2ZSB0aGUgY3VycmVudCBmcmFnbWVudCBpbiB0aGUgVVJMXHJcblx0ICovXHJcblx0cHVibGljIG5hdmlnYXRlKGNvbW1hbmRzOiBhbnlbXSwgcXVlcnlQYXJhbXM/OiBhbnksIGZyYWdtZW50Pzogc3RyaW5nLCBwcmVzZXJ2ZUZyYWdtZW50PzogYm9vbGVhbik6IHZvaWQge1xyXG5cdFx0dGhpcy5yb3V0ZXIubmF2aWdhdGUoY29tbWFuZHMsIHtcclxuXHRcdFx0LyogTWVyZ2UgYW55IGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB3aXRoIGEgZGVmYXVsdCByZXR1cm5VcmwgKi9cclxuXHRcdFx0cXVlcnlQYXJhbXM6IE9iamVjdC5hc3NpZ24oeyByZXR1cm5Vcmw6IHRoaXMuY3VycmVudFJvdXRlIH0sIHF1ZXJ5UGFyYW1zIHx8IHt9KSxcclxuXHRcdFx0LyogU2V0IHRoZSBmcmFnbWVudCwgaWYgcHJvdmlkZWQgKi9cclxuXHRcdFx0ZnJhZ21lbnQ6IGZyYWdtZW50LFxyXG5cdFx0XHQvKiBQcmVzZXJ2ZSB0aGUgZnJhZ21lbnQgZnJvbSB0aGUgcHJldmlvdXMgVVJMIGlmIHNwZWNpZmllZCAqL1xyXG5cdFx0XHRwcmVzZXJ2ZUZyYWdtZW50OiBwcmVzZXJ2ZUZyYWdtZW50LFxyXG5cdFx0XHQvKiBNYWtlIHRoZSByb3V0ZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudCByb3V0ZSBpZiBhcHBsaWNhYmxlICovXHJcblx0XHRcdHJlbGF0aXZlVG86IHRoaXMucm91dGVcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGxheXMgYSBzaG9ydCBiZWVwIHNvdW5kIHVzaW5nIGFuIGVtYmVkZGVkIGF1ZGlvIGZpbGUgaW4gYmFzZTY0IGZvcm1hdC5cclxuXHQgKiBUaGUgbWV0aG9kIGxvYWRzIGFuZCBwbGF5cyB0aGUgYXVkaW8gZmlsZSBpbW1lZGlhdGVseSB1cG9uIGNhbGxpbmcuXHJcblx0ICovXHJcblx0cHVibGljIHBsYXlCZWVwU291bmQoKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLmJlZXBBdWRpby5wbGF5KCk7XHJcblx0XHR9IGNhdGNoIChlcnJvcikgeyB9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQbGF5cyBhIHNob3J0IHdhcm5pbmcgc291bmQgdXNpbmcgYW4gZW1iZWRkZWQgYXVkaW8gZmlsZSBpbiBiYXNlNjQgZm9ybWF0LlxyXG5cdCAqIFRoZSBtZXRob2QgbG9hZHMgYW5kIHBsYXlzIHRoZSBhdWRpbyBmaWxlIGltbWVkaWF0ZWx5IHVwb24gY2FsbGluZy5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGxheVdhcm5Tb3VuZCgpOiB2b2lkIHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdHRoaXMud2FybkF1ZGlvLnBsYXkoKTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7IH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ3MgYSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZFxyXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIGxvZ1xyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgbG9nXHJcblx0ICovXHJcblx0cHVibGljIGxvZyhtZXNzYWdlOiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkICovXHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHQvKiBMb2cgdGhlIG1lc3NhZ2UgYW5kIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gdGhlIGNvbnNvbGUgKi9cclxuXHRcdFx0Y29uc29sZS5sb2cobWVzc2FnZSwgb3B0aW9uYWxQYXJhbXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9ncyBhIHdhcm5pbmcgbWVzc2FnZSB0byB0aGUgY29uc29sZSBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWRcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgd2FybmluZyBtZXNzYWdlIHRvIGxvZ1xyXG5cdCAqIEBwYXJhbSBvcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB0aGUgd2FybmluZ1xyXG5cdCAqL1xyXG5cdHB1YmxpYyB3YXJuKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZCB7XHJcblx0XHQvKiBDaGVjayBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWQgKi9cclxuXHRcdGlmICh0aGlzLmRlYnVnKSB7XHJcblx0XHRcdC8qIExvZyB0aGUgd2FybmluZyBtZXNzYWdlIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zb2xlICovXHJcblx0XHRcdGNvbnNvbGUud2FybihtZXNzYWdlLCBvcHRpb25hbFBhcmFtcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IGFuIG9iamVjdCB0byBIdHRwSGVhZGVycy5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBoZWFkZXJzXHJcblx0ICogQHJldHVybnMgSHR0cEhlYWRlcnMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBib2R5XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHRvSHR0cEhlYWRlcnMoYm9keTogYW55KTogSHR0cEhlYWRlcnMge1xyXG5cdFx0LyogSWYgdGhlIGJvZHkgaXMgbnVsbCBvciB1bmRlZmluZWQsIHJldHVybiBlbXB0eSBoZWFkZXJzICovXHJcblx0XHRpZiAoIWJvZHkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBIdHRwSGVhZGVycygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENvbnZlcnQgdGhlIG9iamVjdCdzIHByb3BlcnRpZXMgdG8gSHR0cEhlYWRlcnMsIGZpbHRlcmluZyBvdXQgbnVsbCBvciBlbXB0eSB2YWx1ZXMgKi9cclxuXHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhib2R5KVxyXG5cdFx0XHQuZmlsdGVyKGtleSA9PiBib2R5W2tleV0gIT0gbnVsbCAmJiBib2R5W2tleV0gIT0gJycpXHJcblx0XHRcdC5yZWR1Y2UoKHAsIGtleSkgPT4gcC5zZXQoa2V5LCBib2R5W2tleV0pLCBuZXcgSHR0cEhlYWRlcnMoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZXMgYW5kIGZvcm1hdHMgSFRUUCByZXNwb25zZSBlcnJvcnMuXHJcblx0ICogQHBhcmFtIGVycm9ycyBUaGUgZXJyb3Igb2JqZWN0IHJldHVybmVkIGZyb20gdGhlIEhUVFAgcmVzcG9uc2VcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgcGFyc2VFcnJvcnMoZXJyb3JzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGVycm9ycyBhcnJheSBhbmQgcmVzZXQgbG9hZGluZy9zYXZpbmcgaW5kaWNhdG9ycyAqL1xyXG5cdFx0dGhpcy5lcnJvcnMgPSBbXTtcclxuXHRcdHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0LyogSWYgdGhlcmUgYXJlIGVycm9ycywgaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYW5kIGFkZCB0aGVtIHRvIHRoZSBlcnJvcnMgYXJyYXkgKi9cclxuXHRcdGlmIChlcnJvcnMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKGVsID0+IHtcclxuXHRcdFx0XHRsZXQgZXJyb3IgPSBlcnJvcnNbZWxdO1xyXG5cdFx0XHRcdC8qIElmIHRoZSBlcnJvciBpcyBhbiBhcnJheSwgaXRlcmF0ZSBvdmVyIHRoZSBhcnJheSBhbmQgYWRkIGVhY2ggZXJyb3IgKi9cclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlcnJvcikpIHtcclxuXHRcdFx0XHRcdGVycm9yLmZvckVhY2goZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvcnMucHVzaChlcnIpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdFx0XHRcdC8qIElmIHRoZSBlcnJvciBpcyBhIHN0cmluZywgYWRkIGl0IGRpcmVjdGx5IHRvIHRoZSBlcnJvcnMgYXJyYXkgKi9cclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGUgSHR0cCBvcGVyYXRpb24gdGhhdCBmYWlsZWQuXHJcblx0ICogTGV0IHRoZSBhcHAgY29udGludWUuXHJcblx0ICogQHBhcmFtIG9wZXJhdGlvbiAtIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGZhaWxlZFxyXG5cdCAqIEBwYXJhbSByZXN1bHQgLSBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gYXMgdGhlIG9ic2VydmFibGUgcmVzdWx0XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhbmRsZUVycm9yPFQ+KG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nLCByZXN1bHQ/OiBUKSB7XHJcblx0XHRyZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuXHJcblx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHR0aGlzLnBhcnNlRXJyb3JzKGVycm9yKTtcclxuXHJcblx0XHRcdC8qIExvZyB0byBjb25zb2xlICovXHJcblx0XHRcdHRoaXMud2FybihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xyXG5cclxuXHRcdFx0LyogTGV0IHRoZSBhcHAga2VlcCBydW5uaW5nIGJ5IHJldHVybmluZyBhbiBlbXB0eSByZXN1bHQgKi9cclxuXHRcdFx0cmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDbGVhbnMgdGhlIG9iamVjdCBieSByZW1vdmluZyBwcm9wZXJ0aWVzIHRoYXQgYXJlIG51bGwsIHVuZGVmaW5lZCwgb3IgZW1wdHkgc3RyaW5nc1xyXG5cdCAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBjbGVhblxyXG5cdCAqIEByZXR1cm5zIFRoZSBjbGVhbmVkIG9iamVjdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjbGVhbihvYmo6IGFueSk6IGFueSB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHQvKiBJdGVyYXRlIHRocm91Z2ggYWxsIHByb3BlcnRpZXMgb2YgdGhlIG9iamVjdCAqL1xyXG5cdFx0XHRmb3IgKHZhciBwcm9wTmFtZSBpbiBvYmopIHtcclxuXHRcdFx0XHQvKiBJZiB0aGUgcHJvcGVydHkgdmFsdWUgaXMgbnVsbCwgdW5kZWZpbmVkLCBvciBhbiBlbXB0eSBzdHJpbmcsIGRlbGV0ZSBpdCAqL1xyXG5cdFx0XHRcdGlmIChvYmpbcHJvcE5hbWVdID09PSBudWxsIHx8IG9ialtwcm9wTmFtZV0gPT09IHVuZGVmaW5lZCB8fCBvYmpbcHJvcE5hbWVdID09PSBcIlwiKSB7XHJcblx0XHRcdFx0XHRkZWxldGUgb2JqW3Byb3BOYW1lXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdC8qIEVycm9yIGhhbmRsaW5nIGNhbiBiZSBkb25lIGhlcmUgaWYgbmVjZXNzYXJ5ICovXHJcblx0XHR9XHJcblxyXG5cdFx0LyogUmV0dXJuIHRoZSBjbGVhbmVkIG9iamVjdCAqL1xyXG5cdFx0cmV0dXJuIG9iajtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhbml0aXplcyB0aGUgc3BlY2lmaWVkIG9iamVjdCBieSByZW1vdmluZyBmYWxzeSB2YWx1ZXMgYW5kIGNvbnZlcnRpbmcgc3RyaW5nIG51bWJlcnMgdG8gbnVtYmVyc1xyXG5cdCAqIEBwYXJhbSBvYmogVGhlIG9iamVjdCB0byBzYW5pdGl6ZVxyXG5cdCAqIEBwYXJhbSBpZ25vcmUgUHJvcGVydGllcyB0byBpZ25vcmUgZHVyaW5nIHRoZSBzYW5pdGl6YXRpb25cclxuXHQgKiBAcmV0dXJucyBUaGUgc2FuaXRpemVkIG9iamVjdFxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzYW5pdGl6ZU9iamVjdChvYmo6IGFueSwgLi4uaWdub3JlOiBzdHJpbmdbXSk6IGFueSB7XHJcblx0XHQvKiBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXMgYW5kIGZpbHRlciBvdXQgZmFsc3kgdmFsdWVzICovXHJcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMob2JqKVxyXG5cdFx0XHQuZmlsdGVyKHggPT4gb2JqW3hdKVxyXG5cdFx0XHQvKiBJZ25vcmUgcHJvcGVydGllcyB0aGF0IGFyZSBpbiB0aGUgaWdub3JlIGxpc3QgKGNhc2UgaW5zZW5zaXRpdmUpICovXHJcblx0XHRcdC5maWx0ZXIoeCA9PiAhKGlnbm9yZSB8fCBbXSkubWFwKHggPT4geC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyh4LnRvTG93ZXJDYXNlKCkpKVxyXG5cdFx0XHQvKiBDb252ZXJ0IHN0cmluZyBudW1iZXJzIHRvIGFjdHVhbCBudW1iZXJzICovXHJcblx0XHRcdC5yZWR1Y2UoKHJlc3VsdDogYW55LCBrZXkpID0+IHtcclxuXHRcdFx0XHRyZXN1bHRba2V5XSA9IGlzTmFOKCtvYmpba2V5XSkgPyBvYmpba2V5XSA6ICtvYmpba2V5XTtcclxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0XHR9LCB7fSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDaGVja3MgaWYgdGhlIHVzZXIgaGFzIHNlbGVjdGVkIGFueSB0ZXh0IGluIHRoZSBkb2N1bWVudFxyXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGV4dCBpcyBzZWxlY3RlZCwgb3RoZXJ3aXNlIGZhbHNlXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGlzVGV4dFNlbGVjdGVkID0gKCk6IGJvb2xlYW4gPT5cclxuXHRcdC8qIFVzZSB0aGUgd2luZG93LmdldFNlbGVjdGlvbiBBUEkgdG8gY2hlY2sgaWYgdGV4dCBpcyBzZWxlY3RlZCAqL1xyXG5cdFx0KHdpbmRvdz8uZ2V0U2VsZWN0aW9uKCk/LnRvU3RyaW5nKCk/Lmxlbmd0aCA/PyAwKSA+IDA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEEgY2FsbGJhY2sgdXNlZCBmb3IgYW55IGN1c3RvbSBjbGVhbnVwIHRoYXQgbmVlZHMgdG8gb2NjdXIgd2hlbiB0aGUgaW5zdGFuY2UgaXMgZGVzdHJveWVkXHJcblx0ICovXHJcblx0bmdPbkRlc3Ryb3koKSB7XHJcblx0XHQvKiBVbnN1YnNjcmliZSBmcm9tIGFsbCBNYXRFeHBhbnNpb25QYW5lbCBzdWJzY3JpcHRpb25zICovXHJcblx0XHR0aGlzLm1hdEV4cGFuc2lvblBhbmVsU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHggPT4geC51bnN1YnNjcmliZSgpKTtcclxuXHR9XHJcbn0iXX0=