@messaia/cdk 18.1.0-rc25 → 18.1.0-rc26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/base/components/base.component.mjs +25 -25
- package/esm2022/lib/base/components/generic-form-base.component.mjs +9 -7
- package/esm2022/lib/base/interfaces/ibase-component.mjs +1 -1
- package/esm2022/lib/forms/components/generic-form/generic-form.component.mjs +3 -3
- package/esm2022/lib/forms/models/form-field-definition.mjs +14 -3
- package/fesm2022/messaia-cdk.mjs +47 -34
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/base/components/base.component.d.ts +12 -12
- package/lib/base/interfaces/ibase-component.d.ts +53 -8
- package/lib/forms/models/form-field-definition.d.ts +13 -2
- package/package.json +1 -1
|
@@ -746,6 +746,30 @@ export class BaseComponent {
|
|
|
746
746
|
}
|
|
747
747
|
catch (error) { }
|
|
748
748
|
}
|
|
749
|
+
/**
|
|
750
|
+
* Logs a message to the console if debug mode is enabled
|
|
751
|
+
* @param message The message to log
|
|
752
|
+
* @param optionalParams Optional parameters for the log
|
|
753
|
+
*/
|
|
754
|
+
log(message, ...optionalParams) {
|
|
755
|
+
/* Check if debug mode is enabled */
|
|
756
|
+
if (this.debug) {
|
|
757
|
+
/* Log the message and optional parameters to the console */
|
|
758
|
+
console.log(message, optionalParams);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* Logs a warning message to the console if debug mode is enabled
|
|
763
|
+
* @param message The warning message to log
|
|
764
|
+
* @param optionalParams Optional parameters for the warning
|
|
765
|
+
*/
|
|
766
|
+
warn(message, ...optionalParams) {
|
|
767
|
+
/* Check if debug mode is enabled */
|
|
768
|
+
if (this.debug) {
|
|
769
|
+
/* Log the warning message and optional parameters to the console */
|
|
770
|
+
console.warn(message, optionalParams);
|
|
771
|
+
}
|
|
772
|
+
}
|
|
749
773
|
/**
|
|
750
774
|
* Convert an object to HttpHeaders.
|
|
751
775
|
*
|
|
@@ -804,30 +828,6 @@ export class BaseComponent {
|
|
|
804
828
|
return of(result);
|
|
805
829
|
};
|
|
806
830
|
}
|
|
807
|
-
/**
|
|
808
|
-
* Logs a message to the console if debug mode is enabled
|
|
809
|
-
* @param message The message to log
|
|
810
|
-
* @param optionalParams Optional parameters for the log
|
|
811
|
-
*/
|
|
812
|
-
log(message, ...optionalParams) {
|
|
813
|
-
/* Check if debug mode is enabled */
|
|
814
|
-
if (this.debug) {
|
|
815
|
-
/* Log the message and optional parameters to the console */
|
|
816
|
-
console.log(message, optionalParams);
|
|
817
|
-
}
|
|
818
|
-
}
|
|
819
|
-
/**
|
|
820
|
-
* Logs a warning message to the console if debug mode is enabled
|
|
821
|
-
* @param message The warning message to log
|
|
822
|
-
* @param optionalParams Optional parameters for the warning
|
|
823
|
-
*/
|
|
824
|
-
warn(message, ...optionalParams) {
|
|
825
|
-
/* Check if debug mode is enabled */
|
|
826
|
-
if (this.debug) {
|
|
827
|
-
/* Log the warning message and optional parameters to the console */
|
|
828
|
-
console.warn(message, optionalParams);
|
|
829
|
-
}
|
|
830
|
-
}
|
|
831
831
|
/**
|
|
832
832
|
* Cleans the object by removing properties that are null, undefined, or empty strings
|
|
833
833
|
* @param obj The object to clean
|
|
@@ -897,4 +897,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
|
|
|
897
897
|
type: ViewChildren,
|
|
898
898
|
args: [MatExpansionPanel]
|
|
899
899
|
}] } });
|
|
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/IGN1cnJlbnRSb3V0ZS5zdWJzdHJpbmcoMCwgLTEpIDogY3VycmVudFJvdXRlO1xyXG5cclxuXHRcdFx0XHQvKiBGaW5kIHRoZSBzdWJtZW51IGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IHJvdXRlICovXHJcblx0XHRcdFx0dmFyIHN1Ym1lbnUgPSB0aGlzLm1lbnUuaXRlbXMuZmlsdGVyKHggPT4geC5wYXRoID09IGN1cnJlbnRSb3V0ZSlbMF07XHJcblx0XHRcdFx0aWYgKHN1Ym1lbnUpIHtcclxuXHRcdFx0XHRcdC8qIFNldCB0aGUgc3VidGl0bGUgdG8gdGhlIG1hdGNoaW5nIHN1Ym1lbnUncyB0aXRsZSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5zdWJ0aXRsZSA9IHN1Ym1lbnUudGl0bGU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBOYXZpZ2F0ZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgYXJyYXkgb2YgY29tbWFuZHMgYW5kIGEgc3RhcnRpbmcgcG9pbnQuXHJcblx0ICogQHBhcmFtIGNvbW1hbmRzIEFycmF5IG9mIGNvbW1hbmRzIHJlcHJlc2VudGluZyB0aGUgcm91dGUgdG8gbmF2aWdhdGUgdG9cclxuXHQgKiBAcGFyYW0gcXVlcnlQYXJhbXMgT3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycyB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBmcmFnbWVudCBPcHRpb25hbCBmcmFnbWVudCAoYW5jaG9yKSB0byBhcHBlbmQgdG8gdGhlIFVSTFxyXG5cdCAqIEBwYXJhbSBwcmVzZXJ2ZUZyYWdtZW50IFdoZXRoZXIgdG8gcHJlc2VydmUgdGhlIGN1cnJlbnQgZnJhZ21lbnQgaW4gdGhlIFVSTFxyXG5cdCAqL1xyXG5cdHB1YmxpYyBuYXZpZ2F0ZShjb21tYW5kczogYW55W10sIHF1ZXJ5UGFyYW1zPzogYW55LCBmcmFnbWVudD86IHN0cmluZywgcHJlc2VydmVGcmFnbWVudD86IGJvb2xlYW4pOiB2b2lkIHtcclxuXHRcdHRoaXMucm91dGVyLm5hdmlnYXRlKGNvbW1hbmRzLCB7XHJcblx0XHRcdC8qIE1lcmdlIGFueSBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgcmV0dXJuVXJsICovXHJcblx0XHRcdHF1ZXJ5UGFyYW1zOiBPYmplY3QuYXNzaWduKHsgcmV0dXJuVXJsOiB0aGlzLmN1cnJlbnRSb3V0ZSB9LCBxdWVyeVBhcmFtcyB8fCB7fSksXHJcblx0XHRcdC8qIFNldCB0aGUgZnJhZ21lbnQsIGlmIHByb3ZpZGVkICovXHJcblx0XHRcdGZyYWdtZW50OiBmcmFnbWVudCxcclxuXHRcdFx0LyogUHJlc2VydmUgdGhlIGZyYWdtZW50IGZyb20gdGhlIHByZXZpb3VzIFVSTCBpZiBzcGVjaWZpZWQgKi9cclxuXHRcdFx0cHJlc2VydmVGcmFnbWVudDogcHJlc2VydmVGcmFnbWVudCxcclxuXHRcdFx0LyogTWFrZSB0aGUgcm91dGUgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgcm91dGUgaWYgYXBwbGljYWJsZSAqL1xyXG5cdFx0XHRyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlXHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFBsYXlzIGEgc2hvcnQgYmVlcCBzb3VuZCB1c2luZyBhbiBlbWJlZGRlZCBhdWRpbyBmaWxlIGluIGJhc2U2NCBmb3JtYXQuXHJcblx0ICogVGhlIG1ldGhvZCBsb2FkcyBhbmQgcGxheXMgdGhlIGF1ZGlvIGZpbGUgaW1tZWRpYXRlbHkgdXBvbiBjYWxsaW5nLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwbGF5QmVlcFNvdW5kKCk6IHZvaWQge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0dGhpcy5iZWVwQXVkaW8ucGxheSgpO1xyXG5cdFx0fSBjYXRjaCAoZXJyb3IpIHsgfVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUGxheXMgYSBzaG9ydCB3YXJuaW5nIHNvdW5kIHVzaW5nIGFuIGVtYmVkZGVkIGF1ZGlvIGZpbGUgaW4gYmFzZTY0IGZvcm1hdC5cclxuXHQgKiBUaGUgbWV0aG9kIGxvYWRzIGFuZCBwbGF5cyB0aGUgYXVkaW8gZmlsZSBpbW1lZGlhdGVseSB1cG9uIGNhbGxpbmcuXHJcblx0ICovXHJcblx0cHVibGljIHBsYXlXYXJuU291bmQoKTogdm9pZCB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHR0aGlzLndhcm5BdWRpby5wbGF5KCk7XHJcblx0XHR9IGNhdGNoIChlcnJvcikgeyB9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDb252ZXJ0IGFuIG9iamVjdCB0byBIdHRwSGVhZGVycy5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gYm9keSBUaGUgb2JqZWN0IHdob3NlIHByb3BlcnRpZXMgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBoZWFkZXJzXHJcblx0ICogQHJldHVybnMgSHR0cEhlYWRlcnMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGtleS12YWx1ZSBwYWlycyBmcm9tIHRoZSBib2R5XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIHRvSHR0cEhlYWRlcnMoYm9keTogYW55KTogSHR0cEhlYWRlcnMge1xyXG5cdFx0LyogSWYgdGhlIGJvZHkgaXMgbnVsbCBvciB1bmRlZmluZWQsIHJldHVybiBlbXB0eSBoZWFkZXJzICovXHJcblx0XHRpZiAoIWJvZHkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBIdHRwSGVhZGVycygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENvbnZlcnQgdGhlIG9iamVjdCdzIHByb3BlcnRpZXMgdG8gSHR0cEhlYWRlcnMsIGZpbHRlcmluZyBvdXQgbnVsbCBvciBlbXB0eSB2YWx1ZXMgKi9cclxuXHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhib2R5KVxyXG5cdFx0XHQuZmlsdGVyKGtleSA9PiBib2R5W2tleV0gIT0gbnVsbCAmJiBib2R5W2tleV0gIT0gJycpXHJcblx0XHRcdC5yZWR1Y2UoKHAsIGtleSkgPT4gcC5zZXQoa2V5LCBib2R5W2tleV0pLCBuZXcgSHR0cEhlYWRlcnMoKSk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBQYXJzZXMgYW5kIGZvcm1hdHMgSFRUUCByZXNwb25zZSBlcnJvcnMuXHJcblx0ICogQHBhcmFtIGVycm9ycyBUaGUgZXJyb3Igb2JqZWN0IHJldHVybmVkIGZyb20gdGhlIEhUVFAgcmVzcG9uc2VcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgcGFyc2VFcnJvcnMoZXJyb3JzOiBhbnkpOiB2b2lkIHtcclxuXHRcdC8qIEluaXRpYWxpemUgdGhlIGVycm9ycyBhcnJheSBhbmQgcmVzZXQgbG9hZGluZy9zYXZpbmcgaW5kaWNhdG9ycyAqL1xyXG5cdFx0dGhpcy5lcnJvcnMgPSBbXTtcclxuXHRcdHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcblx0XHR0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcblxyXG5cdFx0LyogSWYgdGhlcmUgYXJlIGVycm9ycywgaXRlcmF0ZSB0aHJvdWdoIHRoZW0gYW5kIGFkZCB0aGVtIHRvIHRoZSBlcnJvcnMgYXJyYXkgKi9cclxuXHRcdGlmIChlcnJvcnMpIHtcclxuXHRcdFx0T2JqZWN0LmtleXMoZXJyb3JzKS5mb3JFYWNoKGVsID0+IHtcclxuXHRcdFx0XHRsZXQgZXJyb3IgPSBlcnJvcnNbZWxdO1xyXG5cdFx0XHRcdC8qIElmIHRoZSBlcnJvciBpcyBhbiBhcnJheSwgaXRlcmF0ZSBvdmVyIHRoZSBhcnJheSBhbmQgYWRkIGVhY2ggZXJyb3IgKi9cclxuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShlcnJvcikpIHtcclxuXHRcdFx0XHRcdGVycm9yLmZvckVhY2goZXJyID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5lcnJvcnMucHVzaChlcnIpO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgZXJyb3IgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdFx0XHRcdC8qIElmIHRoZSBlcnJvciBpcyBhIHN0cmluZywgYWRkIGl0IGRpcmVjdGx5IHRvIHRoZSBlcnJvcnMgYXJyYXkgKi9cclxuXHRcdFx0XHRcdHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBIYW5kbGUgSHR0cCBvcGVyYXRpb24gdGhhdCBmYWlsZWQuXHJcblx0ICogTGV0IHRoZSBhcHAgY29udGludWUuXHJcblx0ICogQHBhcmFtIG9wZXJhdGlvbiAtIG5hbWUgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGZhaWxlZFxyXG5cdCAqIEBwYXJhbSByZXN1bHQgLSBvcHRpb25hbCB2YWx1ZSB0byByZXR1cm4gYXMgdGhlIG9ic2VydmFibGUgcmVzdWx0XHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGhhbmRsZUVycm9yPFQ+KG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nLCByZXN1bHQ/OiBUKSB7XHJcblx0XHRyZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuXHJcblx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHR0aGlzLnBhcnNlRXJyb3JzKGVycm9yKTtcclxuXHJcblx0XHRcdC8qIExvZyB0byBjb25zb2xlICovXHJcblx0XHRcdHRoaXMud2FybihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xyXG5cclxuXHRcdFx0LyogTGV0IHRoZSBhcHAga2VlcCBydW5uaW5nIGJ5IHJldHVybmluZyBhbiBlbXB0eSByZXN1bHQgKi9cclxuXHRcdFx0cmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2dzIGEgbWVzc2FnZSB0byB0aGUgY29uc29sZSBpZiBkZWJ1ZyBtb2RlIGlzIGVuYWJsZWRcclxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBsb2dcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIGxvZ1xyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBsb2cobWVzc2FnZTogYW55LCAuLi5vcHRpb25hbFBhcmFtczogYW55W10pIHtcclxuXHRcdC8qIENoZWNrIGlmIGRlYnVnIG1vZGUgaXMgZW5hYmxlZCAqL1xyXG5cdFx0aWYgKHRoaXMuZGVidWcpIHtcclxuXHRcdFx0LyogTG9nIHRoZSBtZXNzYWdlIGFuZCBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHRoZSBjb25zb2xlICovXHJcblx0XHRcdGNvbnNvbGUubG9nKG1lc3NhZ2UsIG9wdGlvbmFsUGFyYW1zKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvZ3MgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkXHJcblx0ICogQHBhcmFtIG1lc3NhZ2UgVGhlIHdhcm5pbmcgbWVzc2FnZSB0byBsb2dcclxuXHQgKiBAcGFyYW0gb3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdGhlIHdhcm5pbmdcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgd2FybihtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSkge1xyXG5cdFx0LyogQ2hlY2sgaWYgZGVidWcgbW9kZSBpcyBlbmFibGVkICovXHJcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xyXG5cdFx0XHQvKiBMb2cgdGhlIHdhcm5pbmcgbWVzc2FnZSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycyB0byB0aGUgY29uc29sZSAqL1xyXG5cdFx0XHRjb25zb2xlLndhcm4obWVzc2FnZSwgb3B0aW9uYWxQYXJhbXMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2xlYW5zIHRoZSBvYmplY3QgYnkgcmVtb3ZpbmcgcHJvcGVydGllcyB0aGF0IGFyZSBudWxsLCB1bmRlZmluZWQsIG9yIGVtcHR5IHN0cmluZ3NcclxuXHQgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gY2xlYW5cclxuXHQgKiBAcmV0dXJucyBUaGUgY2xlYW5lZCBvYmplY3RcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgY2xlYW4ob2JqOiBhbnkpOiBhbnkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0LyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIG9mIHRoZSBvYmplY3QgKi9cclxuXHRcdFx0Zm9yICh2YXIgcHJvcE5hbWUgaW4gb2JqKSB7XHJcblx0XHRcdFx0LyogSWYgdGhlIHByb3BlcnR5IHZhbHVlIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgYW4gZW1wdHkgc3RyaW5nLCBkZWxldGUgaXQgKi9cclxuXHRcdFx0XHRpZiAob2JqW3Byb3BOYW1lXSA9PT0gbnVsbCB8fCBvYmpbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgfHwgb2JqW3Byb3BOYW1lXSA9PT0gXCJcIikge1xyXG5cdFx0XHRcdFx0ZGVsZXRlIG9ialtwcm9wTmFtZV07XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHQvKiBFcnJvciBoYW5kbGluZyBjYW4gYmUgZG9uZSBoZXJlIGlmIG5lY2Vzc2FyeSAqL1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFJldHVybiB0aGUgY2xlYW5lZCBvYmplY3QgKi9cclxuXHRcdHJldHVybiBvYmo7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBTYW5pdGl6ZXMgdGhlIHNwZWNpZmllZCBvYmplY3QgYnkgcmVtb3ZpbmcgZmFsc3kgdmFsdWVzIGFuZCBjb252ZXJ0aW5nIHN0cmluZyBudW1iZXJzIHRvIG51bWJlcnNcclxuXHQgKiBAcGFyYW0gb2JqIFRoZSBvYmplY3QgdG8gc2FuaXRpemVcclxuXHQgKiBAcGFyYW0gaWdub3JlIFByb3BlcnRpZXMgdG8gaWdub3JlIGR1cmluZyB0aGUgc2FuaXRpemF0aW9uXHJcblx0ICogQHJldHVybnMgVGhlIHNhbml0aXplZCBvYmplY3RcclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2FuaXRpemVPYmplY3Qob2JqOiBhbnksIC4uLmlnbm9yZTogc3RyaW5nW10pOiBhbnkge1xyXG5cdFx0LyogSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzIGFuZCBmaWx0ZXIgb3V0IGZhbHN5IHZhbHVlcyAqL1xyXG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKG9iailcclxuXHRcdFx0LmZpbHRlcih4ID0+IG9ialt4XSlcclxuXHRcdFx0LyogSWdub3JlIHByb3BlcnRpZXMgdGhhdCBhcmUgaW4gdGhlIGlnbm9yZSBsaXN0IChjYXNlIGluc2Vuc2l0aXZlKSAqL1xyXG5cdFx0XHQuZmlsdGVyKHggPT4gIShpZ25vcmUgfHwgW10pLm1hcCh4ID0+IHgudG9Mb3dlckNhc2UoKSkuaW5jbHVkZXMoeC50b0xvd2VyQ2FzZSgpKSlcclxuXHRcdFx0LyogQ29udmVydCBzdHJpbmcgbnVtYmVycyB0byBhY3R1YWwgbnVtYmVycyAqL1xyXG5cdFx0XHQucmVkdWNlKChyZXN1bHQ6IGFueSwga2V5KSA9PiB7XHJcblx0XHRcdFx0cmVzdWx0W2tleV0gPSBpc05hTigrb2JqW2tleV0pID8gb2JqW2tleV0gOiArb2JqW2tleV07XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fSwge30pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSB1c2VyIGhhcyBzZWxlY3RlZCBhbnkgdGV4dCBpbiB0aGUgZG9jdW1lbnRcclxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRleHQgaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBmYWxzZVxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpc1RleHRTZWxlY3RlZCA9ICgpOiBib29sZWFuID0+XHJcblx0XHQvKiBVc2UgdGhlIHdpbmRvdy5nZXRTZWxlY3Rpb24gQVBJIHRvIGNoZWNrIGlmIHRleHQgaXMgc2VsZWN0ZWQgKi9cclxuXHRcdCh3aW5kb3c/LmdldFNlbGVjdGlvbigpPy50b1N0cmluZygpPy5sZW5ndGggPz8gMCkgPiAwO1xyXG5cclxuXHQvKipcclxuXHQgKiBBIGNhbGxiYWNrIHVzZWQgZm9yIGFueSBjdXN0b20gY2xlYW51cCB0aGF0IG5lZWRzIHRvIG9jY3VyIHdoZW4gdGhlIGluc3RhbmNlIGlzIGRlc3Ryb3llZFxyXG5cdCAqL1xyXG5cdG5nT25EZXN0cm95KCkge1xyXG5cdFx0LyogVW5zdWJzY3JpYmUgZnJvbSBhbGwgTWF0RXhwYW5zaW9uUGFuZWwgc3Vic2NyaXB0aW9ucyAqL1xyXG5cdFx0dGhpcy5tYXRFeHBhbnNpb25QYW5lbFN1YnNjcmlwdGlvbnMuZm9yRWFjaCh4ID0+IHgudW5zdWJzY3JpYmUoKSk7XHJcblx0fVxyXG59Il19
|
|
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
|