@sumaris-net/ngx-components 2.9.0-alpha6 → 2.9.0-alpha7
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/src/app/shared/material/autocomplete/material.autocomplete.mjs +9 -6
- package/fesm2022/sumaris-net.ngx-components.mjs +8 -5
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/manifest.json +1 -1
- package/src/theme/_ngx-components.scss +1 -6
|
@@ -770,8 +770,9 @@ export class MatAutocompleteField {
|
|
|
770
770
|
this._fixMatSelectPanelPosition(overlayPane);
|
|
771
771
|
// Fix overlay, for searchbar
|
|
772
772
|
if (this.showSearchBar) {
|
|
773
|
-
|
|
774
|
-
|
|
773
|
+
searchBarSubscription = await this._fixSearchbarOverlay(panelElement, overlayPane);
|
|
774
|
+
if (searchBarSubscription)
|
|
775
|
+
this._subscription.add(searchBarSubscription);
|
|
775
776
|
}
|
|
776
777
|
// Show the panel
|
|
777
778
|
this.renderer.removeClass(panelElement, 'cdk-visually-hidden');
|
|
@@ -779,7 +780,7 @@ export class MatAutocompleteField {
|
|
|
779
780
|
}
|
|
780
781
|
// ON close
|
|
781
782
|
else if (searchBarSubscription) {
|
|
782
|
-
searchBarSubscription
|
|
783
|
+
searchBarSubscription.unsubscribe();
|
|
783
784
|
this._subscription.remove(searchBarSubscription);
|
|
784
785
|
searchBarSubscription = null;
|
|
785
786
|
}
|
|
@@ -829,9 +830,10 @@ export class MatAutocompleteField {
|
|
|
829
830
|
const overlayContainer = findParentWithClass(panelElement, 'cdk-overlay-container');
|
|
830
831
|
if (!overlayContainer)
|
|
831
832
|
return;
|
|
832
|
-
// DEBUG
|
|
833
|
-
console.debug(`${this.logPrefix} moving the "cdk-overlay" container from the "body" to the "ion-modal" container`);
|
|
834
833
|
const originalParent = overlayContainer.parentElement;
|
|
834
|
+
// DEBUG
|
|
835
|
+
//if (this.debug)
|
|
836
|
+
console.debug(`${this.logPrefix} moving the "cdk-overlay" container from the "${originalParent?.tagName || 'body'}" to the "ion-modal" container`);
|
|
835
837
|
this.renderer.appendChild(modalElement, overlayContainer);
|
|
836
838
|
const shiftLeft = (this._document.defaultView.innerWidth - modalElement.firstElementChild.getBoundingClientRect().width) / 2;
|
|
837
839
|
const shiftTop = (this._document.defaultView.innerHeight - modalElement.firstElementChild.getBoundingClientRect().height) / 2;
|
|
@@ -840,6 +842,7 @@ export class MatAutocompleteField {
|
|
|
840
842
|
// Return the reverse function, to replace the container in body
|
|
841
843
|
return new Subscription(() => {
|
|
842
844
|
// DEBUG
|
|
845
|
+
//if (this.debug)
|
|
843
846
|
console.debug(`${this.logPrefix} moving the "cdk-overlay" container from the "ion-modal" to the "body" container`);
|
|
844
847
|
this.renderer.appendChild(originalParent /*this.document.body*/, overlayContainer);
|
|
845
848
|
});
|
|
@@ -1001,4 +1004,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
|
|
|
1001
1004
|
}], items: [{
|
|
1002
1005
|
type: Input
|
|
1003
1006
|
}] } });
|
|
1004
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUdmLFFBQVEsRUFDUixNQUFNLEVBRU4sbUJBQW1CLEVBQ25CLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRDLGlCQUFpQixFQUFzQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqSSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsS0FBSyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsZUFBZSxFQUNmLGVBQWUsRUFDZixjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsR0FDVCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxVQUFVLEVBQWdC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LE1BQU07dUJBQUMsTUFBTTtnQkFFRyxPQUFPO3NCQUF2QixNQUFNO3VCQUFDLE9BQU87Z0JBQ0wsZUFBZTtzQkFBeEIsTUFBTTtnQkFDbUIsYUFBYTtzQkFBdEMsTUFBTTt1QkFBQyxnQkFBZ0I7Z0JBQ0QsVUFBVTtzQkFBaEMsTUFBTTt1QkFBQyxhQUFhO2dCQUVHLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDSyxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0UsWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjO2dCQUNHLFlBQVk7c0JBQXZDLFNBQVM7dUJBQUMsZUFBZTtnQkFDUyxtQkFBbUI7c0JBQXJELFNBQVM7dUJBQUMsc0JBQXNCO2dCQWtCcEIsTUFBTTtzQkFBbEIsS0FBSztnQkFZTyxRQUFRO3NCQUFwQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU08sS0FBSztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIGJvb2xlYW5BdHRyaWJ1dGUsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgbnVtYmVyQXR0cmlidXRlLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBSZW5kZXJlclN0eWxlRmxhZ3MyLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTkdfVkFMVUVfQUNDRVNTT1IsIFVudHlwZWRGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgaXNPYnNlcnZhYmxlLCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIG1lcmdlTWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGZXRjaE1vcmVGbiwgTG9hZFJlc3VsdCwgU3VnZ2VzdEZuIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtcbiAgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZSxcbiAgZmluZFBhcmVudFdpdGhDbGFzcyxcbiAgaXNCbGFua1N0cmluZyxcbiAgaXNOaWwsXG4gIGlzTmlsT3JCbGFuayxcbiAgaXNOb3ROaWwsXG4gIGlzTm90TmlsQm9vbGVhbixcbiAgaXNOb3ROaWxPckJsYW5rLFxuICBpc05vdE5pbFN0cmluZyxcbiAgdG9Cb29sZWFuLFxuICB0b051bWJlcixcbn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7IGZvY3VzSW5wdXQsIElucHV0RWxlbWVudCwgc2VsZWN0SW5wdXRSYW5nZSB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBmaXJzdE5vdE5pbFByb21pc2UgfSBmcm9tICcuLi8uLi9vYnNlcnZhYmxlcyc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSwgRGlzcGxheUZuLCBFcXVhbHNGbiB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgU3Vic2NyaXB0U2l6aW5nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRPcHRpb24sIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGUsIE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgZnJvbVNjcm9sbEVuZEV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzJztcbmltcG9ydCB7IElvblNlYXJjaGJhciwgTW9kYWxDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLi8uLi9wbGF0Zm9ybXMnO1xuaW1wb3J0IHsgc3VnZ2VzdEZyb21BcnJheSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IFNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsIH0gZnJvbSAnQGlvbmljL2NvcmUvZGlzdC90eXBlcy9jb21wb25lbnRzL3NlYXJjaGJhci9zZWFyY2hiYXItaW50ZXJmYWNlJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMgfSBmcm9tICcuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS51dGlscyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZyB9IGZyb20gJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmNvbmZpZyc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IH0gZnJvbSAnQHJ4LWFuZ3VsYXIvY2RrL3pvbmUtbGVzcy9icm93c2VyJztcblxuY29uc3Qgbm9vcCA9IChfPzogYW55KSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbWF0LWF1dG9jb21wbGV0ZS1maWVsZCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5zY3NzJ10sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRBdXRvY29tcGxldGVGaWVsZCksXG4gICAgfSxcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdEF1dG9jb21wbGV0ZUZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIElucHV0RWxlbWVudCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gIHByaXZhdGUgX29uRmV0Y2hNb3JlQ2FsbGJhY2s6IEZldGNoTW9yZUZuPExvYWRSZXN1bHQ8YW55Pj47XG4gIHByaXZhdGUgX2ltcGxpY2l0VmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIF9pdGVtc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9vcGVuZWRTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBfJGZpbHRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBwcml2YXRlIF9pdGVtQ291bnQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfcmVsb2FkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJpdmF0ZSBfZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIHByb3RlY3RlZCBfcmVhZG9ubHkgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF90YWJpbmRleDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgXyRpbnB1dEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIF8kZmlsdGVyZWRJdGVtcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBfZGlzcGxheVZhbHVlID0gJyc7XG4gIHByb3RlY3RlZCBfbW9yZUl0ZW1zQ291bnQ6IG51bWJlcjtcbiAgcHJvdGVjdGVkIF9mZXRjaE1vcmUkID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICBASW5wdXQoKSBlcXVhbHM6IEVxdWFsc0ZuO1xuICBASW5wdXQoKSBsb2dQcmVmaXggPSAnW21hdC1hdXRvY29tcGxldGVdICc7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nID0gbnVsbDtcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogQXBwRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHN1YnNjcmlwdFNpemluZzogU3Vic2NyaXB0U2l6aW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBzdWdnZXN0Rm46IFN1Z2dlc3RGbjxhbnksIGFueT47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbW9iaWxlOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgY2xlYXJhYmxlID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGRlYm91bmNlVGltZTogbnVtYmVyID0gbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheVdpdGg6IERpc3BsYXlGbiB8IG51bGw7XG4gIEBJbnB1dCgpIGRpc3BsYXlBdHRyaWJ1dGVzOiBzdHJpbmdbXTtcbiAgQElucHV0KCkgZGlzcGxheUNvbHVtblNpemVzOiAobnVtYmVyIHwgJ2F1dG8nIHwgdW5kZWZpbmVkKVtdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uTmFtZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGlnaGxpZ2h0QWNjZW50OiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0FsbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93UGFuZWxPbkZvY3VzOiBib29sZWFuO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYXV0b2ZvY3VzID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogTWF0QXV0b2NvbXBsZXRlRmllbGRDb25maWc7XG4gIEBJbnB1dCgpIGkxOG5QcmVmaXggPSAnUkVGRVJFTlRJQUwuJztcbiAgQElucHV0KCkgbm9SZXN1bHRNZXNzYWdlID0gJ0NPTU1PTi5OT19SRVNVTFQnO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoeyBhbGlhczogJ2NsYXNzJyB9KSBwYW5lbENsYXNzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBhbmVsV2lkdGg6IHN0cmluZztcbiAgQElucHV0KCkgbWF0QXV0b2NvbXBsZXRlUG9zaXRpb246ICdhdXRvJyB8ICdhYm92ZScgfCAnYmVsb3cnO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbXVsdGlwbGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGZldGNoTW9yZVRocmVzaG9sZCA9ICcxNSUnO1xuICBASW5wdXQoKSBzdWdnZXN0TGVuZ3RoVGhyZXNob2xkOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0xvYWRpbmdTcGlubmVyID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRlYnVnID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93U2VhcmNoQmFyID0gdHJ1ZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHN0aWNreVNlYXJjaEJhciA9IGZhbHNlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZVJpcHBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBhcHBseUltcGxpY2l0VmFsdWU6IGJvb2xlYW4gfCAoKCkgPT4gYm9vbGVhbikgPSBmYWxzZTtcbiAgQElucHV0KCkgZHJvcEJ1dHRvblRpdGxlOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsZWFyQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgQElucHV0KClcbiAgc29ydENvbXBhcmF0b3I6IChhOiBNYXRPcHRpb24sIGI6IE1hdE9wdGlvbiwgb3B0aW9uczogTWF0T3B0aW9uW10pID0+IG51bWJlcjtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnY2xpY2snKSBjbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxNb3VzZUV2ZW50PigpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1uYXRpdmVcbiAgQE91dHB1dCgnYmx1cicpIGJsdXJyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdmb2N1cycpIGZvY3VzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBkcm9wQnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50Pih0cnVlKTtcbiAgQE91dHB1dCgna2V5ZG93bi5lc2NhcGUnKSBrZXlkb3duRXNjYXBlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2tleXVwLmVudGVyJykga2V5dXBFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBWaWV3Q2hpbGQoJ21hdFNlbGVjdCcpIG1hdFNlbGVjdDogTWF0U2VsZWN0O1xuICBAVmlld0NoaWxkKCdpb25TZWFyY2hiYXInKSBpb25TZWFyY2hiYXI6IElvblNlYXJjaGJhcjtcbiAgQFZpZXdDaGlsZCgnbWF0SW5wdXRUZXh0JykgbWF0SW5wdXRUZXh0OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKE1hdEF1dG9jb21wbGV0ZSkgYXV0b2NvbXBsZXRlOiBNYXRBdXRvY29tcGxldGU7XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcikgYXV0b2NvbXBsZXRlVHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByb3RlY3RlZCBtb2RhbENvbnRyb2xsZXI6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcm90ZWN0ZWQgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KENoYW5nZURldGVjdG9yUmVmKSBwcml2YXRlIHZpZXdSZWY6IFZpZXdSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHt9XG5cbiAgZ2V0IGl0ZW1Db3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnQ7XG4gIH1cblxuICBnZXQgY2FuRmV0Y2hNb3JlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrICYmIHRoaXMuX21vcmVJdGVtc0NvdW50ID4gMDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXIodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fJGZpbHRlci52YWx1ZSkge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFNldHRpbmcgZmlsdGVyOlwiLCB2YWx1ZSk7XG4gICAgICB0aGlzLl8kZmlsdGVyLm5leHQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXIoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fJGZpbHRlci52YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCByZWFkb25seSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlYWRvbmx5ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCByZWFkb25seSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBpdGVtcyh2YWx1ZTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSkge1xuICAgIC8vIFJlbW92ZSBwcmV2aW91cyBzdWJzY3JpcHRpb24gb24gaXRlbXMsIChpZiBleGl0cylcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIGNvbnNvbGUud2Fybih0aGlzLmxvZ1ByZWZpeCArICcgSXRlbXMgcmVjZWl2ZWQgdHdpY2UgIScpO1xuICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZSh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbik7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbiA9IHZhbHVlLnN1YnNjcmliZSgodikgPT4gdGhpcy5fJGlucHV0SXRlbXMubmV4dCh2KSk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLl8kaW5wdXRJdGVtcy52YWx1ZSkge1xuICAgICAgICB0aGlzLl8kaW5wdXRJdGVtcy5uZXh0KHZhbHVlIGFzIGFueVtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaXRlbXMoKTogT2JzZXJ2YWJsZTxhbnlbXT4gfCBhbnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuXyRpbnB1dEl0ZW1zO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XG4gIH1cblxuICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRvbmx5IHx8IHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQ7XG4gIH1cblxuICBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuX3JlYWRvbmx5ICYmIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlZDtcbiAgfVxuXG4gIGdldCBsb2FkaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc05pbCh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSk7XG4gIH1cblxuICBnZXQgZGVza3RvcCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMubW9iaWxlICYmICF0aGlzLm11bHRpcGxlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9XG4gICAgICB0aGlzLmZvcm1Db250cm9sIHx8ICh0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiAodGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIFVudHlwZWRGb3JtQ29udHJvbCkpO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlICdmb3JtQ29udHJvbCcgb3IgJ2Zvcm1Db250cm9sTmFtZScgaW4gPG1hdC1hdXRvY29tcGxldGUtZmllbGQ+LlwiKTtcblxuICAgIC8vIENvbmZpZ3VyYXRpb24gZnJvbSBjb25maWcgb2JqZWN0XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLnN1Z2dlc3RGbiA9IHRoaXMuc3VnZ2VzdEZuIHx8IHRoaXMuY29uZmlnLnN1Z2dlc3RGbjtcbiAgICAgIGlmICghdGhpcy5zdWdnZXN0Rm4gJiYgdGhpcy5jb25maWcuaXRlbXMpIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuY29uZmlnLml0ZW1zO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLmZpbHRlciB8fCB0aGlzLmNvbmZpZy5maWx0ZXI7XG4gICAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzID0gdGhpcy5kaXNwbGF5QXR0cmlidXRlcyB8fCB0aGlzLmNvbmZpZy5hdHRyaWJ1dGVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyB8fCB0aGlzLmNvbmZpZy5jb2x1bW5TaXplcztcbiAgICAgIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzID0gdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgfHwgdGhpcy5jb25maWcuY29sdW1uTmFtZXM7XG4gICAgICB0aGlzLmRpc3BsYXlXaXRoID0gdGhpcy5kaXNwbGF5V2l0aCB8fCB0aGlzLmNvbmZpZy5kaXNwbGF5V2l0aDtcbiAgICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgfHwgdGhpcy5jb25maWcuZXF1YWxzO1xuICAgICAgdGhpcy5tdWx0aXBsZSA9IHRvQm9vbGVhbih0aGlzLm11bHRpcGxlLCB0aGlzLmNvbmZpZy5tdWx0aXBsZSk7XG4gICAgICB0aGlzLm1vYmlsZSA9IHRvQm9vbGVhbih0aGlzLm1vYmlsZSwgdGhpcy5jb25maWcubW9iaWxlKTtcbiAgICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRvTnVtYmVyKHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCwgdGhpcy5jb25maWcuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCk7XG4gICAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd0FsbE9uRm9jdXMsIHRoaXMuY29uZmlnLnNob3dBbGxPbkZvY3VzKTtcbiAgICAgIHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA9IHRvQm9vbGVhbih0aGlzLnNob3dQYW5lbE9uRm9jdXMsIHRoaXMuY29uZmlnLnNob3dQYW5lbE9uRm9jdXMpO1xuICAgICAgdGhpcy5wYW5lbENsYXNzID0gdGhpcy5wYW5lbENsYXNzIHx8IHRoaXMuY29uZmlnLmNsYXNzO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWUgPSB0b051bWJlcih0aGlzLmRlYm91bmNlVGltZSwgdGhpcy5jb25maWcuZGVib3VuY2VUaW1lKTtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0QWNjZW50ID0gdG9Cb29sZWFuKHRoaXMuaGlnaGxpZ2h0QWNjZW50LCB0b0Jvb2xlYW4odGhpcy5jb25maWcuaGlnaGxpZ2h0QWNjZW50KSk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCB2YWx1ZXNcbiAgICB0aGlzLnJlcXVpcmVkID0gaXNOb3ROaWxCb29sZWFuKHRoaXMucmVxdWlyZWQpXG4gICAgICA/IHRoaXMucmVxdWlyZWRcbiAgICAgIDogdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQgfHwgaXNCbGFua1N0cmluZyh0aGlzLnJlcXVpcmVkKTtcbiAgICB0aGlzLm11bHRpcGxlID0gdG9Cb29sZWFuKHRoaXMubXVsdGlwbGUsIGZhbHNlKTtcbiAgICB0aGlzLm1vYmlsZSA9IGlzTm90TmlsKHRoaXMubW9iaWxlKSA/IHRoaXMubW9iaWxlIDogdGhpcy5tdWx0aXBsZSB8fCBpc01vYmlsZSh3aW5kb3cpO1xuICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzIHx8IHRoaXMuZmlsdGVyPy5hdHRyaWJ1dGVzIHx8IFsnbGFiZWwnLCAnbmFtZSddO1xuICAgIHRoaXMuZGlzcGxheVdpdGggPSB0aGlzLmRpc3BsYXlXaXRoIHx8IE1hdEF1dG9jb21wbGV0ZUZpZWxkVXRpbHMuY3JlYXRlRGlzcGxheUZuKHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsIHRoaXMubXVsdGlwbGUpO1xuICAgIHRoaXMuZXF1YWxzID0gdGhpcy5lcXVhbHMgfHwgTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscy5kZWZhdWx0RXF1YWxzO1xuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgPVxuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uU2l6ZXMgfHxcbiAgICAgIC8vIGlmIG9ubHkgY29sdW1uOiBhdXRvIHNpemVcbiAgICAgICh0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMSAmJiBbdW5kZWZpbmVkXSkgfHxcbiAgICAgIC8vIENvbXB1dGVkIGNvbHVtbiBzaXplOlxuICAgICAgLy8gLSBpZiBsYWJlbCB0aGVuIGNvbCBzaXplID0gMlxuICAgICAgLy8gLSBpZiByYW5rT3JkZXIgdGhlbiBjb2wgc2l6ZSA9IDFcbiAgICAgIC8vIC0gZXNlID0+IGF1dG8gc2l6ZVxuICAgICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcy5tYXAoKGF0dHIpID0+IGF0dHIgJiYgKGF0dHIuZW5kc1dpdGgoJ2xhYmVsJykgPyAzIDogYXR0ci5lbmRzV2l0aCgncmFua09yZGVyJykgPyAyIDogdW5kZWZpbmVkKSk7XG4gICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcChcbiAgICAgIChhdHRyLCBpbmRleCkgPT4gKHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzICYmIHRoaXMuZGlzcGxheUNvbHVtbk5hbWVzW2luZGV4XSkgfHwgdGhpcy5pMThuUHJlZml4ICsgY2hhbmdlQ2FzZVRvVW5kZXJzY29yZShhdHRyKS50b1VwcGVyQ2FzZSgpXG4gICAgKTtcbiAgICBjb25zdCBwYW5lbENsYXNzID0gdGhpcy5wYW5lbENsYXNzPy5zcGxpdCgnICcpO1xuICAgIHRoaXMucGFuZWxXaWR0aCA9XG4gICAgICB0aGlzLnBhbmVsV2lkdGggfHxcbiAgICAgIChwYW5lbENsYXNzICYmXG4gICAgICAgICgocGFuZWxDbGFzcy5pbmNsdWRlcygnbWluLXdpZHRoLW1lZGl1bScpICYmICczMDBweCcpIHx8XG4gICAgICAgICAgKHBhbmVsQ2xhc3MuaW5jbHVkZXMoJ21pbi13aWR0aC1sYXJnZScpICYmICc0MDBweCcpIHx8XG4gICAgICAgICAgKHBhbmVsQ2xhc3MuaW5jbHVkZXMoJ21pbi13aWR0aC14bGFyZ2UnKSAmJiAnNDUwcHgnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzLmluY2x1ZGVzKCdtaW4td2lkdGgtODB2dycpICYmICc4MHZ3JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzcy5pbmNsdWRlcygnbWF0LW1kYy1hdXRvY29tcGxldGUtcGFuZWwtZnVsbC1zaXplJykgJiYgJzEwMHZ3JykpKTtcbiAgICB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfHwgMDtcbiAgICB0aGlzLnNob3dBbGxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd0FsbE9uRm9jdXMsIHRoaXMubW9iaWxlICYmIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwKTtcbiAgICB0aGlzLnNob3dQYW5lbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93UGFuZWxPbkZvY3VzLCB0cnVlKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRvTnVtYmVyKHRoaXMuZGVib3VuY2VUaW1lLCB0aGlzLm1vYmlsZSA/IDY1MCA6IDI1MCk7XG4gICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSB0b0Jvb2xlYW4odGhpcy5oaWdobGlnaHRBY2NlbnQsIGZhbHNlKTtcbiAgICB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uID0gdGhpcy5tYXRBdXRvY29tcGxldGVQb3NpdGlvbiB8fCAnYXV0byc7XG5cbiAgICAvLyBObyBzdWdnZXN0Rm46IGZpbHRlciBvbiB0aGUgZ2l2ZW4gaXRlbXNcbiAgICBpZiAoIXRoaXMuc3VnZ2VzdEZuKSB7XG4gICAgICBjb25zdCBzdWdnZXN0RnJvbUFycmF5Rm46IFN1Z2dlc3RGbjxhbnksIGFueT4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT5cbiAgICAgICAgLy8gREVCVUdcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBDYWxsaW5nIHN1Z2dlc3RGcm9tQXJyYXkgd2l0aCB2YWx1ZT0nLCB2YWx1ZSk7XG5cbiAgICAgICAgc3VnZ2VzdEZyb21BcnJheSh0aGlzLl8kaW5wdXRJdGVtcy52YWx1ZSwgdmFsdWUsIHtcbiAgICAgICAgICBzZWFyY2hBdHRyaWJ1dGVzOiB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLFxuICAgICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgfSk7XG4gICAgICAvLyBXYWl0IChvbmNlKSB0aGF0IGl0ZW1zIGFyZSBsb2FkZWQsIHRoZW4gY2FsbCBzdWdnZXN0IGZyb20gYXJyYXkgZm5cbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gYXN5bmMgKHZhbHVlLCBmaWx0ZXIpID0+IHtcbiAgICAgICAgaWYgKGlzTmlsKHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlKSkge1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgV2FpdGluZyBpdGVtcyB0byBiZSBzZXQuLi5cIik7XG5cbiAgICAgICAgICBhd2FpdCBmaXJzdE5vdE5pbFByb21pc2UodGhpcy5fJGlucHV0SXRlbXMpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCBpdGVtczpcIiwgdGhpcy5pbnB1dEl0ZW1zJC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBzdWdnZXN0RnJvbUFycmF5Rm47XG4gICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3RGbih2YWx1ZSwgZmlsdGVyKTsgLy8gTG9vcFxuICAgICAgfTtcbiAgICB9XG4gICAgLy8gU3VnZ2VzdCArIG1vYmlsZVxuICAgIC8vID0+IE1hbnVhbGx5IGZpbGwgaW5wdXQgaXRlbXMsIGZyb20gdGhlIGdpdmVuIHN1Z2dlc3QgZnVuY3Rpb25cbiAgICBlbHNlIGlmICh0aGlzLm1vYmlsZSB8fCB0aGlzLm11bHRpcGxlKSB7XG4gICAgICAvKnRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHRoaXMuXyRmaWx0ZXIucGlwZShcbiAgICAgICAgICBzdGFydFdpdGg8YW55LCBhbnk+KHRoaXMuZmlsdGVyKSxcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMjUwKSxcbiAgICAgICAgICBmaWx0ZXIoXyA9PiB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCksXG4gICAgICAgICAgc3dpdGNoTWFwKChmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCgnKicsIGZpbHRlcikpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShpdGVtcyA9PiB0aGlzLiRpbnB1dEl0ZW1zLm5leHQoaXRlbXMpKVxuICAgICAgKTsqL1xuICAgIH1cblxuICAgIC8vIFNlbmQgdmFsdWUgdG8gc3VnZ2VzdCB3aGVuIDpcbiAgICAvLyAtIGlzIG5pbCBhbmQgJyonLCBhbmQgbm8gbWluIGxlbmd0aCB0aHJlc2hvbGRcbiAgICAvLyAtIGlzIG5vdCBuaWwgYW5kIG5vdCBhIHN0cmluZyB0eXBlIChlLmcuIG9iamVjdClcbiAgICAvLyAtIGlzIG5vdCBuaWwgYW5kIGlzIGEgc3RyaW5nLCBhbmQgaGFzIGVub3VnaCBjaGFyYWN0ZXJcbiAgICBjb25zdCB0aHJlc2hvbGRGaWx0ZXJGbiA9ICh2YWx1ZSkgPT5cbiAgICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwIHx8XG4gICAgICAoaXNOb3ROaWwodmFsdWUpICYmICghKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHx8ICh2YWx1ZSAhPT0gJyonICYmIHZhbHVlLnRyaW0oKS5sZW5ndGggPj0gdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKSkpO1xuXG4gICAgY29uc3QgZmlsdGVyZWRJdGVtc0NoYW5nZXMgPSBtZXJnZShcbiAgICAgIC8vIFJlbG9hZCBldmVudCAobm8gZGlzdGluY3RVbnRpbENoYW5nZWQoKSBwaXBlLCB0byBmb3JjZSByZWxvYWQgZXZlbiBpZiBzYW1lIHZhbHVlKVxuICAgICAgdGhpcy5fcmVsb2FkJC5waXBlKFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKSxcbiAgICAgICAgdGFwKChfKSA9PiB0aGlzLnNob3dMb2FkaW5nU3Bpbm5lciAmJiB0aGlzLm1hcmtBc0xvYWRpbmcoKSlcbiAgICAgICksXG5cbiAgICAgIC8vIFNlYXJjaCB0ZXh0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIGJlY2F1c2Ugb2YgdGhlIGRlYm91bmNlVGltZSgpIHBpcGUpXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICBmaWx0ZXIoKHZhbHVlKSA9PiB0aGlzLmVuYWJsZWQgJiYgaXNOb3ROaWxTdHJpbmcodmFsdWUpKSxcbiAgICAgICAgLy8gTWFyayBhcyBsb2FkaW5nICh0byBzaG93IGxvYWRpbmcgc3Bpbm5lcikgLSBhcyBzb29uIGFzIHBvc3NpYmxlLCBhbmQgYmVmb3JlIGRlYm91bmNlVGltZVxuICAgICAgICB0YXAoKF8pID0+IHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyICYmIHRoaXMubWFya0FzTG9hZGluZygpKSxcbiAgICAgICAgLy8gRmlsdGVyIGlmIG5vdCBlbm91Z2ggY2hhcmFjdGVyXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IHtcbiAgICAgICAgICBpZiAoKHZhbHVlPy5sZW5ndGggfHwgMCkgPCB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBkaXNwbGF5IHZhbHVlLCB0byBlbmFibGUgdGhlIG1lc3NhZ2UgXCJub3QgZW5vdWdoIGNoYXJhY3RlcnNcIlxuICAgICAgICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSxcbiAgICAgICAgLy8gV2FpdCBhIGRlYm91bmNlIHRpbWVcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKVxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyx0YXAoKHZhbHVlKSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFNlYXJjaCB0ZXh0IGNoYW5nZXM6JywgdmFsdWUpKVxuICAgICAgKSxcblxuICAgICAgLy8gT2JqZWN0IHNldDogdXNlIGl0IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUgbmVlZClcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4odGhpcy5mb3JtQ29udHJvbC52YWx1ZSksXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IGlzTm90TmlsKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSxcbiAgICAgICAgdGFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgY29udHJvbCBvYmplY3QgY2hhbmdlczonLCB2YWx1ZSk7XG5cbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgKGlmIG5lZWQpXG4gICAgICAgICAgY29uc3QgZGlzcGxheVZhbHVlID0gdGhpcy5kaXNwbGF5V2l0aCh2YWx1ZSkgfHwgJyc7XG4gICAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlWYWx1ZSAhPT0gZGlzcGxheVZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBkaXNwbGF5VmFsdWU7XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IHRvIHRoZSBpbnB1dFt0eXBlPXRleHRdIGZpZWxkXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRJbnB1dFRleHQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5tYXRJbnB1dFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSA9IHRoaXMuX2Rpc3BsYXlWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICAvLyBJZiBtdWx0aXBsZTogZG8gbm90IHJlY29tcHV0ZSBpdGVtcyAob25seSBmb3IgdGhlIGZpcnN0IHRpbWUsIHdoZW4gbG9hZGluZylcbiAgICAgICAgLy8gd2hlbiBmb3JtQ29udHJvbCB2YWx1ZSBjaGFuZ2VzXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5tdWx0aXBsZSB8fCB0aGlzLmxvYWRpbmcpLFxuXG4gICAgICAgIG1hcCgodmFsdWUpID0+ICh0aGlzLnNob3dBbGxPbkZvY3VzICYmIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwID8gJyonIDogdmFsdWUpKVxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyx0YXAodmFsdWUgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBhbiBjb250cm9sIG9iamVjdCB2YWx1ZTogJywgdmFsdWUpKVxuICAgICAgKSxcblxuICAgICAgLy8gTWVyZ2Ugc29tZSBvYnNlcnZhYmxlcywgd2l0aCBhIGNvbW1vbiBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGVcbiAgICAgIG1lcmdlKFxuICAgICAgICAvLyBPbiBkcm9wZG93biBidXR0b24gY2xpY2sgKG5vIGRlYm91bmNlVGltZSlcbiAgICAgICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2sucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQgfHwgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSxcbiAgICAgICAgLy8gRm9jdXMgb3IgY2xpY2sgPT4gTG9hZCBhbGwgKG5vIGRlYm91bmNlVGltZSlcbiAgICAgICAgbWVyZ2UodGhpcy5mb2N1c2VkLCB0aGlzLmNsaWNrZWQpLFxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLy5waXBlKHRhcChfID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZm9jdXNlZCBvciBjbGlja2VkIGV2ZW50JykpKSxcbiAgICAgICAgLy8gSW5wdXQgaXRlbXMgb3IgZmlsdGVyIGNoYW5nZXNcbiAgICAgICAgbWVyZ2UodGhpcy5fJGlucHV0SXRlbXMsIHRoaXMuXyRmaWx0ZXIpXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoXykgPT4gIXRoaXMubG9hZGluZylcbiAgICAgICAgICAgIC8vLHRhcChfID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgJGlucHV0SXRlbXMgb3IgZmlsdGVyIGV2ZW50JykpXG4gICAgICAgICAgKVxuICAgICAgKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKF8pID0+IHRoaXMuZW5hYmxlZCksXG4gICAgICAgIG1hcCgoXykgPT4gKHRoaXMuc2hvd0FsbE9uRm9jdXMgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSksXG4gICAgICAgIC8vIERpc3Rpbmd1aXNoIGNoYW5nZXNcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHYxLCB2MikgPT5cbiAgICAgICAgICAvLyBJZiBsb2FkaW5nIChub3QgbG9hZGVkIHlldCksIHNpbXVsYXRlIHRoYXQgdmFsdWUgY2hhbmdlZCB0byBmb3JjZSBsb2FkXG4gICAgICAgICAgdGhpcy5sb2FkaW5nID8gZmFsc2UgOiB2MSA9PT0gdjIgfHwgdGhpcy5lcXVhbHModjEsIHYyKVxuICAgICAgICApLFxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIGNoYXJhY3RlcnNcbiAgICAgICAgZmlsdGVyKHRocmVzaG9sZEZpbHRlckZuKVxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvLyx0YXAodmFsdWUgPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCB1cGRhdGUgZXZlbnQgZnJvbSBvYnNlcnZhYmxlczogJywgdmFsdWUpKVxuICAgICAgKVxuICAgICkucGlwZShcbiAgICAgIC8vIFN1Z2dlc3QgdmFsdWVzXG4gICAgICBtZXJnZU1hcCgodmFsdWUpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgdGhpcy5maWx0ZXIpKSxcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcChpdGVtcyA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGZyb20gc3VnZ2VzdDogJywgaXRlbXMpKSxcblxuICAgICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgICB0YXAoKGl0ZW1zKSA9PiAhdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5tb2JpbGUgJiYgdGhpcy51cGRhdGVJbXBsaWNpdFZhbHVlKGl0ZW1zKSlcbiAgICApO1xuXG4gICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICBjb25zdCBmZXRjaE1vcmVJdGVtc0NoYW5nZXMgPSB0aGlzLl9mZXRjaE1vcmUkLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50KSA9PiBldmVudD8ucHJldmVudERlZmF1bHQoKSksIC8vIEF2b2lkIHRvIGNsb3NlIHRoZSBtYXQtc2VsZWN0XG4gICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5jYW5GZXRjaE1vcmUpLFxuICAgICAgbWVyZ2VNYXAoKCkgPT4gdGhpcy5mZXRjaE1vcmUoKSksXG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL3RhcChtb3JlSXRlbXMgPT4gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZnJvbSBmZXRjaCBNb3JlOiAnLCBtb3JlSXRlbXMpKSxcblxuICAgICAgLy8gQ29uY2F0IHRvIGV4aXN0aW5nIGl0ZW1zXG4gICAgICBtYXAoKG1vcmVJdGVtcykgPT4gKHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLnZhbHVlIHx8IFtdKS5jb25jYXQobW9yZUl0ZW1zKSlcbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIGZpbHRlcmVkIGl0ZW1zXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIG1lcmdlKFxuICAgICAgICB0aGlzLl8kaW5wdXRJdGVtcyxcblxuICAgICAgICAvLyBVcGRhdGUgaXRlbXMgZXZlbnRzXG4gICAgICAgIGZpbHRlcmVkSXRlbXNDaGFuZ2VzLFxuXG4gICAgICAgIC8vIEZldGNoIG1vcmUgZXZlbnRzXG4gICAgICAgIGZldGNoTW9yZUl0ZW1zQ2hhbmdlc1xuICAgICAgKS5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSBjb250cm9sIHZhbHVlIGlzIGluc2lkZSAobWF0LXNlbGVjdClcbiAgICAgICAgaWYgKGl0ZW1zICYmICh0aGlzLm1vYmlsZSB8fCB0aGlzLm11bHRpcGxlKSkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcblxuICAgICAgICAgIC8vIElmIGZvcm0gdmFsdWUgaXMgbWlzc2luZzogYXBwZW5kIHRvIGxpc3RcbiAgICAgICAgICBpZiAoaXNOb3ROaWwodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdCh2YWx1ZS5maWx0ZXIoKHYpID0+IGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gdGhpcy5lcXVhbHMoaXRlbSwgdikpID09PSAtMSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIGl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gdGhpcy5lcXVhbHMoaXRlbSwgdmFsdWUpKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgaXRlbXMgPSBpdGVtcy5jb25jYXQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbWl0IGl0ZW1zXG4gICAgICAgIHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLm5leHQoaXRlbXMpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gQXBwbHlpbmcgaW1wbGljaXQgdmFsdWUsIG9uIGJsdXJcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5ibHVycmVkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIFNraXAgaWYgbXVsdGlwbGUgKG5vIGltcGxpY2l0IHZhbHVlKSBvciBkaXNhYmxlXG4gICAgICAgICAgZmlsdGVyKChfKSA9PiAhdGhpcy5tdWx0aXBsZSAmJiAhdGhpcy5tb2JpbGUgJiYgdGhpcy5lbmFibGVkKSxcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vLHRhcChfID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgYmx1cnJlZCBldmVudCcpKSxcbiAgICAgICAgICBtYXAoKF8pID0+IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAvLyBXaGVuIGxlYXZlIGNvbXBvbmVudCB3aXRob3V0IG9iamVjdCwgdXNlIGltcGxpY2l0IHZhbHVlIGlmIDpcbiAgICAgICAgICAvLyAtIGFuIGV4cGxpY2l0IHZhbHVlXG4gICAgICAgICAgLy8gLSBmaWVsZCBpcyBub3QgZW1wdHkgKHVzZXIgZmlsbCBzb21ldGhpbmcpXG4gICAgICAgICAgLy8gLSBPUiBmaWVsZCBlbXB0eSBidXQgaXMgcmVxdWlyZWRcbiAgICAgICAgICBpZiAodGhpcy5faW1wbGljaXRWYWx1ZSAmJiAoKHRoaXMucmVxdWlyZWQgJiYgaXNOaWxPckJsYW5rKHZhbHVlKSkgfHwgKGlzTm90TmlsT3JCbGFuayh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykpKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5faW1wbGljaXRWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMubmV4dChbdGhpcy5faW1wbGljaXRWYWx1ZV0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNOaWxPckJsYW5rKHZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICAgICAgICAgIHRoaXMubWFya0FzTG9hZGluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gbnVsbDsgLy8gcmVzZXQgdGhlIGltcGxpY2l0IHZhbHVlXG4gICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7IC8vIENsb25lIHBhbmVsXG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBmb3JtIGNvbnRyb2wgc3RhdHVzIGNoYW5nZVxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXNcbiAgICAgICAgLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcbiAgICAgICAgLy8gVXBkYXRlIGNvbXBvbmVudCBzdGF0ZVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2hlY2tJZlRvdWNoZWQoKSlcbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMua2V5ZG93bkVzY2FwZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgIC8vIEF2b2lkIGZvcm0gb3IgcGFnZSB0byBtYW5hZ2UgZXNjYXBlIGV2ZW50XG4gICAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDbG9zaW5nIHRoZSBwYW5lbCAoa2V5ZG93bi5lc2NhcGUpXCIpO1xuXG4gICAgICAgICAgdGhpcy5jbG9zZVBhbmVsKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLl9maXhNYXRTZWxlY3RQb3NpdGlvbkFuZFNlYXJjaGJhcigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgaWYgKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5fJGlucHV0SXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kaW5wdXRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLl9yZWxvYWQkLmNvbXBsZXRlKCk7XG4gICAgdGhpcy5fJGZpbHRlci5jb21wbGV0ZSgpO1xuXG4gICAgdGhpcy5kcm9wQnV0dG9uQ2xpY2suY29tcGxldGUoKTtcbiAgICB0aGlzLmNsaWNrZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmJsdXJyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmZvY3VzZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleWRvd25Fc2NhcGUuY29tcGxldGUoKTtcbiAgICB0aGlzLmtleXVwRW50ZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mZXRjaE1vcmUkLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9pbXBsaWNpdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSBudWxsO1xuICAgIHRoaXMuZGlzcGxheVdpdGggPSBudWxsO1xuICAgIHRoaXMuZXF1YWxzID0gbnVsbDtcbiAgICB0aGlzLnN1Z2dlc3RGbiA9IG51bGw7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMgPSBudWxsO1xuICAgIHRoaXMuY29uZmlnID0gbnVsbDtcbiAgICB0aGlzLnBhbmVsQ2xhc3MgPSBudWxsO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBudWxsO1xuXG4gICAgLy8gRGVzdHJveSB0aGUgJ2F1dG9jb21wbGV0ZScgaW5zdGFuY2UsIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgaWYgKHRoaXMuYXV0b2NvbXBsZXRlKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZS5uZ09uRGVzdHJveSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byByZWxvYWQgY29udGVudC4gVXNlZnVsIHdoZW4gZmlsdGVyIGhhcyBiZWVuIGNoYW5nZWQgYnV0IG5vdCBkZXRlY3RlZFxuICAgKi9cbiAgcmVsb2FkSXRlbXModmFsdWU/OiBhbnkpIHtcbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBBc2tpbmcgdG8gcmVsb2FkSXRlbXMoKVwiKTtcbiAgICAvLyBGb3JjZSBhIHJlZnJlc2hcbiAgICB0aGlzLl9yZWxvYWQkLm5leHQodmFsdWUgfHwgKHRoaXMuc2hvd0FsbE9uRm9jdXMgJiYgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDAgPyAnKicgOiB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSk7XG5cbiAgICAvLyBDbGVhciB0aGUgc2VhcmNoIGJhciAoaWYgaGlkZGVuKVxuICAgIGlmICh0aGlzLm1vYmlsZSAmJiAhdGhpcy5tYXRTZWxlY3QucGFuZWxPcGVuICYmIHRoaXMuaW9uU2VhcmNoYmFyKSB7XG4gICAgICB0aGlzLmlvblNlYXJjaGJhci52YWx1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgLy8gREVCVUdcbiAgICAvLyBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgV3JpdGluZyB2YWx1ZTogJywgdmFsdWUpO1xuXG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHRoaXMuZGlzcGxheVdpdGgodmFsdWUpO1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNEaXNhYmxlZCAmJiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICh0aGlzLm1vYmlsZSkge1xuICAgICAgdGhpcy5tYXRTZWxlY3QuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9jdXNJbnB1dCh0aGlzLm1hdElucHV0VGV4dCk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVySW5wdXRUZXh0Rm9jdXNFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgLy8gSWdub3JlIGV2ZW50IGZyb20gbWF0LW9wdGlvblxuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBDYW5jZWxsaW5nIGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFNlbGVjdCBpbnB1dCBjb250ZW50Jyk7XG4gICAgY29uc3QgaGFzQ29udGVudCA9IGlzTm90TmlsT3JCbGFuaygoZXZlbnQudGFyZ2V0IGFzIGFueSk/LnZhbHVlKTtcblxuICAgIC8vIElmIGNvbWJvIGlzIGVtcHR5LCBvciBpZiBoYXMgY29udGVudCBidXQgc2hvdWxkIGZvcmNlIHRvIHNob3cgcGFuZWwgb24gZm9jdXNcbiAgICBpZiAoIWhhc0NvbnRlbnQgfHwgdGhpcy5zaG93UGFuZWxPbkZvY3VzIHx8IHRoaXMuc2hvd0FsbE9uRm9jdXMpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBFbWl0IGZvY3VzIGV2ZW50Jyk7XG5cbiAgICAgIHRoaXMuZm9jdXNlZC5lbWl0KCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZpbHRlcklucHV0VGV4dEJsdXJFdmVudChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgLy8gTmVlZCBhIHRpbWVvdXQgdG8gcHJldmVudCBlYXJseSBibHVyIGV2ZW50IHdpdGhvdXQgdHJpZ2dlcmluZyBmb3JtQ2hhbmdlIGV2ZW50XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgICBpZiAoXG4gICAgICAgIChldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpIHx8XG4gICAgICAgIC8vIE9yIGF1dG9jb21wbGV0ZSBwYW5lbCBpcyBvcGVuIGJlY2F1c2UgZXZlbnQucmVsYXRlZFRhcmdldCBpcyBudWxsIChjZi4gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMjQxODIpXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW5cbiAgICAgICkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyBibHVyIGV2ZW50XCIpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEJsdXI6IG1vdmUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZycpO1xuXG4gICAgICAvLyBNb3ZlIGNhcmV0IHRvIHRoZSBiZWdpbm5pbmcgKGZpeCBpc3N1ZSBJTUFHSU5FLTQ2OSlcbiAgICAgIHNlbGVjdElucHV0UmFuZ2UoZXZlbnQudGFyZ2V0IGFzIGFueSwgMCwgMCk7XG5cbiAgICAgIHRoaXMuYmx1cnJlZC5lbWl0KGV2ZW50KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW9uU2VhcmNoQmFyQ2hhbmdlZChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIXRoaXMubWF0U2VsZWN0LnBhbmVsT3BlbikgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBHZXQgdGhlIHZhbHVlIHRvIHNlYXJjaFxuICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50IGFzIEN1c3RvbUV2ZW50PFNlYXJjaGJhckNoYW5nZUV2ZW50RGV0YWlsPik/LmRldGFpbC52YWx1ZTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgUmVjZWl2ZWQgPGlvbi1zZWFyY2hiYXI+IGNoYW5nZXNcIiwgdmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBkaXNwbGF5IHZhbHVlIChpbiB0aGUgdmlzaWJsZSBmb3JtIGNvbnRyb2wpXG4gICAgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBNYXJrIGNvbXBvbmVudCBhcyBsb2FkaW5nXG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG5cbiAgICAvLyBSZWxvYWQgaXRlbXNcbiAgICB0aGlzLnJlbG9hZEl0ZW1zKHZhbHVlKTtcblxuICAgIC8vIFRPRE8gRmluZCBhIHdheSB0byBhdm9pZCBtYXQtc2VsZWN0IHRvIGdpdmUgZm9jdXMgdG8gYW4gb3B0aW9uLCB3aGVuIHR5cGluZ1xuICAgIC8qaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Ll9lbGVtZW50UmVmO1xuICAgIH0qL1xuICB9XG5cbiAgaW9uU2VhcmNoQmFyQ2hhbmdlZDEoZXZlbnQpIHtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gIH1cblxuICBmaWx0ZXJNYXRTZWxlY3RGb2N1c0V2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgLy8gREVCVUdcbiAgICBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCA8bWF0LXNlbGVjdD4gZm9jdXMgZXZlbnQnLCBldmVudCk7XG4gICAgdGhpcy5mb2N1c2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgZmlsdGVyTWF0U2VsZWN0Qmx1ckV2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBERUJVR1xuICAgIC8vIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCA8bWF0LXNlbGVjdD4gYmx1ciBldmVudFwiLCBldmVudCk7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5yZWxhdGVkVGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcbiAgICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICAgIChldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJyB8fFxuICAgICAgICAoZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnRElWJyAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbWF0LW1kYy1zZWxlY3QtcGFuZWwnKSkgfHwgLy8gTmV3IE1EQyB0YWcgYW5kIGNsYXNzIG5hbWUgKGVxdWl2YWxlbnQgdG8gZXZlbnQucmVsYXRlZFRhcmdldC50YWdOYW1lID09PSAnTUFULU9QVElPTicpXG4gICAgICAgIChldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdJTlBVVCcgJiYgZXZlbnQucmVsYXRlZFRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3NlYXJjaGJhci1pbnB1dCcpKSlcbiAgICApIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy8gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIENhbmNlbGxpbmcgPG1hdC1zZWxlY3Q+IGJsdXIgZXZlbnRcIik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5ibHVycmVkLmVtaXQoZXZlbnQpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY2xlYXJWYWx1ZShldmVudD86IEV2ZW50KSB7XG4gICAgdGhpcy53cml0ZVZhbHVlKG51bGwpO1xuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBpZiAodGhpcy5pb25TZWFyY2hiYXIpIHtcbiAgICAgIHRoaXMuaW9uU2VhcmNoYmFyLnZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gIH1cblxuICBfaW5pdEF1dG9jb21wbGV0ZUluZmluaXRlU2Nyb2xsKHRocmVzaG9sZD86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hdXRvY29tcGxldGUpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEluaXQgYXV0b2NvbXBsZXRlIHNjcm9sbCBsaXN0ZW5lcicpO1xuXG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5hdXRvY29tcGxldGUuX2lzT3BlbiA/IHRpbWVyKDApIDogdGhpcy5hdXRvY29tcGxldGUub3BlbmVkLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xuICAgIGNvbnN0IHNjcm9sbEVuZCQgPSBvcGVuZWQkLnBpcGUoXG4gICAgICBtYXAoKF8pID0+IHRoaXMuZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKSksXG4gICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgc3dpdGNoTWFwKChwYW5lbCkgPT4gZnJvbVNjcm9sbEVuZEV2ZW50KHBhbmVsLCB0aHJlc2hvbGQpKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLmF1dG9jb21wbGV0ZS5jbG9zZWQpXG4gICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCQuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2ZldGNoTW9yZSQuZW1pdCgpKTtcblxuICAgIC8vIFJlZ2lzdGVyIHN1YnNjcmlwdGlvblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIF9pbml0TWF0U2VsZWN0SW5maW5pdGVTY3JvbGwodGhyZXNob2xkPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLm1hdFNlbGVjdCkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgSW5pdCBtYXQtc2VsZWN0IHNjcm9sbCBsaXN0ZW5lcicpO1xuXG4gICAgaWYgKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3Qgb3BlbmVkJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5tYXRTZWxlY3QucGFuZWxPcGVuID8gdGltZXIoMCkgOiB0aGlzLm1hdFNlbGVjdC5fb3BlbmVkU3RyZWFtLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpO1xuICAgIGNvbnN0IHNjcm9sbEVuZCQgPSBvcGVuZWQkLnBpcGUoXG4gICAgICBtYXAoKF8pID0+IHRoaXMuZ2V0TWF0U2VsZWN0UGFuZWwoKSksXG4gICAgICBmaWx0ZXIoaXNOb3ROaWwpLFxuICAgICAgc3dpdGNoTWFwKChwYW5lbCkgPT4gZnJvbVNjcm9sbEVuZEV2ZW50KHBhbmVsLCB0aHJlc2hvbGQpKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLm1hdFNlbGVjdC5fY2xvc2VkU3RyZWFtKVxuICAgICk7XG5cbiAgICAvLyBUcmlnZ2VyIGZldGNoIG1vcmUsIGVuZCBlbmQgc2Nyb2xsIHJlYWNoZWRcbiAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24gPSBzY3JvbGxFbmQkLnBpcGUoZmlsdGVyKChfKSA9PiB0aGlzLl9tb3JlSXRlbXNDb3VudCA+IDApKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZmV0Y2hNb3JlJC5lbWl0KCkpO1xuXG4gICAgLy8gUmVnaXN0ZXIgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0IGlzT3BlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKCF0aGlzLm1vYmlsZSAmJiB0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuKSB8fCB0aGlzLm1hdFNlbGVjdD8ucGFuZWxPcGVuIHx8IGZhbHNlO1xuICB9XG5cbiAgY2xvc2VQYW5lbCgpIHtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGU/LmlzT3Blbikge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVUcmlnZ2VyPy5jbG9zZVBhbmVsKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1hdFNlbGVjdD8ucGFuZWxPcGVuKSB7XG4gICAgICB0aGlzLm1hdFNlbGVjdD8uY2xvc2UoKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgYXN5bmMgc3VnZ2VzdCh2YWx1ZTogYW55LCBmaWx0ZXI/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgLy8gQ2FsbCBzdWdnZXN0aW9uIGZ1bmN0aW9uXG4gICAgbGV0IHJlcyA9IGF3YWl0IHRoaXMuc3VnZ2VzdEZuKHZhbHVlLCBmaWx0ZXIpO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBGaWx0ZXJlZCBpdGVtcyBieSBzdWdnZXN0Rm46JywgdmFsdWUsIHJlcyk7XG5cbiAgICBpZiAoIXJlcykge1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gMDtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IDA7XG4gICAgICByZXMgPSBbXTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgcmVzID0gcmVzIGFzIGFueVtdO1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gcmVzPy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgZGF0YSwgdG90YWwsIGZldGNoTW9yZSB9ID0gcmVzIGFzIExvYWRSZXN1bHQ8YW55PjtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHRvTnVtYmVyKHRvdGFsLCAoZGF0YSAmJiBkYXRhLmxlbmd0aCkgfHwgMCk7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAoZmV0Y2hNb3JlICYmIHRoaXMuX2l0ZW1Db3VudCAtIGRhdGEubGVuZ3RoKSB8fCAwO1xuICAgICAgcmVzID0gZGF0YTtcbiAgICB9XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEZpbHRlcmVkIGl0ZW1zIGJ5IHN1Z2dlc3RGbjonLCB2YWx1ZSwgcmVzKTtcblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoTW9yZSgpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgaWYgKCF0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrKSByZXR1cm4gW107XG5cbiAgICAvLyBTYXZlIHRoZW4gcmVtb3ZlIGZldGNoIGZ1bmN0aW9uICh0byBhdm9pZCBtdWx0aS1jYWxsKVxuICAgIGNvbnN0IGZldGNoTW9yZUZuID0gdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjaztcbiAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgeyBkYXRhLCB0b3RhbCwgZmV0Y2hNb3JlIH0gPSBhd2FpdCBmZXRjaE1vcmVGbigpO1xuICAgIHRoaXMuX2l0ZW1Db3VudCA9IHRvdGFsIHx8IHRoaXMuX2l0ZW1Db3VudDtcbiAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gZmV0Y2hNb3JlO1xuICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gTWF0aC5tYXgoMCwgdGhpcy5fbW9yZUl0ZW1zQ291bnQgLSBkYXRhLmxlbmd0aCk7IC8vIEJvcm5lIG1pbiA9IDBcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW1wbGljaXRWYWx1ZShpdGVtczogYW55W10pIHtcbiAgICBjb25zdCBhcHBseUltcGxpY2l0VmFsdWUgPSB0eXBlb2YgdGhpcy5hcHBseUltcGxpY2l0VmFsdWUgPT09ICdmdW5jdGlvbicgPyB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSgpIDogdGhpcy5hcHBseUltcGxpY2l0VmFsdWU7XG4gICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGFwcGx5SW1wbGljaXRWYWx1ZSkge1xuICAgICAgLy8gU3RvcmUgaW1wbGljaXQgdmFsdWUgKHdpbGwgdXNlIGl0IG9uQmx1ciBpZiBub3Qgb3RoZXIgdmFsdWUgc2VsZWN0ZWQpXG4gICAgICBpZiAoaXRlbXMgJiYgaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBpdGVtc1swXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZVBhbmVsKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBlbGUgPSB0aGlzLmF1dG9jb21wbGV0ZT8ub3B0aW9ucy5sYXN0Py5fZ2V0SG9zdEVsZW1lbnQoKS5wYXJlbnRFbGVtZW50O1xuICAgIGlmICghZWxlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBVbmFibGUgdG8gZmluZCB0aGUgYXV0b2NvbXBsZXRlIGRpdi4uLicpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRNYXRTZWxlY3RQYW5lbCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgZWxlID0gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucy5sYXN0Py5fZ2V0SG9zdEVsZW1lbnQoKS5wYXJlbnRFbGVtZW50O1xuICAgIGlmICghZWxlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBVbmFibGUgdG8gZmluZCB0aGUgbWF0LXNlbGVjdCBjb250YWluZXIuLi4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGVsZTtcbiAgfVxuXG4gIHByaXZhdGUgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0FzTG9hZGluZygpIHtcbiAgICBpZiAodGhpcy5fJGZpbHRlcmVkSXRlbXMudmFsdWUpIHtcbiAgICAgIHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLm5leHQodW5kZWZpbmVkKTtcbiAgICAgIHRoaXMuX2l0ZW1Db3VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSAwO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9maXhNYXRTZWxlY3RQb3NpdGlvbkFuZFNlYXJjaGJhcigpIHtcbiAgICBpZiAoIXRoaXMubWF0U2VsZWN0KSByZXR1cm47XG5cbiAgICAvL2lmICh0aGlzLmRlYnVnKSByZXR1cm47XG5cbiAgICAvLyBIaWRlIHRoZSBwYW5lbCAod2lsbCBiZSBzaG93IHdoZW4gcmVhZHkpXG4gICAgdGhpcy5tYXRTZWxlY3QucGFuZWxDbGFzcyA9ICdjZGstdmlzdWFsbHktaGlkZGVuJztcblxuICAgIGxldCBzZWFyY2hCYXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5tYXRTZWxlY3Qub3BlbmVkQ2hhbmdlLnN1YnNjcmliZShhc3luYyAob3BlbikgPT4ge1xuICAgICAgICBpZiAob3Blbikge1xuICAgICAgICAgIGNvbnN0IHBhbmVsRWxlbWVudCA9IHRoaXMubWF0U2VsZWN0LnBhbmVsLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgY29uc3Qgb3ZlcmxheVBhbmUgPSBmaW5kUGFyZW50V2l0aENsYXNzKHBhbmVsRWxlbWVudCwgJ2Nkay1vdmVybGF5LXBhbmUnKTtcblxuICAgICAgICAgIC8vIEZpeCBwYW5lbCBwb3NpdGlvbiwgd2hlbiBvdmVybGF5IGhhcyBhbiB0cmFuc2Zvcm1YIChhZGRlZCB3aGVuIGtleWJvYXJkIGlzIHNob3duKVxuICAgICAgICAgIHRoaXMuX2ZpeE1hdFNlbGVjdFBhbmVsUG9zaXRpb24ob3ZlcmxheVBhbmUpO1xuXG4gICAgICAgICAgLy8gRml4IG92ZXJsYXksIGZvciBzZWFyY2hiYXJcbiAgICAgICAgICBpZiAodGhpcy5zaG93U2VhcmNoQmFyKSB7XG4gICAgICAgICAgICBjb25zdCBzZWFyY2hCYXJTdWJzY3JpcHRpb24gPSBhd2FpdCB0aGlzLl9maXhTZWFyY2hiYXJPdmVybGF5KHBhbmVsRWxlbWVudCwgb3ZlcmxheVBhbmUpO1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChzZWFyY2hCYXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNob3cgdGhlIHBhbmVsXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhwYW5lbEVsZW1lbnQsICdjZGstdmlzdWFsbHktaGlkZGVuJyk7XG4gICAgICAgICAgdGhpcy5tYXRTZWxlY3QucGFuZWxDbGFzcyA9IHRoaXMucGFuZWxDbGFzcztcbiAgICAgICAgfVxuICAgICAgICAvLyBPTiBjbG9zZVxuICAgICAgICBlbHNlIGlmIChzZWFyY2hCYXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICBzZWFyY2hCYXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uLnJlbW92ZShzZWFyY2hCYXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgIHNlYXJjaEJhclN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpeE1hdFNlbGVjdFBhbmVsUG9zaXRpb24ob3ZlcmxheVBhbmU6IEhUTUxFbGVtZW50KSB7XG4gICAgaWYgKCFvdmVybGF5UGFuZSkgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIHRoZSB1bndhbnRlZCBkZWZhdWx0IHRyYW5zbGF0ZVhcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKFxuICAgICAgb3ZlcmxheVBhbmUsXG4gICAgICAndHJhbnNmb3JtJyxcbiAgICAgIG92ZXJsYXlQYW5lLnN0eWxlLnRyYW5zZm9ybVxuICAgICAgICAuc3BsaXQoJyAnKVxuICAgICAgICAuZmlsdGVyKChwcm9wKSA9PiAhcHJvcC5tYXRjaCgvXnRyYW5zbGF0ZVgvKSlcbiAgICAgICAgLmpvaW4oJyAnKVxuICAgICk7XG5cbiAgICAvLyBGaXggcGFuZWwncyBsZWZ0LCB0byBhdm9pZCBvdmVyZmxvdyBvbiB0aGUgcmlnaHRcbiAgICBjb25zdCBsZWZ0ID0gb3ZlcmxheVBhbmUuc3R5bGUubGVmdDtcbiAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGxlZnQpICYmICFsZWZ0LmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gRml4aW5nIHNlbGVjdCBwYW5lbCBsZWZ0LCB0byBhdm9pZCBvdmVyZmxvdyBvbiB0aGUgcmlnaHRgKTtcbiAgICAgIGNvbnN0IHdpZHRoID0gYCR7b3ZlcmxheVBhbmUuY2xpZW50V2lkdGh9cHhgO1xuICAgICAgY29uc3QgZml4TGVmdCA9IGBjYWxjKC0ke3dpZHRofSArIG1pbigke2xlZnR9ICsgJHt3aWR0aH0sIC0zMnB4ICsgMTAwdncpKWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnbGVmdCcsIGZpeExlZnQsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcbiAgICB9XG5cbiAgICAvLyBGaXggcGFuZWwncyB0b3AsIHRvIGF2b2lkIG92ZXJmbG93IG9uIHRoZSBib3R0b21cbiAgICBjb25zdCB0b3AgPSBvdmVybGF5UGFuZS5zdHlsZS50b3A7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayh0b3ApICYmICF0b3AuaW5jbHVkZXMoJ2NhbGMoJykpIHtcbiAgICAgIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBGaXhpbmcgc2VsZWN0IHBhbmVsIHRvcCwgdG8gYXZvaWQgb3ZlcmZsb3cgb24gdGhlIGJvdHRvbWApO1xuICAgICAgY29uc3QgaGVpZ2h0ID0gYCR7b3ZlcmxheVBhbmUuY2xpZW50SGVpZ2h0IHx8IDI3NX1weGA7XG4gICAgICBjb25zdCBmaXhUb3AgPSBgY2FsYygtJHtoZWlnaHR9ICsgbWluKCR7dG9wfSArICR7aGVpZ2h0fSwgLTMycHggKyAxMDB2aCkpYDtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3ZlcmxheVBhbmUsICd0b3AnLCBmaXhUb3AsIFJlbmRlcmVyU3R5bGVGbGFnczIuSW1wb3J0YW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFjayA6IGlmIHdlIGFyZSBpbiBhIElvbk1vZGFsLCBpdCdzIG5lY2Vzc2FyeSB0byBtb3ZlIHRoZSBDZGtPdmVybGF5IGNvbnRhaW5lclxuICAgKiAgICAgaW4gdGhlIElvbk1vZGFsIHRvIG1pZ2h0IGtlZXAgZm9jdXMgaW4gSW9uU2VhcmNoYmFyLlxuICAgKlxuICAgKiBAcGFyYW0gcGFuZWxFbGVtZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9maXhTZWFyY2hiYXJPdmVybGF5KHBhbmVsRWxlbWVudDogSFRNTEVsZW1lbnQsIG92ZXJsYXlQYW5lOiBIVE1MRWxlbWVudCk6IFByb21pc2U8U3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKCF0aGlzLm1hdFNlbGVjdCB8fCAhdGhpcy5pb25TZWFyY2hiYXIpIHJldHVybjtcblxuICAgIGNvbnN0IG1vZGFsRWxlbWVudCA9IGF3YWl0IHRoaXMubW9kYWxDb250cm9sbGVyLmdldFRvcCgpO1xuICAgIGlmICghbW9kYWxFbGVtZW50KSByZXR1cm47IC8vIE5vIG1vZGFsOiBza2lwXG5cbiAgICAvLyBHZXQgdGhlIENESyBvdmVybGF5IGNvbnRhaW5lclxuICAgIGNvbnN0IG92ZXJsYXlDb250YWluZXIgPSBmaW5kUGFyZW50V2l0aENsYXNzKHBhbmVsRWxlbWVudCwgJ2Nkay1vdmVybGF5LWNvbnRhaW5lcicpO1xuICAgIGlmICghb3ZlcmxheUNvbnRhaW5lcikgcmV0dXJuO1xuXG4gICAgLy8gREVCVUdcbiAgICBjb25zb2xlLmRlYnVnKGAke3RoaXMubG9nUHJlZml4fSBtb3ZpbmcgdGhlIFwiY2RrLW92ZXJsYXlcIiBjb250YWluZXIgZnJvbSB0aGUgXCJib2R5XCIgdG8gdGhlIFwiaW9uLW1vZGFsXCIgY29udGFpbmVyYCk7XG5cbiAgICBjb25zdCBvcmlnaW5hbFBhcmVudCA9IG92ZXJsYXlDb250YWluZXIucGFyZW50RWxlbWVudDtcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKG1vZGFsRWxlbWVudCwgb3ZlcmxheUNvbnRhaW5lcik7XG5cbiAgICBjb25zdCBzaGlmdExlZnQgPSAodGhpcy5fZG9jdW1lbnQuZGVmYXVsdFZpZXcuaW5uZXJXaWR0aCAtIG1vZGFsRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgLyAyO1xuICAgIGNvbnN0IHNoaWZ0VG9wID0gKHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3LmlubmVySGVpZ2h0IC0gbW9kYWxFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCkgLyAyO1xuXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5UGFuZSwgJ21hcmdpbi10b3AnLCBgLSR7c2hpZnRUb3B9cHhgKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAnbWFyZ2luLWxlZnQnLCBgLSR7c2hpZnRMZWZ0fXB4YCk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHJldmVyc2UgZnVuY3Rpb24sIHRvIHJlcGxhY2UgdGhlIGNvbnRhaW5lciBpbiBib2R5XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xuICAgICAgLy8gREVCVUdcbiAgICAgIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IG1vdmluZyB0aGUgXCJjZGstb3ZlcmxheVwiIGNvbnRhaW5lciBmcm9tIHRoZSBcImlvbi1tb2RhbFwiIHRvIHRoZSBcImJvZHlcIiBjb250YWluZXJgKTtcblxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChvcmlnaW5hbFBhcmVudCAvKnRoaXMuZG9jdW1lbnQuYm9keSovLCBvdmVybGF5Q29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgPCEtLSByZWFkb25seSAtLT5cbiAgICAgIEBpZiAoX3JlYWRvbmx5KSB7XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgICAgW3RpdGxlXT1cIl9kaXNwbGF5VmFsdWVcIlxuICAgICAgICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBtYXRQcmVmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0UHJlZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBwbGFjZWhvbGRlciB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgIH1cbiAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgaGlkZGVuIHR5cGU9XCJ0ZXh0XCIgcmVhZG9ubHk9XCJ0cnVlXCIgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCIgLz5cbiAgICAgICAgICA8aW9uLXRleHQ+e3sgdmFsdWUgfCB0b1N0cmluZzogZGlzcGxheVdpdGggfX08L2lvbi10ZXh0PlxuICAgICAgICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBoaW50cyAtLT5cbiAgICAgICAgICBAaWYgKCFmb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICBbc3Vic2NyaXB0U2l6aW5nXT1cInN1YnNjcmlwdFNpemluZ1wiXG4gICAgICAgICAgW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICBbdGl0bGVdPVwiX2Rpc3BsYXlWYWx1ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS0gTW9iaWxlIG9yIE11bHRpcGxlICh1c2UgPG1hdC1zZWxlY3Q+KSAtLT5cbiAgICAgICAgICBAaWYgKG1vYmlsZSB8fCBtdWx0aXBsZSkge1xuICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgI21hdFNlbGVjdFxuICAgICAgICAgICAgICBoaWRlU2luZ2xlU2VsZWN0aW9uSW5kaWNhdG9yXG4gICAgICAgICAgICAgIGRpc2FibGVPcHRpb25DZW50ZXJpbmdcbiAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwiZGlzYWJsZVJpcHBsZVwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFt0YWJpbmRleF09XCJfdGFiaW5kZXhcIlxuICAgICAgICAgICAgICBbcGFuZWxDbGFzc109XCJwYW5lbENsYXNzXCJcbiAgICAgICAgICAgICAgW3BhbmVsV2lkdGhdPVwicGFuZWxXaWR0aFwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmaWx0ZXJNYXRTZWxlY3RGb2N1c0V2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAoYmx1cik9XCJmaWx0ZXJNYXRTZWxlY3RCbHVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJrZXlkb3duRXNjYXBlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJrZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJlcXVhbHNcIlxuICAgICAgICAgICAgICBbc29ydENvbXBhcmF0b3JdPVwic29ydENvbXBhcmF0b3JcIlxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICBbdHlwZWFoZWFkRGVib3VuY2VJbnRlcnZhbF09XCJkZWJvdW5jZVRpbWUgKiAxMFwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXI+e3sgdmFsdWUgfCB0b1N0cmluZzogZGlzcGxheVdpdGggfX08L21hdC1zZWxlY3QtdHJpZ2dlcj5cbiAgICAgICAgICAgICAgPCEtLSBTZWFyY2ggYmFyIC0tPlxuICAgICAgICAgICAgICBAaWYgKHNob3dTZWFyY2hCYXIpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGdyb3VwIGNsYXNzPVwibWF0LXNlbGVjdC1zZWFyY2hiYXJcIiBbY2xhc3MubWF0LXNlbGVjdC1zZWFyY2hiYXItc3RpY2t5XT1cInN0aWNreVNlYXJjaEJhclwiPlxuICAgICAgICAgICAgICAgICAgPGlvbi1zZWFyY2hiYXJcbiAgICAgICAgICAgICAgICAgICAgI2lvblNlYXJjaGJhclxuICAgICAgICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgICAgICBhbmltYXRlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBzaG93Q2xlYXJCdXR0b249XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2RlYm91bmNlXT1cImRlYm91bmNlVGltZVwiXG4gICAgICAgICAgICAgICAgICAgIChpb25DbGVhcik9XCJtYXJrQXNMb2FkaW5nKClcIlxuICAgICAgICAgICAgICAgICAgICAoaW9uSW5wdXQpPVwiaW9uU2VhcmNoQmFyQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidDT01NT04uQlROX1NFQVJDSCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgPjwvaW9uLXNlYXJjaGJhcj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRncm91cD5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8IS0tIEhlYWRlcnMgLS0+XG4gICAgICAgICAgICAgIDxpb24tcm93XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtc2VsZWN0LWhlYWRlciBjb2x1bW4gaW9uLW5vLXBhZGRpbmdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5tdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1hdC1zZWxlY3Qtc2VhcmNoYmFyLXN0aWNreV09XCJzaG93U2VhcmNoQmFyICYmIHN0aWNreVNlYXJjaEJhclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAZm9yIChhdHRyIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBhdHRyOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVdPVwiZGlzcGxheUNvbHVtblNpemVzW2ldXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgW2lubmVySFRNTF09XCJkaXNwbGF5Q29sdW1uTmFtZXNbaV0gfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPCEtLSBOb25lIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgQGlmICghcmVxdWlyZWQgJiYgIW11bHRpcGxlICYmICFjbGVhcmFibGUpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPjxpIHRyYW5zbGF0ZT5DT01NT04uRU1QVFlfT1BUSU9OPC9pPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoXyRmaWx0ZXJlZEl0ZW1zIHwgYXN5bmM7IGFzIGl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBObyBpdGVtIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zIHwgaXNFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgbm9SZXN1bHRNZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXJvdyBbY2xhc3NMaXN0XT1cIml0ZW0uY2xhc3NMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAocGF0aCBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgcGF0aDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY29sIFtzaXplXT1cImRpc3BsYXlDb2x1bW5TaXplc1tpXVwiIGNsYXNzPVwiaW9uLWFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJvcGVydHlHZXQ6IHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaWdobGlnaHQ6IHsgc2VhcmNoOiBpb25TZWFyY2hiYXI/LnZhbHVlLCB3aXRoQWNjZW50OiBoaWdobGlnaHRBY2NlbnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE1vcmUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKF9tb3JlSXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdE1hdFNlbGVjdEluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoKF9kaXNwbGF5VmFsdWUgfCBzdHJMZW5ndGgpID49IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmcgdGV4dC1pdGFsaWNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIHt7ICdJTkZPLlBMRUFTRV9UWVBFX01PUkVfQ0hBUkFDVEVSUycgfCB0cmFuc2xhdGU6IHsgbWluTGVuZ3RoOiBzdWdnZXN0TGVuZ3RoVGhyZXNob2xkIH0gfX1cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8IS0tIGZvb3RlciAtLT5cbiAgICAgICAgICAgICAgQGlmIChpdGVtQ291bnQ7IGFzIGNvdW50KSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtYXQtb3B0aW9uLWZvb3RlciBtYXQtYXV0b2NvbXBsZXRlLWZvb3RlciBpb24tbm8tcGFkZGluZ1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGk+e3sgJ0NPTU1PTi5SRVNVTFRfQ09VTlQnIHwgdHJhbnNsYXRlOiB7IGNvdW50OiBjb3VudCB9IH19PC9pPlxuICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAjbWF0SW5wdXRUZXh0XG4gICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlUG9zaXRpb25dPVwibWF0QXV0b2NvbXBsZXRlUG9zaXRpb25cIlxuICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZmxvYXRMYWJlbCA9PT0gJ25ldmVyJyAmJiBwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgIFthcHBBdXRvZm9jdXNdPVwiYXV0b2ZvY3VzXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIl90YWJpbmRleFwiXG4gICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJjbGlja2VkLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCJmaWx0ZXJJbnB1dFRleHRGb2N1c0V2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgICAoYmx1cik9XCJmaWx0ZXJJbnB1dFRleHRCbHVyRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJrZXlkb3duRXNjYXBlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJrZXl1cEVudGVyLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChrZXl1cC5hcnJvd0Rvd24pPVwiIWF1dG9jb21wbGV0ZS5zaG93UGFuZWwgJiYgZHJvcEJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPCEtLSBhdXRvY29tcGxldGUgLS0+XG4gICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAjYXV0b2NvbXBsZXRlPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgYXV0b0FjdGl2ZUZpcnN0T3B0aW9uXG4gICAgICAgICAgICAgIGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JcbiAgICAgICAgICAgICAgW2Rpc3BsYXlXaXRoXT1cImRpc3BsYXlXaXRoXCJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICAgICAgICBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVSaXBwbGVdPVwiZGlzYWJsZVJpcHBsZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwhLS0gSGVhZGVycyAtLT5cbiAgICAgICAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJtYXQtYXV0b2NvbXBsZXRlLWhlYWRlciBjb2x1bW4gaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChhdHRyIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBhdHRyOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVdPVwiZGlzcGxheUNvbHVtblNpemVzW2ldXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgW2lubmVySFRNTF09XCJkaXNwbGF5Q29sdW1uTmFtZXNbaV0gfCB0cmFuc2xhdGVcIj48L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIC0tPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpyeElmPVwiXyRmaWx0ZXJlZEl0ZW1zOyBsZXQgaXRlbXM7IGVsc2U6IGxvYWRpbmdUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gTm8gaXRlbSBvcHRpb24gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtcyB8IGlzRW1wdHlBcnJheSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpPnt7IG5vUmVzdWx0TWVzc2FnZSB8IHRyYW5zbGF0ZSB9fTwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJpdGVtXCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXJvdyBbY2xhc3NMaXN0XT1cIml0ZW0uY2xhc3NMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAocGF0aCBvZiBkaXNwbGF5QXR0cmlidXRlczsgdHJhY2sgcGF0aDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tY29sIFtzaXplXT1cImRpc3BsYXlDb2x1bW5TaXplc1tpXVwiIFt0aXRsZV09XCJ0ZXh0LmlubmVyVGV4dFwiIGNsYXNzPVwiaW9uLWFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHByb3BlcnR5R2V0OiBwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaWdobGlnaHQ6IHsgc2VhcmNoOiBmb3JtQ29udHJvbC52YWx1ZSwgd2l0aEFjY2VudDogaGlnaGxpZ2h0QWNjZW50IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPCEtLSBNb3JlIGl0ZW0gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChfbW9yZUl0ZW1zQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIChuZ0luaXQpPVwiX2luaXRBdXRvY29tcGxldGVJbmZpbml0ZVNjcm9sbCgpXCIgY2xhc3M9XCJpb24tcGFkZGluZ1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDwhLS0gZm9vdGVyIC0tPlxuICAgICAgICAgICAgICBAaWYgKGl0ZW1Db3VudDsgYXMgY291bnQpIHtcbiAgICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtZm9vdGVyIGlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLWZsb2F0LWVuZCBpb24tcGFkZGluZy1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aT57eyAnQ09NTU9OLlJFU1VMVF9DT1VOVCcgfCB0cmFuc2xhdGU6IHsgY291bnQ6IGNvdW50IH0gfX08L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG4gICAgICAgICAgfVxuICAgICAgICAgIDwhLS1cbiAgICAgICAgICBOT1RFIDpcbiAgICAgICAgICAtIFwic2VsZWN0SW5wdXRDb250ZW50KCRldmVudCkgfHwgb25Gb2N1cy5lbWl0KCRldmVudClcIiA6IGNhbGwgb25Gb2N1cyBvbmx5IHdoZW4gdG8gdGhlIGlucHV0IGlzIGVtcHR5IChub3RoaW5nIHRvIHNlbGVjdClcbiAgICAgICAgICAtLT5cbiAgICAgICAgICA8ZGl2IG1hdFN1ZmZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRTdWZmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX1JFUVVJUkVEPC9tYXQtZXJyb3I+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ2VudGl0eScpKSB7XG4gICAgICAgICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9JTlZBTElEPC9tYXQtZXJyb3I+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRFcnJvclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPCEtLSBIaW50cyAtLT5cbiAgICAgICAgICBAaWYgKCFmb3JtQ29udHJvbC5pbnZhbGlkKSB7XG4gICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRIaW50VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgfVxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgfVxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaW9uLWFsaWduLXNlbGYtY2VudGVyXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0QWZ0ZXJdXCI+PC9uZy1jb250ZW50PlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cblxuPG5nLXRlbXBsYXRlICNtYXRQcmVmaXhUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdFN1ZmZpeFRlbXBsYXRlPlxuICBAaWYgKCFtb2JpbGUgJiYgIW11bHRpcGxlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiZHJvcEJ1dHRvbkNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICBbaGlkZGVuXT1cImRpc2FibGVkXCJcbiAgICAgIFt0aXRsZV09XCJkcm9wQnV0dG9uVGl0bGUgfHwgJycgfCB0cmFuc2xhdGVcIlxuICAgID5cbiAgICAgIDxtYXQtaWNvbj5rZXlib2FyZF9hcnJvd19kb3duPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgfVxuICBAaWYgKGNsZWFyYWJsZSkge1xuICAgIDxidXR0b25cbiAgICAgIG1hdFN1ZmZpeFxuICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgKGNsaWNrKT1cImNsZWFyVmFsdWUoJGV2ZW50KVwiXG4gICAgICBbaGlkZGVuXT1cImRpc2FibGVkIHx8ICFmb3JtQ29udHJvbC52YWx1ZVwiXG4gICAgICBbdGl0bGVdPVwiY2xlYXJCdXR0b25UaXRsZSB8fCAnJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2J1dHRvbj5cbiAgfVxuXG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRTdWZmaXhdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBMb2FkaW5nIC0tPlxuPG5nLXRlbXBsYXRlICNsb2FkaW5nVGVtcGxhdGU+XG4gIEBpZiAoKF9kaXNwbGF5VmFsdWUgfCBzdHJMZW5ndGgpID49IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpIHtcbiAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICA8aW9uLXNrZWxldG9uLXRleHQgW2FuaW1hdGVkXT1cInRydWVcIiBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9pb24tc2tlbGV0b24tdGV4dD5cbiAgICA8L21hdC1vcHRpb24+XG4gIH0gQGVsc2Uge1xuICAgIDwhLS0gTmVlZCBtb3JlIGNoYXJhY3RlcnMgLS0+XG4gICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAge3sgJ0lORk8uUExFQVNFX1RZUEVfTU9SRV9DSEFSQUNURVJTJyB8IHRyYW5zbGF0ZTogeyBtaW5MZW5ndGg6IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfSB9fVxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9tYXQtb3B0aW9uPlxuICB9XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEVycm9yVGVtcGxhdGU+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvcixbbWF0RXJyb3JdXCI+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNtYXRIaW50VGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC13cmFwcGVyXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnQ6bm90KFthbGlnbj0nZW5kJ10pLFttYXRIaW50XVwiPjwvbmctY29udGVudD5cbiAgICA8ZGl2IGNsYXNzPVwibWF0LW1kYy1mb3JtLWZpZWxkLWhpbnQtc3BhY2VyXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWhpbnRbYWxpZ249J2VuZCddXCI+PC9uZy1jb250ZW50PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
1007
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYXV0b2NvbXBsZXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsZUFBZSxFQUdmLFFBQVEsRUFDUixNQUFNLEVBRU4sbUJBQW1CLEVBQ25CLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTRDLGlCQUFpQixFQUFzQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEcsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVqSSxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUNuQixhQUFhLEVBQ2IsS0FBSyxFQUNMLFlBQVksRUFDWixRQUFRLEVBQ1IsZUFBZSxFQUNmLGVBQWUsRUFDZixjQUFjLEVBQ2QsU0FBUyxFQUNULFFBQVEsR0FDVCxNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxVQUFVLEVBQWdC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QUVOLGNBQWM7c0JBRGIsS0FBSztnQkFJVyxPQUFPO3NCQUF2QixNQUFNO3VCQUFDLE9BQU87Z0JBRUMsT0FBTztzQkFBdEIsTUFBTTt1QkFBQyxNQUFNO2dCQUVHLE9BQU87c0JBQXZCLE1BQU07dUJBQUMsT0FBTztnQkFDTCxlQUFlO3NCQUF4QixNQUFNO2dCQUNtQixhQUFhO3NCQUF0QyxNQUFNO3VCQUFDLGdCQUFnQjtnQkFDRCxVQUFVO3NCQUFoQyxNQUFNO3VCQUFDLGFBQWE7Z0JBRUcsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXO2dCQUNLLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDRSxZQUFZO3NCQUF0QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ0csWUFBWTtzQkFBdkMsU0FBUzt1QkFBQyxlQUFlO2dCQUNTLG1CQUFtQjtzQkFBckQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBa0JwQixNQUFNO3NCQUFsQixLQUFLO2dCQVlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBU08sUUFBUTtzQkFBcEIsS0FBSztnQkFTTyxLQUFLO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgaW5qZWN0LFxuICBJbmplY3QsXG4gIElucHV0LFxuICBudW1iZXJBdHRyaWJ1dGUsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyU3R5bGVGbGFnczIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld1JlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUiwgVW50eXBlZEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBpc09ic2VydmFibGUsIG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEZldGNoTW9yZUZuLCBMb2FkUmVzdWx0LCBTdWdnZXN0Rm4gfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktc2VydmljZS5jbGFzcyc7XG5pbXBvcnQge1xuICBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlLFxuICBmaW5kUGFyZW50V2l0aENsYXNzLFxuICBpc0JsYW5rU3RyaW5nLFxuICBpc05pbCxcbiAgaXNOaWxPckJsYW5rLFxuICBpc05vdE5pbCxcbiAgaXNOb3ROaWxCb29sZWFuLFxuICBpc05vdE5pbE9yQmxhbmssXG4gIGlzTm90TmlsU3RyaW5nLFxuICB0b0Jvb2xlYW4sXG4gIHRvTnVtYmVyLFxufSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgZm9jdXNJbnB1dCwgSW5wdXRFbGVtZW50LCBzZWxlY3RJbnB1dFJhbmdlIH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IGZpcnN0Tm90TmlsUHJvbWlzZSB9IGZyb20gJy4uLy4uL29ic2VydmFibGVzJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlLCBEaXNwbGF5Rm4sIEVxdWFsc0ZuIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlLCBTdWJzY3JpcHRTaXppbmcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdE9wdGlvbiwgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBmcm9tU2Nyb2xsRW5kRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMnO1xuaW1wb3J0IHsgSW9uU2VhcmNoYmFyLCBNb2RhbENvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBpc01vYmlsZSB9IGZyb20gJy4uLy4uL3BsYXRmb3Jtcyc7XG5pbXBvcnQgeyBzdWdnZXN0RnJvbUFycmF5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgU2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWwgfSBmcm9tICdAaW9uaWMvY29yZS9kaXN0L3R5cGVzL2NvbXBvbmVudHMvc2VhcmNoYmFyL3NlYXJjaGJhci1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscyB9IGZyb20gJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnV0aWxzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUZpZWxkQ29uZmlnIH0gZnJvbSAnLi9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHNldFRpbWVvdXQgfSBmcm9tICdAcngtYW5ndWxhci9jZGsvem9uZS1sZXNzL2Jyb3dzZXInO1xuXG5jb25zdCBub29wID0gKF8/OiBhbnkpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdtYXQtYXV0b2NvbXBsZXRlLWZpZWxkJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuYXV0b2NvbXBsZXRlLnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5odG1sJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdEF1dG9jb21wbGV0ZUZpZWxkKSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0QXV0b2NvbXBsZXRlRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSW5wdXRFbGVtZW50LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgcHJpdmF0ZSBfb25GZXRjaE1vcmVDYWxsYmFjazogRmV0Y2hNb3JlRm48TG9hZFJlc3VsdDxhbnk+PjtcbiAgcHJpdmF0ZSBfaW1wbGljaXRWYWx1ZTogYW55O1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX2l0ZW1zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX29wZW5lZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF8kZmlsdGVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgX2l0ZW1Db3VudDogbnVtYmVyO1xuICBwcml2YXRlIF9yZWxvYWQkID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBwcml2YXRlIF9kb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgcHJvdGVjdGVkIF9yZWFkb25seSA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBfJGlucHV0SXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPih1bmRlZmluZWQpO1xuICBwcm90ZWN0ZWQgXyRmaWx0ZXJlZEl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXT4odW5kZWZpbmVkKTtcbiAgcHJvdGVjdGVkIF9kaXNwbGF5VmFsdWUgPSAnJztcbiAgcHJvdGVjdGVkIF9tb3JlSXRlbXNDb3VudDogbnVtYmVyO1xuICBwcm90ZWN0ZWQgX2ZldGNoTW9yZSQgPSBuZXcgRXZlbnRFbWl0dGVyPEV2ZW50PigpO1xuXG4gIEBJbnB1dCgpIGVxdWFsczogRXF1YWxzRm47XG4gIEBJbnB1dCgpIGxvZ1ByZWZpeCA9ICdbbWF0LWF1dG9jb21wbGV0ZV0gJztcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcgPSBudWxsO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KCkgc3Vic2NyaXB0U2l6aW5nOiBTdWJzY3JpcHRTaXppbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RGbjogU3VnZ2VzdEZuPGFueSwgYW55PjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtb2JpbGU6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjbGVhcmFibGUgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgZGVib3VuY2VUaW1lOiBudW1iZXIgPSBudWxsO1xuICBASW5wdXQoKSBkaXNwbGF5V2l0aDogRGlzcGxheUZuIHwgbnVsbDtcbiAgQElucHV0KCkgZGlzcGxheUF0dHJpYnV0ZXM6IHN0cmluZ1tdO1xuICBASW5wdXQoKSBkaXNwbGF5Q29sdW1uU2l6ZXM6IChudW1iZXIgfCAnYXV0bycgfCB1bmRlZmluZWQpW107XG4gIEBJbnB1dCgpIGRpc3BsYXlDb2x1bW5OYW1lczogc3RyaW5nW107XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoaWdobGlnaHRBY2NlbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93QWxsT25Gb2N1czogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dQYW5lbE9uRm9jdXM6IGJvb2xlYW47XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBhdXRvZm9jdXMgPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlnOiBNYXRBdXRvY29tcGxldGVGaWVsZENvbmZpZztcbiAgQElucHV0KCkgaTE4blByZWZpeCA9ICdSRUZFUkVOVElBTC4nO1xuICBASW5wdXQoKSBub1Jlc3VsdE1lc3NhZ2UgPSAnQ09NTU9OLk5PX1JFU1VMVCc7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCh7IGFsaWFzOiAnY2xhc3MnIH0pIHBhbmVsQ2xhc3M6IHN0cmluZztcbiAgQElucHV0KCkgcGFuZWxXaWR0aDogc3RyaW5nO1xuICBASW5wdXQoKSBtYXRBdXRvY29tcGxldGVQb3NpdGlvbjogJ2F1dG8nIHwgJ2Fib3ZlJyB8ICdiZWxvdyc7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBtdWx0aXBsZTogYm9vbGVhbjtcbiAgQElucHV0KCkgZmV0Y2hNb3JlVGhyZXNob2xkID0gJzE1JSc7XG4gIEBJbnB1dCgpIHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQ6IG51bWJlciA9IG51bGw7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93TG9hZGluZ1NwaW5uZXIgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGVidWcgPSBmYWxzZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dTZWFyY2hCYXIgPSB0cnVlO1xuICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3RpY2t5U2VhcmNoQmFyID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBkaXNhYmxlUmlwcGxlID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFwcGx5SW1wbGljaXRWYWx1ZTogYm9vbGVhbiB8ICgoKSA9PiBib29sZWFuKSA9IGZhbHNlO1xuICBASW5wdXQoKSBkcm9wQnV0dG9uVGl0bGU6IHN0cmluZztcbiAgQElucHV0KCkgY2xlYXJCdXR0b25UaXRsZTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBzb3J0Q29tcGFyYXRvcjogKGE6IE1hdE9wdGlvbiwgYjogTWF0T3B0aW9uLCBvcHRpb25zOiBNYXRPcHRpb25bXSkgPT4gbnVtYmVyO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdjbGljaycpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW5hdGl2ZVxuICBAT3V0cHV0KCdibHVyJykgYmx1cnJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtbmF0aXZlXG4gIEBPdXRwdXQoJ2ZvY3VzJykgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRyb3BCdXR0b25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KHRydWUpO1xuICBAT3V0cHV0KCdrZXlkb3duLmVzY2FwZScpIGtleWRvd25Fc2NhcGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgna2V5dXAuZW50ZXInKSBrZXl1cEVudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbWF0U2VsZWN0JykgbWF0U2VsZWN0OiBNYXRTZWxlY3Q7XG4gIEBWaWV3Q2hpbGQoJ2lvblNlYXJjaGJhcicpIGlvblNlYXJjaGJhcjogSW9uU2VhcmNoYmFyO1xuICBAVmlld0NoaWxkKCdtYXRJbnB1dFRleHQnKSBtYXRJbnB1dFRleHQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoTWF0QXV0b2NvbXBsZXRlKSBhdXRvY29tcGxldGU6IE1hdEF1dG9jb21wbGV0ZTtcbiAgQFZpZXdDaGlsZChNYXRBdXRvY29tcGxldGVUcmlnZ2VyKSBhdXRvY29tcGxldGVUcmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJvdGVjdGVkIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyLFxuICAgIHByb3RlY3RlZCByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBJbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpIHByaXZhdGUgdmlld1JlZjogVmlld1JlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge31cblxuICBnZXQgaXRlbUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1Db3VudDtcbiAgfVxuXG4gIGdldCBjYW5GZXRjaE1vcmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgJiYgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPiAwO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLl8kZmlsdGVyLnZhbHVlKSB7XG4gICAgICAvLyBERUJVR1xuICAgICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgU2V0dGluZyBmaWx0ZXI6XCIsIHZhbHVlKTtcbiAgICAgIHRoaXMuXyRmaWx0ZXIubmV4dCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpbHRlcigpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl8kZmlsdGVyLnZhbHVlO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHJlYWRvbmx5KHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVhZG9ubHkgPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHJlYWRvbmx5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkb25seTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGl0ZW1zKHZhbHVlOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdKSB7XG4gICAgLy8gUmVtb3ZlIHByZXZpb3VzIHN1YnNjcmlwdGlvbiBvbiBpdGVtcywgKGlmIGV4aXRzKVxuICAgIGlmICh0aGlzLl9pdGVtc1N1YnNjcmlwdGlvbikge1xuICAgICAgY29uc29sZS53YXJuKHRoaXMubG9nUHJlZml4ICsgJyBJdGVtcyByZWNlaXZlZCB0d2ljZSAhJyk7XG4gICAgICB0aGlzLl9zdWJzY3JpcHRpb24ucmVtb3ZlKHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uID0gdmFsdWUuc3Vic2NyaWJlKCh2KSA9PiB0aGlzLl8kaW5wdXRJdGVtcy5uZXh0KHYpKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLm5leHQodmFsdWUgYXMgYW55W10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBpdGVtcygpOiBPYnNlcnZhYmxlPGFueVtdPiB8IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fJGlucHV0SXRlbXM7XG4gIH1cblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZG9ubHkgfHwgdGhpcy5mb3JtQ29udHJvbC5kaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5fcmVhZG9ubHkgJiYgdGhpcy5mb3JtQ29udHJvbC5lbmFibGVkO1xuICB9XG5cbiAgZ2V0IGxvYWRpbmcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzTmlsKHRoaXMuXyRmaWx0ZXJlZEl0ZW1zLnZhbHVlKTtcbiAgfVxuXG4gIGdldCBkZXNrdG9wKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5tb2JpbGUgJiYgIXRoaXMubXVsdGlwbGU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWF1dG9jb21wbGV0ZS1maWVsZD4uXCIpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbiBmcm9tIGNvbmZpZyBvYmplY3RcbiAgICBpZiAodGhpcy5jb25maWcpIHtcbiAgICAgIHRoaXMuc3VnZ2VzdEZuID0gdGhpcy5zdWdnZXN0Rm4gfHwgdGhpcy5jb25maWcuc3VnZ2VzdEZuO1xuICAgICAgaWYgKCF0aGlzLnN1Z2dlc3RGbiAmJiB0aGlzLmNvbmZpZy5pdGVtcykge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb25maWcuaXRlbXM7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlciA9IHRoaXMuZmlsdGVyIHx8IHRoaXMuY29uZmlnLmZpbHRlcjtcbiAgICAgIHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgPSB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzIHx8IHRoaXMuY29uZmlnLmF0dHJpYnV0ZXM7XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9IHRoaXMuZGlzcGxheUNvbHVtblNpemVzIHx8IHRoaXMuY29uZmlnLmNvbHVtblNpemVzO1xuICAgICAgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgPSB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyB8fCB0aGlzLmNvbmZpZy5jb2x1bW5OYW1lcztcbiAgICAgIHRoaXMuZGlzcGxheVdpdGggPSB0aGlzLmRpc3BsYXlXaXRoIHx8IHRoaXMuY29uZmlnLmRpc3BsYXlXaXRoO1xuICAgICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyB8fCB0aGlzLmNvbmZpZy5lcXVhbHM7XG4gICAgICB0aGlzLm11bHRpcGxlID0gdG9Cb29sZWFuKHRoaXMubXVsdGlwbGUsIHRoaXMuY29uZmlnLm11bHRpcGxlKTtcbiAgICAgIHRoaXMubW9iaWxlID0gdG9Cb29sZWFuKHRoaXMubW9iaWxlLCB0aGlzLmNvbmZpZy5tb2JpbGUpO1xuICAgICAgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkID0gdG9OdW1iZXIodGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkLCB0aGlzLmNvbmZpZy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkKTtcbiAgICAgIHRoaXMuc2hvd0FsbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93QWxsT25Gb2N1cywgdGhpcy5jb25maWcuc2hvd0FsbE9uRm9jdXMpO1xuICAgICAgdGhpcy5zaG93UGFuZWxPbkZvY3VzID0gdG9Cb29sZWFuKHRoaXMuc2hvd1BhbmVsT25Gb2N1cywgdGhpcy5jb25maWcuc2hvd1BhbmVsT25Gb2N1cyk7XG4gICAgICB0aGlzLnBhbmVsQ2xhc3MgPSB0aGlzLnBhbmVsQ2xhc3MgfHwgdGhpcy5jb25maWcuY2xhc3M7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZSA9IHRvTnVtYmVyKHRoaXMuZGVib3VuY2VUaW1lLCB0aGlzLmNvbmZpZy5kZWJvdW5jZVRpbWUpO1xuICAgICAgdGhpcy5oaWdobGlnaHRBY2NlbnQgPSB0b0Jvb2xlYW4odGhpcy5oaWdobGlnaHRBY2NlbnQsIHRvQm9vbGVhbih0aGlzLmNvbmZpZy5oaWdobGlnaHRBY2NlbnQpKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IHZhbHVlc1xuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZClcbiAgICAgID8gdGhpcy5yZXF1aXJlZFxuICAgICAgOiB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCB8fCBpc0JsYW5rU3RyaW5nKHRoaXMucmVxdWlyZWQpO1xuICAgIHRoaXMubXVsdGlwbGUgPSB0b0Jvb2xlYW4odGhpcy5tdWx0aXBsZSwgZmFsc2UpO1xuICAgIHRoaXMubW9iaWxlID0gaXNOb3ROaWwodGhpcy5tb2JpbGUpID8gdGhpcy5tb2JpbGUgOiB0aGlzLm11bHRpcGxlIHx8IGlzTW9iaWxlKHdpbmRvdyk7XG4gICAgdGhpcy5kaXNwbGF5QXR0cmlidXRlcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMgfHwgdGhpcy5maWx0ZXI/LmF0dHJpYnV0ZXMgfHwgWydsYWJlbCcsICduYW1lJ107XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IHRoaXMuZGlzcGxheVdpdGggfHwgTWF0QXV0b2NvbXBsZXRlRmllbGRVdGlscy5jcmVhdGVEaXNwbGF5Rm4odGhpcy5kaXNwbGF5QXR0cmlidXRlcywgdGhpcy5tdWx0aXBsZSk7XG4gICAgdGhpcy5lcXVhbHMgPSB0aGlzLmVxdWFscyB8fCBNYXRBdXRvY29tcGxldGVGaWVsZFV0aWxzLmRlZmF1bHRFcXVhbHM7XG5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyA9XG4gICAgICB0aGlzLmRpc3BsYXlDb2x1bW5TaXplcyB8fFxuICAgICAgLy8gaWYgb25seSBjb2x1bW46IGF1dG8gc2l6ZVxuICAgICAgKHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubGVuZ3RoID09PSAxICYmIFt1bmRlZmluZWRdKSB8fFxuICAgICAgLy8gQ29tcHV0ZWQgY29sdW1uIHNpemU6XG4gICAgICAvLyAtIGlmIGxhYmVsIHRoZW4gY29sIHNpemUgPSAyXG4gICAgICAvLyAtIGlmIHJhbmtPcmRlciB0aGVuIGNvbCBzaXplID0gMVxuICAgICAgLy8gLSBlc2UgPT4gYXV0byBzaXplXG4gICAgICB0aGlzLmRpc3BsYXlBdHRyaWJ1dGVzLm1hcCgoYXR0cikgPT4gYXR0ciAmJiAoYXR0ci5lbmRzV2l0aCgnbGFiZWwnKSA/IDMgOiBhdHRyLmVuZHNXaXRoKCdyYW5rT3JkZXInKSA/IDIgOiB1bmRlZmluZWQpKTtcbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5OYW1lcyA9IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMubWFwKFxuICAgICAgKGF0dHIsIGluZGV4KSA9PiAodGhpcy5kaXNwbGF5Q29sdW1uTmFtZXMgJiYgdGhpcy5kaXNwbGF5Q29sdW1uTmFtZXNbaW5kZXhdKSB8fCB0aGlzLmkxOG5QcmVmaXggKyBjaGFuZ2VDYXNlVG9VbmRlcnNjb3JlKGF0dHIpLnRvVXBwZXJDYXNlKClcbiAgICApO1xuICAgIGNvbnN0IHBhbmVsQ2xhc3MgPSB0aGlzLnBhbmVsQ2xhc3M/LnNwbGl0KCcgJyk7XG4gICAgdGhpcy5wYW5lbFdpZHRoID1cbiAgICAgIHRoaXMucGFuZWxXaWR0aCB8fFxuICAgICAgKHBhbmVsQ2xhc3MgJiZcbiAgICAgICAgKChwYW5lbENsYXNzLmluY2x1ZGVzKCdtaW4td2lkdGgtbWVkaXVtJykgJiYgJzMwMHB4JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzcy5pbmNsdWRlcygnbWluLXdpZHRoLWxhcmdlJykgJiYgJzQwMHB4JykgfHxcbiAgICAgICAgICAocGFuZWxDbGFzcy5pbmNsdWRlcygnbWluLXdpZHRoLXhsYXJnZScpICYmICc0NTBweCcpIHx8XG4gICAgICAgICAgKHBhbmVsQ2xhc3MuaW5jbHVkZXMoJ21pbi13aWR0aC04MHZ3JykgJiYgJzgwdncnKSB8fFxuICAgICAgICAgIChwYW5lbENsYXNzLmluY2x1ZGVzKCdtYXQtbWRjLWF1dG9jb21wbGV0ZS1wYW5lbC1mdWxsLXNpemUnKSAmJiAnMTAwdncnKSkpO1xuICAgIHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA9IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB8fCAwO1xuICAgIHRoaXMuc2hvd0FsbE9uRm9jdXMgPSB0b0Jvb2xlYW4odGhpcy5zaG93QWxsT25Gb2N1cywgdGhpcy5tb2JpbGUgJiYgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDApO1xuICAgIHRoaXMuc2hvd1BhbmVsT25Gb2N1cyA9IHRvQm9vbGVhbih0aGlzLnNob3dQYW5lbE9uRm9jdXMsIHRydWUpO1xuICAgIHRoaXMuZGVib3VuY2VUaW1lID0gdG9OdW1iZXIodGhpcy5kZWJvdW5jZVRpbWUsIHRoaXMubW9iaWxlID8gNjUwIDogMjUwKTtcbiAgICB0aGlzLmhpZ2hsaWdodEFjY2VudCA9IHRvQm9vbGVhbih0aGlzLmhpZ2hsaWdodEFjY2VudCwgZmFsc2UpO1xuICAgIHRoaXMubWF0QXV0b2NvbXBsZXRlUG9zaXRpb24gPSB0aGlzLm1hdEF1dG9jb21wbGV0ZVBvc2l0aW9uIHx8ICdhdXRvJztcblxuICAgIC8vIE5vIHN1Z2dlc3RGbjogZmlsdGVyIG9uIHRoZSBnaXZlbiBpdGVtc1xuICAgIGlmICghdGhpcy5zdWdnZXN0Rm4pIHtcbiAgICAgIGNvbnN0IHN1Z2dlc3RGcm9tQXJyYXlGbjogU3VnZ2VzdEZuPGFueSwgYW55PiA9IGFzeW5jICh2YWx1ZSwgZmlsdGVyKSA9PlxuICAgICAgICAvLyBERUJVR1xuICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbGxpbmcgc3VnZ2VzdEZyb21BcnJheSB3aXRoIHZhbHVlPScsIHZhbHVlKTtcblxuICAgICAgICBzdWdnZXN0RnJvbUFycmF5KHRoaXMuXyRpbnB1dEl0ZW1zLnZhbHVlLCB2YWx1ZSwge1xuICAgICAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IHRoaXMuZGlzcGxheUF0dHJpYnV0ZXMsXG4gICAgICAgICAgLi4uZmlsdGVyLFxuICAgICAgICB9KTtcbiAgICAgIC8vIFdhaXQgKG9uY2UpIHRoYXQgaXRlbXMgYXJlIGxvYWRlZCwgdGhlbiBjYWxsIHN1Z2dlc3QgZnJvbSBhcnJheSBmblxuICAgICAgdGhpcy5zdWdnZXN0Rm4gPSBhc3luYyAodmFsdWUsIGZpbHRlcikgPT4ge1xuICAgICAgICBpZiAoaXNOaWwodGhpcy5fJGlucHV0SXRlbXMudmFsdWUpKSB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBXYWl0aW5nIGl0ZW1zIHRvIGJlIHNldC4uLlwiKTtcblxuICAgICAgICAgIGF3YWl0IGZpcnN0Tm90TmlsUHJvbWlzZSh0aGlzLl8kaW5wdXRJdGVtcyk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIGl0ZW1zOlwiLCB0aGlzLmlucHV0SXRlbXMkLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Z2dlc3RGbiA9IHN1Z2dlc3RGcm9tQXJyYXlGbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdEZuKHZhbHVlLCBmaWx0ZXIpOyAvLyBMb29wXG4gICAgICB9O1xuICAgIH1cbiAgICAvLyBTdWdnZXN0ICsgbW9iaWxlXG4gICAgLy8gPT4gTWFudWFsbHkgZmlsbCBpbnB1dCBpdGVtcywgZnJvbSB0aGUgZ2l2ZW4gc3VnZ2VzdCBmdW5jdGlvblxuICAgIGVsc2UgaWYgKHRoaXMubW9iaWxlIHx8IHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8qdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5fJGZpbHRlci5waXBlKFxuICAgICAgICAgIHN0YXJ0V2l0aDxhbnksIGFueT4odGhpcy5maWx0ZXIpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgIGZpbHRlcihfID0+IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCA8PSAwKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KCcqJywgZmlsdGVyKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKGl0ZW1zID0+IHRoaXMuJGlucHV0SXRlbXMubmV4dChpdGVtcykpXG4gICAgICApOyovXG4gICAgfVxuXG4gICAgLy8gU2VuZCB2YWx1ZSB0byBzdWdnZXN0IHdoZW4gOlxuICAgIC8vIC0gaXMgbmlsIGFuZCAnKicsIGFuZCBubyBtaW4gbGVuZ3RoIHRocmVzaG9sZFxuICAgIC8vIC0gaXMgbm90IG5pbCBhbmQgbm90IGEgc3RyaW5nIHR5cGUgKGUuZy4gb2JqZWN0KVxuICAgIC8vIC0gaXMgbm90IG5pbCBhbmQgaXMgYSBzdHJpbmcsIGFuZCBoYXMgZW5vdWdoIGNoYXJhY3RlclxuICAgIGNvbnN0IHRocmVzaG9sZEZpbHRlckZuID0gKHZhbHVlKSA9PlxuICAgICAgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDAgfHxcbiAgICAgIChpc05vdE5pbCh2YWx1ZSkgJiYgKCEodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgfHwgKHZhbHVlICE9PSAnKicgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+PSB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQpKSk7XG5cbiAgICBjb25zdCBmaWx0ZXJlZEl0ZW1zQ2hhbmdlcyA9IG1lcmdlKFxuICAgICAgLy8gUmVsb2FkIGV2ZW50IChubyBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIHBpcGUsIHRvIGZvcmNlIHJlbG9hZCBldmVuIGlmIHNhbWUgdmFsdWUpXG4gICAgICB0aGlzLl9yZWxvYWQkLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICBmaWx0ZXIodGhyZXNob2xkRmlsdGVyRm4pLFxuICAgICAgICB0YXAoKF8pID0+IHRoaXMuc2hvd0xvYWRpbmdTcGlubmVyICYmIHRoaXMubWFya0FzTG9hZGluZygpKVxuICAgICAgKSxcblxuICAgICAgLy8gU2VhcmNoIHRleHQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgYmVjYXVzZSBvZiB0aGUgZGVib3VuY2VUaW1lKCkgcGlwZSlcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGZpbHRlcigodmFsdWUpID0+IHRoaXMuZW5hYmxlZCAmJiBpc05vdE5pbFN0cmluZyh2YWx1ZSkpLFxuICAgICAgICAvLyBNYXJrIGFzIGxvYWRpbmcgKHRvIHNob3cgbG9hZGluZyBzcGlubmVyKSAtIGFzIHNvb24gYXMgcG9zc2libGUsIGFuZCBiZWZvcmUgZGVib3VuY2VUaW1lXG4gICAgICAgIHRhcCgoXykgPT4gdGhpcy5zaG93TG9hZGluZ1NwaW5uZXIgJiYgdGhpcy5tYXJrQXNMb2FkaW5nKCkpLFxuICAgICAgICAvLyBGaWx0ZXIgaWYgbm90IGVub3VnaCBjaGFyYWN0ZXJcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICgodmFsdWU/Lmxlbmd0aCB8fCAwKSA8IHRoaXMuc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgLy8gVXBkYXRlIGRpc3BsYXkgdmFsdWUsIHRvIGVuYWJsZSB0aGUgbWVzc2FnZSBcIm5vdCBlbm91Z2ggY2hhcmFjdGVyc1wiXG4gICAgICAgICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICAvLyBXYWl0IGEgZGVib3VuY2UgdGltZVxuICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vLHRhcCgodmFsdWUpID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VhcmNoIHRleHQgY2hhbmdlczonLCB2YWx1ZSkpXG4gICAgICApLFxuXG4gICAgICAvLyBPYmplY3Qgc2V0OiB1c2UgaXQgKG5vIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZSBuZWVkKVxuICAgICAgdGhpcy5mb3JtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgICAgc3RhcnRXaXRoPGFueSwgYW55Pih0aGlzLmZvcm1Db250cm9sLnZhbHVlKSxcbiAgICAgICAgZmlsdGVyKCh2YWx1ZSkgPT4gaXNOb3ROaWwodmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpLFxuICAgICAgICB0YXAoKHZhbHVlKSA9PiB7XG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICAvL2lmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBjb250cm9sIG9iamVjdCBjaGFuZ2VzOicsIHZhbHVlKTtcblxuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZGlzcGxheSB2YWx1ZSAoaWYgbmVlZClcbiAgICAgICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmRpc3BsYXlXaXRoKHZhbHVlKSB8fCAnJztcbiAgICAgICAgICBpZiAodGhpcy5fZGlzcGxheVZhbHVlICE9PSBkaXNwbGF5VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IGRpc3BsYXlWYWx1ZTtcblxuICAgICAgICAgICAgLy8gQXBwbHkgdG8gdGhlIGlucHV0W3R5cGU9dGV4dF0gZmllbGRcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdElucHV0VGV4dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICB0aGlzLm1hdElucHV0VGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5fZGlzcGxheVZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuXG4gICAgICAgIC8vIElmIG11bHRpcGxlOiBkbyBub3QgcmVjb21wdXRlIGl0ZW1zIChvbmx5IGZvciB0aGUgZmlyc3QgdGltZSwgd2hlbiBsb2FkaW5nKVxuICAgICAgICAvLyB3aGVuIGZvcm1Db250cm9sIHZhbHVlIGNoYW5nZXNcbiAgICAgICAgZmlsdGVyKCgpID0+ICF0aGlzLm11bHRpcGxlIHx8IHRoaXMubG9hZGluZyksXG5cbiAgICAgICAgbWFwKCh2YWx1ZSkgPT4gKHRoaXMuc2hvd0FsbE9uRm9jdXMgJiYgdGhpcy5zdWdnZXN0TGVuZ3RoVGhyZXNob2xkIDw9IDAgPyAnKicgOiB2YWx1ZSkpXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vLHRhcCh2YWx1ZSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIGFuIGNvbnRyb2wgb2JqZWN0IHZhbHVlOiAnLCB2YWx1ZSkpXG4gICAgICApLFxuXG4gICAgICAvLyBNZXJnZSBzb21lIG9ic2VydmFibGVzLCB3aXRoIGEgY29tbW9uIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgcGlwZVxuICAgICAgbWVyZ2UoXG4gICAgICAgIC8vIE9uIGRyb3Bkb3duIGJ1dHRvbiBjbGljayAobm8gZGVib3VuY2VUaW1lKVxuICAgICAgICB0aGlzLmRyb3BCdXR0b25DbGljay5waXBlKGZpbHRlcigoZXZlbnQpID0+ICFldmVudCB8fCAhZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkpLFxuICAgICAgICAvLyBGb2N1cyBvciBjbGljayA9PiBMb2FkIGFsbCAobm8gZGVib3VuY2VUaW1lKVxuICAgICAgICBtZXJnZSh0aGlzLmZvY3VzZWQsIHRoaXMuY2xpY2tlZCksXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vLnBpcGUodGFwKF8gPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmb2N1c2VkIG9yIGNsaWNrZWQgZXZlbnQnKSkpLFxuICAgICAgICAvLyBJbnB1dCBpdGVtcyBvciBmaWx0ZXIgY2hhbmdlc1xuICAgICAgICBtZXJnZSh0aGlzLl8kaW5wdXRJdGVtcywgdGhpcy5fJGZpbHRlcilcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKChfKSA9PiAhdGhpcy5sb2FkaW5nKVxuICAgICAgICAgICAgLy8sdGFwKF8gPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCAkaW5wdXRJdGVtcyBvciBmaWx0ZXIgZXZlbnQnKSlcbiAgICAgICAgICApXG4gICAgICApLnBpcGUoXG4gICAgICAgIGZpbHRlcigoXykgPT4gdGhpcy5lbmFibGVkKSxcbiAgICAgICAgbWFwKChfKSA9PiAodGhpcy5zaG93QWxsT25Gb2N1cyA/ICcqJyA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKSxcbiAgICAgICAgLy8gRGlzdGluZ3Vpc2ggY2hhbmdlc1xuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgodjEsIHYyKSA9PlxuICAgICAgICAgIC8vIElmIGxvYWRpbmcgKG5vdCBsb2FkZWQgeWV0KSwgc2ltdWxhdGUgdGhhdCB2YWx1ZSBjaGFuZ2VkIHRvIGZvcmNlIGxvYWRcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPyBmYWxzZSA6IHYxID09PSB2MiB8fCB0aGlzLmVxdWFscyh2MSwgdjIpXG4gICAgICAgICksXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggY2hhcmFjdGVyc1xuICAgICAgICBmaWx0ZXIodGhyZXNob2xkRmlsdGVyRm4pXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vLHRhcCh2YWx1ZSA9PiB0aGlzLmRlYnVnICYmIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIHVwZGF0ZSBldmVudCBmcm9tIG9ic2VydmFibGVzOiAnLCB2YWx1ZSkpXG4gICAgICApXG4gICAgKS5waXBlKFxuICAgICAgLy8gU3VnZ2VzdCB2YWx1ZXNcbiAgICAgIG1lcmdlTWFwKCh2YWx1ZSkgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCB0aGlzLmZpbHRlcikpLFxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vdGFwKGl0ZW1zID0+IHRoaXMuZGVidWcgJiYgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgUmVjZWl2ZWQgZnJvbSBzdWdnZXN0OiAnLCBpdGVtcykpLFxuXG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIHRhcCgoaXRlbXMpID0+ICF0aGlzLm11bHRpcGxlICYmICF0aGlzLm1vYmlsZSAmJiB0aGlzLnVwZGF0ZUltcGxpY2l0VmFsdWUoaXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBGZXRjaCBtb3JlIGV2ZW50c1xuICAgIGNvbnN0IGZldGNoTW9yZUl0ZW1zQ2hhbmdlcyA9IHRoaXMuX2ZldGNoTW9yZSQucGlwZShcbiAgICAgIHRhcCgoZXZlbnQpID0+IGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpKSwgLy8gQXZvaWQgdG8gY2xvc2UgdGhlIG1hdC1zZWxlY3RcbiAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNhbkZldGNoTW9yZSksXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmZldGNoTW9yZSgpKSxcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vdGFwKG1vcmVJdGVtcyA9PiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBmcm9tIGZldGNoIE1vcmU6ICcsIG1vcmVJdGVtcykpLFxuXG4gICAgICAvLyBDb25jYXQgdG8gZXhpc3RpbmcgaXRlbXNcbiAgICAgIG1hcCgobW9yZUl0ZW1zKSA9PiAodGhpcy5fJGZpbHRlcmVkSXRlbXMudmFsdWUgfHwgW10pLmNvbmNhdChtb3JlSXRlbXMpKVxuICAgICk7XG5cbiAgICAvLyBVcGRhdGUgZmlsdGVyZWQgaXRlbXNcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgbWVyZ2UoXG4gICAgICAgIHRoaXMuXyRpbnB1dEl0ZW1zLFxuXG4gICAgICAgIC8vIFVwZGF0ZSBpdGVtcyBldmVudHNcbiAgICAgICAgZmlsdGVyZWRJdGVtc0NoYW5nZXMsXG5cbiAgICAgICAgLy8gRmV0Y2ggbW9yZSBldmVudHNcbiAgICAgICAgZmV0Y2hNb3JlSXRlbXNDaGFuZ2VzXG4gICAgICApLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIGNvbnRyb2wgdmFsdWUgaXMgaW5zaWRlIChtYXQtc2VsZWN0KVxuICAgICAgICBpZiAoaXRlbXMgJiYgKHRoaXMubW9iaWxlIHx8IHRoaXMubXVsdGlwbGUpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xuXG4gICAgICAgICAgLy8gSWYgZm9ybSB2YWx1ZSBpcyBtaXNzaW5nOiBhcHBlbmQgdG8gbGlzdFxuICAgICAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIGl0ZW1zID0gaXRlbXMuY29uY2F0KHZhbHVlLmZpbHRlcigodikgPT4gaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmVxdWFscyhpdGVtLCB2KSkgPT09IC0xKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiB0aGlzLmVxdWFscyhpdGVtLCB2YWx1ZSkpID09PSAtMSkge1xuICAgICAgICAgICAgICBpdGVtcyA9IGl0ZW1zLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIEVtaXQgaXRlbXNcbiAgICAgICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMubmV4dChpdGVtcyk7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBBcHBseWluZyBpbXBsaWNpdCB2YWx1ZSwgb24gYmx1clxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLmJsdXJyZWRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gU2tpcCBpZiBtdWx0aXBsZSAobm8gaW1wbGljaXQgdmFsdWUpIG9yIGRpc2FibGVcbiAgICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLm11bHRpcGxlICYmICF0aGlzLm1vYmlsZSAmJiB0aGlzLmVuYWJsZWQpLFxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgLy8sdGFwKF8gPT4gdGhpcy5kZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBSZWNlaXZlZCBibHVycmVkIGV2ZW50JykpLFxuICAgICAgICAgIG1hcCgoXykgPT4gdGhpcy5mb3JtQ29udHJvbC52YWx1ZSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIC8vIFdoZW4gbGVhdmUgY29tcG9uZW50IHdpdGhvdXQgb2JqZWN0LCB1c2UgaW1wbGljaXQgdmFsdWUgaWYgOlxuICAgICAgICAgIC8vIC0gYW4gZXhwbGljaXQgdmFsdWVcbiAgICAgICAgICAvLyAtIGZpZWxkIGlzIG5vdCBlbXB0eSAodXNlciBmaWxsIHNvbWV0aGluZylcbiAgICAgICAgICAvLyAtIE9SIGZpZWxkIGVtcHR5IGJ1dCBpcyByZXF1aXJlZFxuICAgICAgICAgIGlmICh0aGlzLl9pbXBsaWNpdFZhbHVlICYmICgodGhpcy5yZXF1aXJlZCAmJiBpc05pbE9yQmxhbmsodmFsdWUpKSB8fCAoaXNOb3ROaWxPckJsYW5rKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSkpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLl9pbXBsaWNpdFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wubWFya0FzUGVuZGluZyh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSwgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgICAgICAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcy5uZXh0KFt0aGlzLl9pbXBsaWNpdFZhbHVlXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc05pbE9yQmxhbmsodmFsdWUpKSB7XG4gICAgICAgICAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoeyBlbWl0RXZlbnQ6IGZhbHNlLCBvbmx5U2VsZjogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UsIG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgICAgICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5tYXJrQXNMb2FkaW5nKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSBudWxsOyAvLyByZXNldCB0aGUgaW1wbGljaXQgdmFsdWVcbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTsgLy8gQ2xvbmUgcGFuZWxcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIGZvcm0gY29udHJvbCBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICAvLyBVcGRhdGUgY29tcG9uZW50IHN0YXRlXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jaGVja0lmVG91Y2hlZCgpKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5rZXlkb3duRXNjYXBlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgLy8gQXZvaWQgZm9ybSBvciBwYWdlIHRvIG1hbmFnZSBlc2NhcGUgZXZlbnRcbiAgICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIENsb3NpbmcgdGhlIHBhbmVsIChrZXlkb3duLmVzY2FwZSlcIik7XG5cbiAgICAgICAgICB0aGlzLmNsb3NlUGFuZWwoKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuX2ZpeE1hdFNlbGVjdFBvc2l0aW9uQW5kU2VhcmNoYmFyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICBpZiAodGhpcy5faXRlbXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2l0ZW1zU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICB0aGlzLl8kaW5wdXRJdGVtcy5jb21wbGV0ZSgpO1xuICAgIHRoaXMuXyRpbnB1dEl0ZW1zLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3JlbG9hZCQuY29tcGxldGUoKTtcbiAgICB0aGlzLl8kZmlsdGVyLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLmRyb3BCdXR0b25DbGljay5jb21wbGV0ZSgpO1xuICAgIHRoaXMuY2xpY2tlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuYmx1cnJlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMuZm9jdXNlZC5jb21wbGV0ZSgpO1xuICAgIHRoaXMua2V5ZG93bkVzY2FwZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMua2V5dXBFbnRlci5jb21wbGV0ZSgpO1xuICAgIHRoaXMuX2ZldGNoTW9yZSQuY29tcGxldGUoKTtcblxuICAgIHRoaXMuX2ltcGxpY2l0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IG51bGw7XG4gICAgdGhpcy5kaXNwbGF5V2l0aCA9IG51bGw7XG4gICAgdGhpcy5lcXVhbHMgPSBudWxsO1xuICAgIHRoaXMuc3VnZ2VzdEZuID0gbnVsbDtcbiAgICB0aGlzLl8kZmlsdGVyZWRJdGVtcyA9IG51bGw7XG4gICAgdGhpcy5jb25maWcgPSBudWxsO1xuICAgIHRoaXMucGFuZWxDbGFzcyA9IG51bGw7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gbnVsbDtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IG51bGw7XG5cbiAgICAvLyBEZXN0cm95IHRoZSAnYXV0b2NvbXBsZXRlJyBpbnN0YW5jZSwgdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlLm5nT25EZXN0cm95KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIHJlbG9hZCBjb250ZW50LiBVc2VmdWwgd2hlbiBmaWx0ZXIgaGFzIGJlZW4gY2hhbmdlZCBidXQgbm90IGRldGVjdGVkXG4gICAqL1xuICByZWxvYWRJdGVtcyh2YWx1ZT86IGFueSkge1xuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIEFza2luZyB0byByZWxvYWRJdGVtcygpXCIpO1xuICAgIC8vIEZvcmNlIGEgcmVmcmVzaFxuICAgIHRoaXMuX3JlbG9hZCQubmV4dCh2YWx1ZSB8fCAodGhpcy5zaG93QWxsT25Gb2N1cyAmJiB0aGlzLnN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgPD0gMCA/ICcqJyA6IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKTtcblxuICAgIC8vIENsZWFyIHRoZSBzZWFyY2ggYmFyIChpZiBoaWRkZW4pXG4gICAgaWYgKHRoaXMubW9iaWxlICYmICF0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4gJiYgdGhpcy5pb25TZWFyY2hiYXIpIHtcbiAgICAgIHRoaXMuaW9uU2VhcmNoYmFyLnZhbHVlID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBERUJVR1xuICAgIC8vIGlmICh0aGlzLmRlYnVnKSBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBXcml0aW5nIHZhbHVlOiAnLCB2YWx1ZSk7XG5cbiAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gdGhpcy5kaXNwbGF5V2l0aCh2YWx1ZSk7XG4gICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChpc0Rpc2FibGVkICYmIHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4pIHtcbiAgICAgIHRoaXMuY2xvc2VQYW5lbCgpO1xuICAgIH1cbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKHRoaXMubW9iaWxlKSB7XG4gICAgICB0aGlzLm1hdFNlbGVjdC5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb2N1c0lucHV0KHRoaXMubWF0SW5wdXRUZXh0KTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXJJbnB1dFRleHRGb2N1c0V2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBJZ25vcmUgZXZlbnQgZnJvbSBtYXQtb3B0aW9uXG4gICAgaWYgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcblxuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIENhbmNlbGxpbmcgZm9jdXMgZXZlbnQnKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgU2VsZWN0IGlucHV0IGNvbnRlbnQnKTtcbiAgICBjb25zdCBoYXNDb250ZW50ID0gaXNOb3ROaWxPckJsYW5rKChldmVudC50YXJnZXQgYXMgYW55KT8udmFsdWUpO1xuXG4gICAgLy8gSWYgY29tYm8gaXMgZW1wdHksIG9yIGlmIGhhcyBjb250ZW50IGJ1dCBzaG91bGQgZm9yY2UgdG8gc2hvdyBwYW5lbCBvbiBmb2N1c1xuICAgIGlmICghaGFzQ29udGVudCB8fCB0aGlzLnNob3dQYW5lbE9uRm9jdXMgfHwgdGhpcy5zaG93QWxsT25Gb2N1cykge1xuICAgICAgLy8gREVCVUdcbiAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEVtaXQgZm9jdXMgZXZlbnQnKTtcblxuICAgICAgdGhpcy5mb2N1c2VkLmVtaXQoKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmlsdGVySW5wdXRUZXh0Qmx1ckV2ZW50KGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgaWYgKCFldmVudCB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICAvLyBOZWVkIGEgdGltZW91dCB0byBwcmV2ZW50IGVhcmx5IGJsdXIgZXZlbnQgd2l0aG91dCB0cmlnZ2VyaW5nIGZvcm1DaGFuZ2UgZXZlbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vIElnbm9yZSBldmVudCBmcm9tIG1hdC1vcHRpb25cbiAgICAgIGlmIChcbiAgICAgICAgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJykgfHxcbiAgICAgICAgLy8gT3IgYXV0b2NvbXBsZXRlIHBhbmVsIGlzIG9wZW4gYmVjYXVzZSBldmVudC5yZWxhdGVkVGFyZ2V0IGlzIG51bGwgKGNmLiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8yNDE4MilcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGU/LmlzT3BlblxuICAgICAgKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIERFQlVHXG4gICAgICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBDYW5jZWxsaW5nIGJsdXIgZXZlbnRcIik7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBERUJVR1xuICAgICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgQmx1cjogbW92ZSBjYXJldCB0byB0aGUgYmVnaW5uaW5nJyk7XG5cbiAgICAgIC8vIE1vdmUgY2FyZXQgdG8gdGhlIGJlZ2lubmluZyAoZml4IGlzc3VlIElNQUdJTkUtNDY5KVxuICAgICAgc2VsZWN0SW5wdXRSYW5nZShldmVudC50YXJnZXQgYXMgYW55LCAwLCAwKTtcblxuICAgICAgdGhpcy5ibHVycmVkLmVtaXQoZXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpb25TZWFyY2hCYXJDaGFuZ2VkKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhdGhpcy5tYXRTZWxlY3QucGFuZWxPcGVuKSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIC8vIEdldCB0aGUgdmFsdWUgdG8gc2VhcmNoXG4gICAgY29uc3QgdmFsdWUgPSAoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8U2VhcmNoYmFyQ2hhbmdlRXZlbnREZXRhaWw+KT8uZGV0YWlsLnZhbHVlO1xuXG4gICAgLy8gREVCVUdcbiAgICAvL2NvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyBcIiBSZWNlaXZlZCA8aW9uLXNlYXJjaGJhcj4gY2hhbmdlc1wiLCB2YWx1ZSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgKGluIHRoZSB2aXNpYmxlIGZvcm0gY29udHJvbClcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIE1hcmsgY29tcG9uZW50IGFzIGxvYWRpbmdcbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcblxuICAgIC8vIFJlbG9hZCBpdGVtc1xuICAgIHRoaXMucmVsb2FkSXRlbXModmFsdWUpO1xuXG4gICAgLy8gVE9ETyBGaW5kIGEgd2F5IHRvIGF2b2lkIG1hdC1zZWxlY3QgdG8gZ2l2ZSBmb2N1cyB0byBhbiBvcHRpb24sIHdoZW4gdHlwaW5nXG4gICAgLyppZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5tYXRTZWxlY3QuX2VsZW1lbnRSZWY7XG4gICAgfSovXG4gIH1cblxuICBpb25TZWFyY2hCYXJDaGFuZ2VkMShldmVudCkge1xuICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgfVxuXG4gIGZpbHRlck1hdFNlbGVjdEZvY3VzRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICAvLyBERUJVR1xuICAgIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIFJlY2VpdmVkIDxtYXQtc2VsZWN0PiBmb2N1cyBldmVudCcsIGV2ZW50KTtcbiAgICB0aGlzLmZvY3VzZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBmaWx0ZXJNYXRTZWxlY3RCbHVyRXZlbnQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIC8vIERFQlVHXG4gICAgLy8gY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArIFwiIFJlY2VpdmVkIDxtYXQtc2VsZWN0PiBibHVyIGV2ZW50XCIsIGV2ZW50KTtcblxuICAgIGlmIChcbiAgICAgIGV2ZW50LnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgLy8gSWdub3JlIGV2ZW50IGZyb20gbWF0LW9wdGlvblxuICAgICAgKGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ01BVC1PUFRJT04nIHx8XG4gICAgICAgIChldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdESVYnICYmIGV2ZW50LnJlbGF0ZWRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtbWRjLXNlbGVjdC1wYW5lbCcpKSB8fCAvLyBOZXcgTURDIHRhZyBhbmQgY2xhc3MgbmFtZSAoZXF1aXZhbGVudCB0byBldmVudC5yZWxhdGVkVGFyZ2V0LnRhZ05hbWUgPT09ICdNQVQtT1BUSU9OJylcbiAgICAgICAgKGV2ZW50LnJlbGF0ZWRUYXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiBldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnc2VhcmNoYmFyLWlucHV0JykpKVxuICAgICkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvLyBjb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgXCIgQ2FuY2VsbGluZyA8bWF0LXNlbGVjdD4gYmx1ciBldmVudFwiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLmJsdXJyZWQuZW1pdChldmVudCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjbGVhclZhbHVlKGV2ZW50PzogRXZlbnQpIHtcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XG4gICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmlvblNlYXJjaGJhcikge1xuICAgICAgdGhpcy5pb25TZWFyY2hiYXIudmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLm1hcmtBc0xvYWRpbmcoKTtcbiAgfVxuXG4gIF9pbml0QXV0b2NvbXBsZXRlSW5maW5pdGVTY3JvbGwodGhyZXNob2xkPzogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9jb21wbGV0ZSkgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgSW5pdCBhdXRvY29tcGxldGUgc2Nyb2xsIGxpc3RlbmVyJyk7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVuZWQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLmF1dG9jb21wbGV0ZS5faXNPcGVuID8gdGltZXIoMCkgOiB0aGlzLmF1dG9jb21wbGV0ZS5vcGVuZWQucGlwZShkZWJvdW5jZVRpbWUoMjAwKSk7XG4gICAgY29uc3Qgc2Nyb2xsRW5kJCA9IG9wZW5lZCQucGlwZShcbiAgICAgIG1hcCgoXykgPT4gdGhpcy5nZXRBdXRvY29tcGxldGVQYW5lbCgpKSxcbiAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICBzd2l0Y2hNYXAoKHBhbmVsKSA9PiBmcm9tU2Nyb2xsRW5kRXZlbnQocGFuZWwsIHRocmVzaG9sZCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuYXV0b2NvbXBsZXRlLmNsb3NlZClcbiAgICApO1xuXG4gICAgLy8gVHJpZ2dlciBmZXRjaCBtb3JlLCBlbmQgZW5kIHNjcm9sbCByZWFjaGVkXG4gICAgdGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uID0gc2Nyb2xsRW5kJC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fZmV0Y2hNb3JlJC5lbWl0KCkpO1xuXG4gICAgLy8gUmVnaXN0ZXIgc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24pO1xuICB9XG5cbiAgX2luaXRNYXRTZWxlY3RJbmZpbml0ZVNjcm9sbCh0aHJlc2hvbGQ/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMubWF0U2VsZWN0KSByZXR1cm47IC8vIFNraXBcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKHRoaXMubG9nUHJlZml4ICsgJyBJbml0IG1hdC1zZWxlY3Qgc2Nyb2xsIGxpc3RlbmVyJyk7XG5cbiAgICBpZiAodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9vcGVuZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUodGhpcy5fb3BlbmVkU3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcGVuZWQkOiBPYnNlcnZhYmxlPGFueT4gPSB0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4gPyB0aW1lcigwKSA6IHRoaXMubWF0U2VsZWN0Ll9vcGVuZWRTdHJlYW0ucGlwZShkZWJvdW5jZVRpbWUoMjAwKSk7XG4gICAgY29uc3Qgc2Nyb2xsRW5kJCA9IG9wZW5lZCQucGlwZShcbiAgICAgIG1hcCgoXykgPT4gdGhpcy5nZXRNYXRTZWxlY3RQYW5lbCgpKSxcbiAgICAgIGZpbHRlcihpc05vdE5pbCksXG4gICAgICBzd2l0Y2hNYXAoKHBhbmVsKSA9PiBmcm9tU2Nyb2xsRW5kRXZlbnQocGFuZWwsIHRocmVzaG9sZCkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMubWF0U2VsZWN0Ll9jbG9zZWRTdHJlYW0pXG4gICAgKTtcblxuICAgIC8vIFRyaWdnZXIgZmV0Y2ggbW9yZSwgZW5kIGVuZCBzY3JvbGwgcmVhY2hlZFxuICAgIHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbiA9IHNjcm9sbEVuZCQucGlwZShmaWx0ZXIoKF8pID0+IHRoaXMuX21vcmVJdGVtc0NvdW50ID4gMCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9mZXRjaE1vcmUkLmVtaXQoKSk7XG5cbiAgICAvLyBSZWdpc3RlciBzdWJzY3JpcHRpb25cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHRoaXMuX29wZW5lZFN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBnZXQgaXNPcGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoIXRoaXMubW9iaWxlICYmIHRoaXMuYXV0b2NvbXBsZXRlPy5pc09wZW4pIHx8IHRoaXMubWF0U2VsZWN0Py5wYW5lbE9wZW4gfHwgZmFsc2U7XG4gIH1cblxuICBjbG9zZVBhbmVsKCkge1xuICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZT8uaXNPcGVuKSB7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVRyaWdnZXI/LmNsb3NlUGFuZWwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubWF0U2VsZWN0Py5wYW5lbE9wZW4pIHtcbiAgICAgIHRoaXMubWF0U2VsZWN0Py5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBzdWdnZXN0KHZhbHVlOiBhbnksIGZpbHRlcj86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICAvLyBDYWxsIHN1Z2dlc3Rpb24gZnVuY3Rpb25cbiAgICBsZXQgcmVzID0gYXdhaXQgdGhpcy5zdWdnZXN0Rm4odmFsdWUsIGZpbHRlcik7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcodGhpcy5sb2dQcmVmaXggKyAnIEZpbHRlcmVkIGl0ZW1zIGJ5IHN1Z2dlc3RGbjonLCB2YWx1ZSwgcmVzKTtcblxuICAgIGlmICghcmVzKSB7XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICAgIHJlcyA9IFtdO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICByZXMgPSByZXMgYXMgYW55W107XG4gICAgICB0aGlzLl9pdGVtQ291bnQgPSByZXM/Lmxlbmd0aCB8fCAwO1xuICAgICAgdGhpcy5fb25GZXRjaE1vcmVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21vcmVJdGVtc0NvdW50ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBkYXRhLCB0b3RhbCwgZmV0Y2hNb3JlIH0gPSByZXMgYXMgTG9hZFJlc3VsdDxhbnk+O1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdG9OdW1iZXIodG90YWwsIChkYXRhICYmIGRhdGEubGVuZ3RoKSB8fCAwKTtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IChmZXRjaE1vcmUgJiYgdGhpcy5faXRlbUNvdW50IC0gZGF0YS5sZW5ndGgpIHx8IDA7XG4gICAgICByZXMgPSBkYXRhO1xuICAgIH1cblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1Zyh0aGlzLmxvZ1ByZWZpeCArICcgRmlsdGVyZWQgaXRlbXMgYnkgc3VnZ2VzdEZuOicsIHZhbHVlLCByZXMpO1xuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hNb3JlKCk6IFByb21pc2U8YW55W10+IHtcbiAgICBpZiAoIXRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2spIHJldHVybiBbXTtcblxuICAgIC8vIFNhdmUgdGhlbiByZW1vdmUgZmV0Y2ggZnVuY3Rpb24gKHRvIGF2b2lkIG11bHRpLWNhbGwpXG4gICAgY29uc3QgZmV0Y2hNb3JlRm4gPSB0aGlzLl9vbkZldGNoTW9yZUNhbGxiYWNrO1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCB7IGRhdGEsIHRvdGFsLCBmZXRjaE1vcmUgfSA9IGF3YWl0IGZldGNoTW9yZUZuKCk7XG4gICAgdGhpcy5faXRlbUNvdW50ID0gdG90YWwgfHwgdGhpcy5faXRlbUNvdW50O1xuICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSBmZXRjaE1vcmU7XG4gICAgdGhpcy5fbW9yZUl0ZW1zQ291bnQgPSBNYXRoLm1heCgwLCB0aGlzLl9tb3JlSXRlbXNDb3VudCAtIGRhdGEubGVuZ3RoKTsgLy8gQm9ybmUgbWluID0gMFxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJbXBsaWNpdFZhbHVlKGl0ZW1zOiBhbnlbXSkge1xuICAgIGNvbnN0IGFwcGx5SW1wbGljaXRWYWx1ZSA9IHR5cGVvZiB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuYXBwbHlJbXBsaWNpdFZhbHVlKCkgOiB0aGlzLmFwcGx5SW1wbGljaXRWYWx1ZTtcbiAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgYXBwbHlJbXBsaWNpdFZhbHVlKSB7XG4gICAgICAvLyBTdG9yZSBpbXBsaWNpdCB2YWx1ZSAod2lsbCB1c2UgaXQgb25CbHVyIGlmIG5vdCBvdGhlciB2YWx1ZSBzZWxlY3RlZClcbiAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IGl0ZW1zWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0b2NvbXBsZXRlUGFuZWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGVsZSA9IHRoaXMuYXV0b2NvbXBsZXRlPy5vcHRpb25zLmxhc3Q/Ll9nZXRIb3N0RWxlbWVudCgpLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIFVuYWJsZSB0byBmaW5kIHRoZSBhdXRvY29tcGxldGUgZGl2Li4uJyk7XG4gICAgfVxuICAgIHJldHVybiBlbGU7XG4gIH1cblxuICBwcml2YXRlIGdldE1hdFNlbGVjdFBhbmVsKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBlbGUgPSB0aGlzLm1hdFNlbGVjdC5vcHRpb25zLmxhc3Q/Ll9nZXRIb3N0RWxlbWVudCgpLnBhcmVudEVsZW1lbnQ7XG4gICAgaWYgKCFlbGUpIHtcbiAgICAgIC8vIERFQlVHXG4gICAgICBjb25zb2xlLndhcm4odGhpcy5sb2dQcmVmaXggKyAnIFVuYWJsZSB0byBmaW5kIHRoZSBtYXQtc2VsZWN0IGNvbnRhaW5lci4uLicpO1xuICAgIH1cbiAgICByZXR1cm4gZWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrQXNMb2FkaW5nKCkge1xuICAgIGlmICh0aGlzLl8kZmlsdGVyZWRJdGVtcy52YWx1ZSkge1xuICAgICAgdGhpcy5fJGZpbHRlcmVkSXRlbXMubmV4dCh1bmRlZmluZWQpO1xuICAgICAgdGhpcy5faXRlbUNvdW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW1wbGljaXRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX29uRmV0Y2hNb3JlQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tb3JlSXRlbXNDb3VudCA9IDA7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpeE1hdFNlbGVjdFBvc2l0aW9uQW5kU2VhcmNoYmFyKCkge1xuICAgIGlmICghdGhpcy5tYXRTZWxlY3QpIHJldHVybjtcblxuICAgIC8vaWYgKHRoaXMuZGVidWcpIHJldHVybjtcblxuICAgIC8vIEhpZGUgdGhlIHBhbmVsICh3aWxsIGJlIHNob3cgd2hlbiByZWFkeSlcbiAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzID0gJ2Nkay12aXN1YWxseS1oaWRkZW4nO1xuXG4gICAgbGV0IHNlYXJjaEJhclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm1hdFNlbGVjdC5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGFzeW5jIChvcGVuKSA9PiB7XG4gICAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgICAgY29uc3QgcGFuZWxFbGVtZW50ID0gdGhpcy5tYXRTZWxlY3QucGFuZWwubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICBjb25zdCBvdmVybGF5UGFuZSA9IGZpbmRQYXJlbnRXaXRoQ2xhc3MocGFuZWxFbGVtZW50LCAnY2RrLW92ZXJsYXktcGFuZScpO1xuXG4gICAgICAgICAgLy8gRml4IHBhbmVsIHBvc2l0aW9uLCB3aGVuIG92ZXJsYXkgaGFzIGFuIHRyYW5zZm9ybVggKGFkZGVkIHdoZW4ga2V5Ym9hcmQgaXMgc2hvd24pXG4gICAgICAgICAgdGhpcy5fZml4TWF0U2VsZWN0UGFuZWxQb3NpdGlvbihvdmVybGF5UGFuZSk7XG5cbiAgICAgICAgICAvLyBGaXggb3ZlcmxheSwgZm9yIHNlYXJjaGJhclxuICAgICAgICAgIGlmICh0aGlzLnNob3dTZWFyY2hCYXIpIHtcbiAgICAgICAgICAgIHNlYXJjaEJhclN1YnNjcmlwdGlvbiA9IGF3YWl0IHRoaXMuX2ZpeFNlYXJjaGJhck92ZXJsYXkocGFuZWxFbGVtZW50LCBvdmVybGF5UGFuZSk7XG4gICAgICAgICAgICBpZiAoc2VhcmNoQmFyU3Vic2NyaXB0aW9uKSB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKHNlYXJjaEJhclN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2hvdyB0aGUgcGFuZWxcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHBhbmVsRWxlbWVudCwgJ2Nkay12aXN1YWxseS1oaWRkZW4nKTtcbiAgICAgICAgICB0aGlzLm1hdFNlbGVjdC5wYW5lbENsYXNzID0gdGhpcy5wYW5lbENsYXNzO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9OIGNsb3NlXG4gICAgICAgIGVsc2UgaWYgKHNlYXJjaEJhclN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHNlYXJjaEJhclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5yZW1vdmUoc2VhcmNoQmFyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICBzZWFyY2hCYXJTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9maXhNYXRTZWxlY3RQYW5lbFBvc2l0aW9uKG92ZXJsYXlQYW5lOiBIVE1MRWxlbWVudCkge1xuICAgIGlmICghb3ZlcmxheVBhbmUpIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSB0aGUgdW53YW50ZWQgZGVmYXVsdCB0cmFuc2xhdGVYXG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIG92ZXJsYXlQYW5lLFxuICAgICAgJ3RyYW5zZm9ybScsXG4gICAgICBvdmVybGF5UGFuZS5zdHlsZS50cmFuc2Zvcm1cbiAgICAgICAgLnNwbGl0KCcgJylcbiAgICAgICAgLmZpbHRlcigocHJvcCkgPT4gIXByb3AubWF0Y2goL150cmFuc2xhdGVYLykpXG4gICAgICAgIC5qb2luKCcgJylcbiAgICApO1xuXG4gICAgLy8gRml4IHBhbmVsJ3MgbGVmdCwgdG8gYXZvaWQgb3ZlcmZsb3cgb24gdGhlIHJpZ2h0XG4gICAgY29uc3QgbGVmdCA9IG92ZXJsYXlQYW5lLnN0eWxlLmxlZnQ7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhsZWZ0KSAmJiAhbGVmdC5pbmNsdWRlcygnY2FsYygnKSkge1xuICAgICAgaWYgKHRoaXMuZGVidWcpIGNvbnNvbGUuZGVidWcoYCR7dGhpcy5sb2dQcmVmaXh9IEZpeGluZyBzZWxlY3QgcGFuZWwgbGVmdCwgdG8gYXZvaWQgb3ZlcmZsb3cgb24gdGhlIHJpZ2h0YCk7XG4gICAgICBjb25zdCB3aWR0aCA9IGAke292ZXJsYXlQYW5lLmNsaWVudFdpZHRofXB4YDtcbiAgICAgIGNvbnN0IGZpeExlZnQgPSBgY2FsYygtJHt3aWR0aH0gKyBtaW4oJHtsZWZ0fSArICR7d2lkdGh9LCAtMzJweCArIDEwMHZ3KSlgO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5UGFuZSwgJ2xlZnQnLCBmaXhMZWZ0LCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgfVxuXG4gICAgLy8gRml4IHBhbmVsJ3MgdG9wLCB0byBhdm9pZCBvdmVyZmxvdyBvbiB0aGUgYm90dG9tXG4gICAgY29uc3QgdG9wID0gb3ZlcmxheVBhbmUuc3R5bGUudG9wO1xuICAgIGlmIChpc05vdE5pbE9yQmxhbmsodG9wKSAmJiAhdG9wLmluY2x1ZGVzKCdjYWxjKCcpKSB7XG4gICAgICBpZiAodGhpcy5kZWJ1ZykgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gRml4aW5nIHNlbGVjdCBwYW5lbCB0b3AsIHRvIGF2b2lkIG92ZXJmbG93IG9uIHRoZSBib3R0b21gKTtcbiAgICAgIGNvbnN0IGhlaWdodCA9IGAke292ZXJsYXlQYW5lLmNsaWVudEhlaWdodCB8fCAyNzV9cHhgO1xuICAgICAgY29uc3QgZml4VG9wID0gYGNhbGMoLSR7aGVpZ2h0fSArIG1pbigke3RvcH0gKyAke2hlaWdodH0sIC0zMnB4ICsgMTAwdmgpKWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG92ZXJsYXlQYW5lLCAndG9wJywgZml4VG9wLCBSZW5kZXJlclN0eWxlRmxhZ3MyLkltcG9ydGFudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhY2sgOiBpZiB3ZSBhcmUgaW4gYSBJb25Nb2RhbCwgaXQncyBuZWNlc3NhcnkgdG8gbW92ZSB0aGUgQ2RrT3ZlcmxheSBjb250YWluZXJcbiAgICogICAgIGluIHRoZSBJb25Nb2RhbCB0byBtaWdodCBrZWVwIGZvY3VzIGluIElvblNlYXJjaGJhci5cbiAgICpcbiAgICogQHBhcmFtIHBhbmVsRWxlbWVudFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfZml4U2VhcmNoYmFyT3ZlcmxheShwYW5lbEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBvdmVybGF5UGFuZTogSFRNTEVsZW1lbnQpOiBQcm9taXNlPFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5tYXRTZWxlY3QgfHwgIXRoaXMuaW9uU2VhcmNoYmFyKSByZXR1cm47XG5cbiAgICBjb25zdCBtb2RhbEVsZW1lbnQgPSBhd2FpdCB0aGlzLm1vZGFsQ29udHJvbGxlci5nZXRUb3AoKTtcbiAgICBpZiAoIW1vZGFsRWxlbWVudCkgcmV0dXJuOyAvLyBObyBtb2RhbDogc2tpcFxuXG4gICAgLy8gR2V0IHRoZSBDREsgb3ZlcmxheSBjb250YWluZXJcbiAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyID0gZmluZFBhcmVudFdpdGhDbGFzcyhwYW5lbEVsZW1lbnQsICdjZGstb3ZlcmxheS1jb250YWluZXInKTtcbiAgICBpZiAoIW92ZXJsYXlDb250YWluZXIpIHJldHVybjtcbiAgICBjb25zdCBvcmlnaW5hbFBhcmVudCA9IG92ZXJsYXlDb250YWluZXIucGFyZW50RWxlbWVudDtcblxuICAgIC8vIERFQlVHXG4gICAgLy9pZiAodGhpcy5kZWJ1ZylcbiAgICBjb25zb2xlLmRlYnVnKFxuICAgICAgYCR7dGhpcy5sb2dQcmVmaXh9IG1vdmluZyB0aGUgXCJjZGstb3ZlcmxheVwiIGNvbnRhaW5lciBmcm9tIHRoZSBcIiR7b3JpZ2luYWxQYXJlbnQ/LnRhZ05hbWUgfHwgJ2JvZHknfVwiIHRvIHRoZSBcImlvbi1tb2RhbFwiIGNvbnRhaW5lcmBcbiAgICApO1xuXG4gICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChtb2RhbEVsZW1lbnQsIG92ZXJsYXlDb250YWluZXIpO1xuXG4gICAgY29uc3Qgc2hpZnRMZWZ0ID0gKHRoaXMuX2RvY3VtZW50LmRlZmF1bHRWaWV3LmlubmVyV2lkdGggLSBtb2RhbEVsZW1lbnQuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpIC8gMjtcbiAgICBjb25zdCBzaGlmdFRvcCA9ICh0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlldy5pbm5lckhlaWdodCAtIG1vZGFsRWxlbWVudC5maXJzdEVsZW1lbnRDaGlsZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIC8gMjtcblxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3ZlcmxheVBhbmUsICdtYXJnaW4tdG9wJywgYC0ke3NoaWZ0VG9wfXB4YCk7XG4gICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvdmVybGF5UGFuZSwgJ21hcmdpbi1sZWZ0JywgYC0ke3NoaWZ0TGVmdH1weGApO1xuXG4gICAgLy8gUmV0dXJuIHRoZSByZXZlcnNlIGZ1bmN0aW9uLCB0byByZXBsYWNlIHRoZSBjb250YWluZXIgaW4gYm9keVxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIC8vIERFQlVHXG4gICAgICAvL2lmICh0aGlzLmRlYnVnKVxuICAgICAgY29uc29sZS5kZWJ1ZyhgJHt0aGlzLmxvZ1ByZWZpeH0gbW92aW5nIHRoZSBcImNkay1vdmVybGF5XCIgY29udGFpbmVyIGZyb20gdGhlIFwiaW9uLW1vZGFsXCIgdG8gdGhlIFwiYm9keVwiIGNvbnRhaW5lcmApO1xuXG4gICAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKG9yaWdpbmFsUGFyZW50IC8qdGhpcy5kb2N1bWVudC5ib2R5Ki8sIG92ZXJsYXlDb250YWluZXIpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICA8IS0tIHJlYWRvbmx5IC0tPlxuICAgICAgQGlmIChfcmVhZG9ubHkpIHtcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgICBbdGl0bGVdPVwiX2Rpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgY2xhc3M9XCJtYXQtZm9ybS1maWVsZC1kaXNhYmxlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IG1hdFByZWZpeD5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJtYXRQcmVmaXhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICAgICAgICA8bWF0LWxhYmVsPnt7IHBsYWNlaG9sZGVyIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gdHlwZT1cInRleHRcIiByZWFkb25seT1cInRydWVcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiAvPlxuICAgICAgICAgIDxpb24tdGV4dD57eyB2YWx1ZSB8IHRvU3RyaW5nOiBkaXNwbGF5V2l0aCB9fTwvaW9uLXRleHQ+XG4gICAgICAgICAgPGRpdiBtYXRTdWZmaXg+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWF0U3VmZml4VGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGhpbnRzIC0tPlxuICAgICAgICAgIEBpZiAoIWZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgIFtzdWJzY3JpcHRTaXppbmddPVwic3Vic2NyaXB0U2l6aW5nXCJcbiAgICAgICAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIFt0aXRsZV09XCJfZGlzcGxheVZhbHVlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgbWF0UHJlZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFByZWZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgcGxhY2Vob2xkZXIgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICB9XG4gICAgICAgICAgPCEtLSBNb2JpbGUgb3IgTXVsdGlwbGUgKHVzZSA8bWF0LXNlbGVjdD4pIC0tPlxuICAgICAgICAgIEBpZiAobW9iaWxlIHx8IG11bHRpcGxlKSB7XG4gICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAjbWF0U2VsZWN0XG4gICAgICAgICAgICAgIGhpZGVTaW5nbGVTZWxlY3Rpb25JbmRpY2F0b3JcbiAgICAgICAgICAgICAgZGlzYWJsZU9wdGlvbkNlbnRlcmluZ1xuICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJkaXNhYmxlUmlwcGxlXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIl90YWJpbmRleFwiXG4gICAgICAgICAgICAgIFtwYW5lbENsYXNzXT1cInBhbmVsQ2xhc3NcIlxuICAgICAgICAgICAgICBbcGFuZWxXaWR0aF09XCJwYW5lbFdpZHRoXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImZpbHRlck1hdFNlbGVjdEZvY3VzRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChibHVyKT1cImZpbHRlck1hdFNlbGVjdEJsdXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImtleWRvd25Fc2NhcGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImtleXVwRW50ZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2NvbXBhcmVXaXRoXT1cImVxdWFsc1wiXG4gICAgICAgICAgICAgIFtzb3J0Q29tcGFyYXRvcl09XCJzb3J0Q29tcGFyYXRvclwiXG4gICAgICAgICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgIFt0eXBlYWhlYWREZWJvdW5jZUludGVydmFsXT1cImRlYm91bmNlVGltZSAqIDEwXCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlcj57eyB2YWx1ZSB8IHRvU3RyaW5nOiBkaXNwbGF5V2l0aCB9fTwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICA8IS0tIFNlYXJjaCBiYXIgLS0+XG4gICAgICAgICAgICAgIEBpZiAoc2hvd1NlYXJjaEJhcikge1xuICAgICAgICAgICAgICAgIDxtYXQtb3B0Z3JvdXAgY2xhc3M9XCJtYXQtc2VsZWN0LXNlYXJjaGJhclwiIFtjbGFzcy5tYXQtc2VsZWN0LXNlYXJjaGJhci1zdGlja3ldPVwic3RpY2t5U2VhcmNoQmFyXCI+XG4gICAgICAgICAgICAgICAgICA8aW9uLXNlYXJjaGJhclxuICAgICAgICAgICAgICAgICAgICAjaW9uU2VhcmNoYmFyXG4gICAgICAgICAgICAgICAgICAgIGlucHV0bW9kZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIHNob3dDbGVhckJ1dHRvbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbZGVib3VuY2VdPVwiZGVib3VuY2VUaW1lXCJcbiAgICAgICAgICAgICAgICAgICAgKGlvbkNsZWFyKT1cIm1hcmtBc0xvYWRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgIChpb25JbnB1dCk9XCJpb25TZWFyY2hCYXJDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0NPTU1PTi5CVE5fU0VBUkNIJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICA+PC9pb24tc2VhcmNoYmFyPlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGdyb3VwPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwhLS0gSGVhZGVycyAtLT5cbiAgICAgICAgICAgICAgPGlvbi1yb3dcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1zZWxlY3QtaGVhZGVyIGNvbHVtbiBpb24tbm8tcGFkZGluZ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm11bHRpcGxlXT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubWF0LXNlbGVjdC1zZWFyY2hiYXItc3RpY2t5XT1cInNob3dTZWFyY2hCYXIgJiYgc3RpY2t5U2VhcmNoQmFyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dHIgb2YgZGlzcGxheUF0dHJpYnV0ZXM7IHRyYWNrIGF0dHI7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cImRpc3BsYXlDb2x1bW5OYW1lc1tpXSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8IS0tIE5vbmUgb3B0aW9uIC0tPlxuICAgICAgICAgICAgICBAaWYgKCFyZXF1aXJlZCAmJiAhbXVsdGlwbGUgJiYgIWNsZWFyYWJsZSkge1xuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgIDxpb24tcm93IGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+PGkgdHJhbnNsYXRlPkNPTU1PTi5FTVBUWV9PUFRJT048L2k+PC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChfJGZpbHRlcmVkSXRlbXMgfCBhc3luYzsgYXMgaXRlbXMpIHtcbiAgICAgICAgICAgICAgICA8IS0tIE5vIGl0ZW0gb3B0aW9uIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbXMgfCBpc0VtcHR5QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmcgdGV4dC1pdGFsaWNcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8aT57eyBub1Jlc3VsdE1lc3NhZ2UgfCB0cmFuc2xhdGUgfX08L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tcm93IFtjbGFzc0xpc3RdPVwiaXRlbS5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwYXRoIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBwYXRoOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVdPVwiZGlzcGxheUNvbHVtblNpemVzW2ldXCIgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcm9wZXJ0eUdldDogcGF0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodDogeyBzZWFyY2g6IGlvblNlYXJjaGJhcj8udmFsdWUsIHdpdGhBY2NlbnQ6IGhpZ2hsaWdodEFjY2VudCB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwhLS0gTW9yZSBpdGVtIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoX21vcmVJdGVtc0NvdW50KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAobmdJbml0KT1cIl9pbml0TWF0U2VsZWN0SW5maW5pdGVTY3JvbGwoKVwiIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1za2VsZXRvbi10ZXh0IFthbmltYXRlZF09XCJ0cnVlXCIgc3R5bGU9XCJ3aWR0aDogMTAwJVwiPjwvaW9uLXNrZWxldG9uLXRleHQ+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IEBlbHNlIGlmICgoX2Rpc3BsYXlWYWx1ZSB8IHN0ckxlbmd0aCkgPj0gc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJpb24tcGFkZGluZyB0ZXh0LWl0YWxpY1wiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge3sgJ0lORk8uUExFQVNFX1RZUEVfTU9SRV9DSEFSQUNURVJTJyB8IHRyYW5zbGF0ZTogeyBtaW5MZW5ndGg6IHN1Z2dlc3RMZW5ndGhUaHJlc2hvbGQgfSB9fVxuICAgICAgICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwhLS0gZm9vdGVyIC0tPlxuICAgICAgICAgICAgICBAaWYgKGl0ZW1Db3VudDsgYXMgY291bnQpIHtcbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cIm1hdC1vcHRpb24tZm9vdGVyIG1hdC1hdXRvY29tcGxldGUtZm9vdGVyIGlvbi1uby1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tZmxvYXQtZW5kIGlvbi1wYWRkaW5nLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aT57eyAnQ09NTU9OLlJFU1VMVF9DT1VOVCcgfCB0cmFuc2xhdGU6IHsgY291bnQ6IGNvdW50IH0gfX08L2k+XG4gICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICNtYXRJbnB1dFRleHRcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiXG4gICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVQb3NpdGlvbl09XCJtYXRBdXRvY29tcGxldGVQb3NpdGlvblwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJmbG9hdExhYmVsID09PSAnbmV2ZXInICYmIHBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgW2FwcEF1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxuICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiX3RhYmluZGV4XCJcbiAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImNsaWNrZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cImZpbHRlcklucHV0VGV4dEZvY3VzRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChibHVyKT1cImZpbHRlcklucHV0VGV4dEJsdXJFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImtleWRvd25Fc2NhcGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImtleXVwRW50ZXIuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGtleXVwLmFycm93RG93bik9XCIhYXV0b2NvbXBsZXRlLnNob3dQYW5lbCAmJiBkcm9wQnV0dG9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8IS0tIGF1dG9jb21wbGV0ZSAtLT5cbiAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICNhdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICBhdXRvQWN0aXZlRmlyc3RPcHRpb25cbiAgICAgICAgICAgICAgaGlkZVNpbmdsZVNlbGVjdGlvbkluZGljYXRvclxuICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVdpdGhcIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwicGFuZWxDbGFzc1wiXG4gICAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cInBhbmVsV2lkdGhcIlxuICAgICAgICAgICAgICBbZGlzYWJsZVJpcHBsZV09XCJkaXNhYmxlUmlwcGxlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPCEtLSBIZWFkZXJzIC0tPlxuICAgICAgICAgICAgICA8aW9uLXJvdyBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGUtaGVhZGVyIGNvbHVtbiBpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGF0dHIgb2YgZGlzcGxheUF0dHJpYnV0ZXM7IHRyYWNrIGF0dHI7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbCBbc2l6ZV09XCJkaXNwbGF5Q29sdW1uU2l6ZXNbaV1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBbaW5uZXJIVE1MXT1cImRpc3BsYXlDb2x1bW5OYW1lc1tpXSB8IHRyYW5zbGF0ZVwiPjwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgLS0+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnJ4SWY9XCJfJGZpbHRlcmVkSXRlbXM7IGxldCBpdGVtczsgZWxzZTogbG9hZGluZ1RlbXBsYXRlXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBObyBpdGVtIG9wdGlvbiAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW1zIHwgaXNFbXB0eUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGk+e3sgbm9SZXN1bHRNZXNzYWdlIHwgdHJhbnNsYXRlIH19PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbSkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cIml0ZW1cIiBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tcm93IFtjbGFzc0xpc3RdPVwiaXRlbS5jbGFzc0xpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwYXRoIG9mIGRpc3BsYXlBdHRyaWJ1dGVzOyB0cmFjayBwYXRoOyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi1jb2wgW3NpemVdPVwiZGlzcGxheUNvbHVtblNpemVzW2ldXCIgW3RpdGxlXT1cInRleHQuaW5uZXJUZXh0XCIgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcHJvcGVydHlHZXQ6IHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGhpZ2hsaWdodDogeyBzZWFyY2g6IGZvcm1Db250cm9sLnZhbHVlLCB3aXRoQWNjZW50OiBoaWdobGlnaHRBY2NlbnQgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIE1vcmUgaXRlbSAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKF9tb3JlSXRlbXNDb3VudCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKG5nSW5pdCk9XCJfaW5pdEF1dG9jb21wbGV0ZUluZmluaXRlU2Nyb2xsKClcIiBjbGFzcz1cImlvbi1wYWRkaW5nXCIgZGlzYWJsZWQ+XG4gICAgICAgICAgICAgICAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgPCEtLSBmb290ZXIgLS0+XG4gICAgICAgICAgICAgIEBpZiAoaXRlbUNvdW50OyBhcyBjb3VudCkge1xuICAgICAgICAgICAgICAgIDxpb24tcm93IGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZS1mb290ZXIgaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tZmxvYXQtZW5kIGlvbi1wYWRkaW5nLWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpPnt7ICdDT01NT04uUkVTVUxUX0NPVU5UJyB8IHRyYW5zbGF0ZTogeyBjb3VudDogY291bnQgfSB9fTwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICB9XG4gICAgICAgICAgPCEtLVxuICAgICAgICAgIE5PVEUgOlxuICAgICAgICAgIC0gXCJzZWxlY3RJbnB1dENvbnRlbnQoJGV2ZW50KSB8fCBvbkZvY3VzLmVtaXQoJGV2ZW50KVwiIDogY2FsbCBvbkZvY3VzIG9ubHkgd2hlbiB0byB0aGUgaW5wdXQgaXMgZW1wdHkgKG5vdGhpbmcgdG8gc2VsZWN0KVxuICAgICAgICAgIC0tPlxuICAgICAgICAgIDxkaXYgbWF0U3VmZml4PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdFN1ZmZpeFRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignZW50aXR5JykpIHtcbiAgICAgICAgICAgIDxtYXQtZXJyb3IgdHJhbnNsYXRlPkVSUk9SLkZJRUxEX0lOVkFMSUQ8L21hdC1lcnJvcj5cbiAgICAgICAgICB9XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEVycm9yVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8IS0tIEhpbnRzIC0tPlxuICAgICAgICAgIEBpZiAoIWZvcm1Db250cm9sLmludmFsaWQpIHtcbiAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIm1hdEhpbnRUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICB9XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCIgY2xhc3M9XCJpb24tYWxpZ24tc2VsZi1jZW50ZXJcIj5cbiAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRBZnRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG48L2lvbi1ncmlkPlxuXG48bmctdGVtcGxhdGUgI21hdFByZWZpeFRlbXBsYXRlPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0U3VmZml4VGVtcGxhdGU+XG4gIEBpZiAoIW1vYmlsZSAmJiAhbXVsdGlwbGUpIHtcbiAgICA8YnV0dG9uXG4gICAgICBtYXRTdWZmaXhcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJkcm9wQnV0dG9uQ2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgIFtoaWRkZW5dPVwiZGlzYWJsZWRcIlxuICAgICAgW3RpdGxlXT1cImRyb3BCdXR0b25UaXRsZSB8fCAnJyB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAgPG1hdC1pY29uPmtleWJvYXJkX2Fycm93X2Rvd248L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICB9XG4gIEBpZiAoY2xlYXJhYmxlKSB7XG4gICAgPGJ1dHRvblxuICAgICAgbWF0U3VmZml4XG4gICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xlYXJWYWx1ZSgkZXZlbnQpXCJcbiAgICAgIFtoaWRkZW5dPVwiZGlzYWJsZWQgfHwgIWZvcm1Db250cm9sLnZhbHVlXCJcbiAgICAgIFt0aXRsZV09XCJjbGVhckJ1dHRvblRpdGxlIHx8ICcnIHwgdHJhbnNsYXRlXCJcbiAgICA+XG4gICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvYnV0dG9uPlxuICB9XG5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFN1ZmZpeF1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIExvYWRpbmcgLS0+XG48bmctdGVtcGxhdGUgI2xvYWRpbmdUZW1wbGF0ZT5cbiAgQGlmICgoX2Rpc3BsYXlWYWx1ZSB8IHN0ckxlbmd0aCkgPj0gc3VnZ2VzdExlbmd0aFRocmVzaG9sZCkge1xuICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwiaW9uLXBhZGRpbmdcIiBkaXNhYmxlZD5cbiAgICAgIDxpb24tc2tlbGV0b24tdGV4dCBbYW5pbWF0ZWRdPVwidHJ1ZVwiIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2lvbi1za2VsZXRvbi10ZXh0PlxuICAgIDwvbWF0LW9wdGlvbj5cbiAgfSBAZWxzZSB7XG4gICAgPCEtLSBOZWVkIG1vcmUgY2hhcmFjdGVycyAtLT5cbiAgICA8bWF0LW9wdGlvbiBjbGFzcz1cImlvbi1wYWRkaW5nIHRleHQtaXRhbGljXCIgZGlzYWJsZWQ+XG4gICAgICA8aW9uLWxhYmVsPlxuICAgICAgICB7eyAnSU5GTy5QTEVBU0VfVFlQRV9NT1JFX0NIQVJBQ1RFUlMnIHwgdHJhbnNsYXRlOiB7IG1pbkxlbmd0aDogc3VnZ2VzdExlbmd0aFRocmVzaG9sZCB9IH19XG4gICAgICA8L2lvbi1sYWJlbD5cbiAgICA8L21hdC1vcHRpb24+XG4gIH1cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWF0RXJyb3JUZW1wbGF0ZT5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yLFttYXRFcnJvcl1cIj48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21hdEhpbnRUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cIm1hdC1tZGMtZm9ybS1maWVsZC1oaW50LXdyYXBwZXJcIj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludDpub3QoW2FsaWduPSdlbmQnXSksW21hdEhpbnRdXCI+PC9uZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJtYXQtbWRjLWZvcm0tZmllbGQtaGludC1zcGFjZXJcIj48L2Rpdj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtaGludFthbGlnbj0nZW5kJ11cIj48L25nLWNvbnRlbnQ+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|