@magic-xpa/gui 4.800.0-dev480.216 → 4.800.0-dev480.220
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/bundles/magic-xpa-gui.umd.js +2 -6
- package/bundles/magic-xpa-gui.umd.js.map +1 -1
- package/bundles/magic-xpa-gui.umd.min.js +1 -1
- package/bundles/magic-xpa-gui.umd.min.js.map +1 -1
- package/esm2015/src/management/gui/Property.js +1 -4
- package/fesm2015/magic-xpa-gui.js +0 -2
- package/fesm2015/magic-xpa-gui.js.map +1 -1
- package/package.json +2 -2
|
@@ -12,7 +12,6 @@ import { Commands } from '../../Commands';
|
|
|
12
12
|
import { CommandType, HtmlProperties } from '../../GuiEnums';
|
|
13
13
|
import { PropDefaults } from './PropDefaults';
|
|
14
14
|
import { GuiEnvironment } from '../../GuiEnvironment';
|
|
15
|
-
import { isNullOrUndefined } from "util";
|
|
16
15
|
export class CustomValidatorProp {
|
|
17
16
|
}
|
|
18
17
|
;
|
|
@@ -1312,8 +1311,6 @@ export class Property {
|
|
|
1312
1311
|
}
|
|
1313
1312
|
this.customValidatorValues.set(customPropertyKey, new CustomValidator(!InValid, errString));
|
|
1314
1313
|
}
|
|
1315
|
-
if (!isNullOrUndefined(this.customValidatorProperties))
|
|
1316
|
-
mgControl.RefreshDisplay();
|
|
1317
1314
|
}
|
|
1318
1315
|
});
|
|
1319
1316
|
}
|
|
@@ -1402,4 +1399,4 @@ export class Property {
|
|
|
1402
1399
|
}
|
|
1403
1400
|
Property._numericPropertyPic = null;
|
|
1404
1401
|
Property.UtilImeJpn = (UtilStrByteMode.isLocaleDefLangJPN() ? new UtilImeJpn() : null);
|
|
1405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZ3VpL1Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxTQUFTLEVBRVQsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGlC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Q0FBQyxvQkFBb0IsQ0FBQztZQUN4QyxLQUFLLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztZQUNyQyxLQUFLLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQztZQUNyQyxLQUFLLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztZQUM1QyxLQUFLLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztZQUN4QyxLQUFLLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUMxQyxLQUFLLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztZQUN0QyxLQUFLLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxLQUFLLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQztZQUN2QyxLQUFLLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUMxQyxLQUFLLGFBQWEsQ0FBQyxtQ0FBbUMsQ0FBQztZQUN2RCxLQUFLLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQztZQUNoRCxLQUFLLGFBQWEsQ0FBQywwQkFBMEIsQ0FBQztZQUM5QyxLQUFLLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztZQUMzQyxLQUFLLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztZQUN4QyxLQUFLLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztZQUN6QyxLQUFLLGFBQWEsQ0FBQyw2QkFBNkIsQ0FBQztZQUNqRCxLQUFLLGFBQWEsQ0FBQyw0QkFBNEIsQ0FBQztZQUNoRCxLQUFLLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUMxQyxLQUFLLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztZQUMzQyxLQUFLLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztZQUMzQyxLQUFLLGFBQWEsQ0FBQyx5QkFBeUIsQ0FBQztZQUM3QyxLQUFLLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQztZQUMxQyxLQUFLLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQztZQUMzQyxLQUFLLGFBQWEsQ0FBQyw4QkFBOEIsQ0FBQztZQUNsRCxLQUFLLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztZQUN4QyxLQUFLLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQztZQUM1QyxLQUFLLGFBQWEsQ0FBQyxzQkFB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LGFBQWEsQ0FBQyxhQUFhLENBQUM7WUFDakMsS0FBSyxhQUFhLENBQUMsaUJBQWlCLENBQUM7WUFDckMsS0FBSyxhQUFhLENBQUMsa0JBQWtCLENBQUM7WUFDdEMsS0FBSyxhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDNUMsS0FBSyxhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDNUMsS0FBSyxhQUFhLENBQUMsOEJBQThCLENBQUM7WUFDbEQsS0FBSyxhQUFhLENBQUMsbUNBQW1DLENBQUM7WUFDdkQsS0FBSyxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDeEMsS0FBSyxhQUFhLENBQUMsc0JBQXNCLENBQUM7WUFDMUMsS0FBSyxhQUFhLENBQUMsc0JBQXNCLENBQUM7WUFDMUMsS0FBSyxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDeEMsS0FBSyxhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDNUMsS0FBSyxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDeEMsS0FBSyxhQUFhLENBQUMsMkJBQTJCLENBQUM7WUFDL0MsS0FBSyxhQUFhLENBQUMsNkJBQTZCLENBQUM7WUFDakQsS0FBSyxhQUFhLENBQUMsNEJBQTRCLENBQUM7WUFDaEQsS0FBSyxhQUFhLENBQUMsdUJBQXVCLENBQUM7WUFDM0MsS0FBSyxhQUFhLENBQUMscUJBQXFCLENBQUM7WUFDekMsS0FBSyxhQUFhLENBQUMsc0JBQXNCLENBQUM7WUFDMUMsS0FBSyxhQUFhLENBQUMseUJBQXlCLENBQUM7WUFDN0MsS0FBSyxhQUFhLENBQUMsc0JBQXNCLENBQUM7WUFDMUMsS0FBSyxhQUFhLENBQUMsa0NBQWtDLENBQUM7WUFDdEQsS0FBSyxhQUFhLENBQUMsd0JBQXdCLENBQUM7WUFDNUMsS0FBSyxhQUFhLENBQUMsb0JBQW9CLENBQUM7WUFDeEMsS0FBSyxhQUFhLENBQUMsdUNBQXVDLENBQUM7WUFDM0QsS0FBSyxhQUFhLENBQUMsMEJBQTBCLENBQUM7WUFDOUMsS0FBSyxhQUFhLENBQUMsdUJBQXVCLENBQUM7WUFDM0MsS0FBSyxhQUFhLENBQUMs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QUk7WUFDaEIsSUFBSSxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTdELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQVcsRUFBRSxLQUFhO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7QUE5NURjLDRCQUFtQixHQUFRLElBQUksQ0FBQztBQWlCeEMsbUJBQVUsR0FBZSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25FeGNlcHRpb24sXHJcbiAgRGVidWcsXHJcbiAgSW50MzIsXHJcbiAgTGlzdCxcclxuICBOTnVtYmVyLFxyXG4gIE5TdHJpbmcsXHJcbiAgUmVmUGFyYW0sXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgQ3RybEJ1dHRvblR5cGVHdWksXHJcbiAgTG9nZ2VyX0xvZ0xldmVscyxcclxuICBNZ0NvbnRyb2xUeXBlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RyVXRpbCxcclxuICBVdGlsSW1lSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYTUxDb25zdGFudHMsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIgfSBmcm9tICcuLi90YXNrcy9UYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyJztcclxuaW1wb3J0IHsgUHJvcFBhcmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2d1aS9Qcm9wUGFyZW50SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUElDIH0gZnJvbSAnLi9QSUMnO1xyXG5pbXBvcnQgeyBUYXNrRGVmaW5pdGlvbklkIH0gZnJvbSAnLi4vdGFza3MvVGFza0RlZmluaXRpb25JZCc7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IEd1aUNvbnN0YW50cyB9IGZyb20gJy4uLy4uL0d1aUNvbnN0YW50cyc7XHJcbmltcG9ydCB7IFByb3BJbnRlcmZhY2UgfSBmcm9tICcuL1Byb3BJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyIH0gZnJvbSAnLi9HdWlDb250cm9sUHJvcGVydHlBZGFwdGVyJztcclxuaW1wb3J0IHsgRGlzcGxheUNvbnZlcnRvciB9IGZyb20gJy4vRGlzcGxheUNvbnZlcnRvcic7XHJcbmltcG9ydCB7IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIgfSBmcm9tICcuL0d1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXInO1xyXG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJy4uLy4uL0NvbW1hbmRzJztcclxuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIEh0bWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vR3VpRW51bXMnO1xyXG5pbXBvcnQgeyBHdWlUYXNrQmFzZSB9IGZyb20gJy4uL3Rhc2tzL0d1aVRhc2tCYXNlJztcclxuaW1wb3J0IHsgUHJvcERlZmF1bHRzIH0gZnJvbSAnLi9Qcm9wRGVmYXVsdHMnO1xyXG5pbXBvcnQgeyBUb29sVGlwSGVscCB9IGZyb20gJy4vSGVscHMnO1xyXG5pbXBvcnQgeyBHdWlFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuaW1wb3J0IHsgTWdDb250cm9sQmFzZSB9IGZyb20gJy4vTWdDb250cm9sQmFzZSc7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSBcInV0aWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21WYWxpZGF0b3JQcm9wIHtcclxuICBfZXhwOiBudW1iZXI7XHJcbiAgX2Vycm9yTWVzc2FnZUV4cDogbnVtYmVyO1xyXG4gIF9lcnJvck1lc3NhZ2U6IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21WYWxpZGF0b3Ige1xyXG4gIF92YWxpZDogYm9vbGVhbjtcclxuICBfZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZhbGlkOiBib29sZWFuLCBlcnJNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3ZhbGlkID0gdmFsaWQ7XHJcbiAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBlcnJNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVmFsaWQoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuX3ZhbGlkO31cclxuICBwdWJsaWMgZ2V0RXJyTWVzc2FnZSgpOiBzdHJpbmcge3JldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7fVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFByb3BlcnR5IG9iamVjdCBvZiBjb250cm9sLCBmb3JtIG9yIHRhc2suXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eSB7XHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IEludDMyLk1pblZhbHVlO1xyXG4gIHByaXZhdGUgX2RhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gIHByaXZhdGUgX3ZhbDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9waWM6IFBJQyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZXhwSWQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlID0gbnVsbDsgLy8gYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBvYmplY3QgKENvbnRyb2wsIEZvcm0sIEd1aVRhc2tCYXNlKVxyXG4gIHByaXZhdGUgX3BhcmVudFR5cGU6IHN0cmluZyA9IG51bGw7IC8vIENvbnRyb2x8Rm9ybXxHdWlUYXNrQmFzZVxyXG4gIHByaXZhdGUgX3ByZXZWYWx1ZXM6IExpc3Q8c3RyaW5nPiA9IG51bGw7IC8vIHJldmVyZW5jZSB0byBwcm9wZXJ0eSB2YWx1ZXMgaW4gYSB0YWJsZVxyXG4gIHByaXZhdGUgX29yZ1ZhbHVlOiBzdHJpbmcgPSBudWxsOyAvLyByZXZlcmVuY2UgdG8gcHJvcGVydHkgdmFsdWVzIGluIGEgdGFibGVcclxuICBwcml2YXRlIHN0YXRpYyBfbnVtZXJpY1Byb3BlcnR5UGljOiBQSUMgPSBudWxsO1xyXG4gIHByaXZhdGUgX3Rhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQgPSBudWxsOyAvLyB0YXNrIGRlZmluaXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eS5cclxuICAvLyBzdHVkaW9WYWx1ZSBmb3Igb2ZmbGluZSBzdGF0ZVxyXG4gIC8vIFRvRG86IGNvbW1lbnQgc2F5cyB0aGF0IGl0IGlzIGZvciBcIk9mZmxpbmUgc3RhdGVcIi4gU28sIGRvIHdlIG5lZWQgaXQgaW5XZWJDbGllbnQ/XHJcbiAgU3R1ZGlvVmFsdWU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZXhwQWxyZWFkeUNvbXB1dGVkT25jZTogYm9vbGVhbiA9IGZhbHNlOyAvLyB0aGUgZXhwcmVzc2lvbiBpcyBhbHJlYWR5IGNvbXB1dGVkIG9uY2VcclxuXHJcbiAgLy8gZm9yIHdlYiBjbGllbnQgOlxyXG4gIC8vIHNhdmUgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIGJ5IHRoZSB1c2VyXHJcbiAgcHJpdmF0ZSBjdXN0b21Qcm9wZXJ0aWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgY3VzdG9tUHJvcGVydGllc1ZhbHVlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgLy8gZm9yIHdlYiBjbGllbnQgOlxyXG4gIC8vIHNhdmUgdGhlIGN1c3RvbSB2YWxpZGF0b3JzIHRoYXQgZGVmaW5lIGJ5IHRoZSB1c2VyXHJcbiAgcHJpdmF0ZSBjdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzOiBNYXA8c3RyaW5nLCBDdXN0b21WYWxpZGF0b3JQcm9wPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGN1c3RvbVZhbGlkYXRvclZhbHVlczogTWFwPHN0cmluZywgQ3VzdG9tVmFsaWRhdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgc3RhdGljIFV0aWxJbWVKcG46IFV0aWxJbWVKcG4gPSAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpID8gbmV3IFV0aWxJbWVKcG4oKSA6IG51bGwpOyAvLyBKUE46IElNRSBzdXBwb3J0XHJcblxyXG4gIC8vIHRhc2sgZGVmaW5pdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3BlcnR5LlxyXG4gIGdldCBUYXNrRGVmaW5pdGlvbklkKCk6IFRhc2tEZWZpbml0aW9uSWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcsIHZhbDogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3RvcihjSWQ/OiBudW1iZXIsIGNQYXJlbnRPYmo/OiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlPzogc3RyaW5nLCB2YWw/OiBzdHJpbmcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY0lkLCBjUGFyZW50T2JqLCBwYXJUeXBlKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKGNJZCwgY1BhcmVudE9iaiwgcGFyVHlwZSwgdmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXZWYWx1ZXMgPSBuZXcgTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgdGhpcy5zZXRJZChjSWQpO1xyXG4gICAgdGhpcy5fcGFyZW50T2JqID0gY1BhcmVudE9iajtcclxuICAgIHRoaXMuX3BhcmVudFR5cGUgPSBwYXJUeXBlO1xyXG4gICAgdGhpcy5zZXREYXRhVHlwZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8yKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY0lkLCBjUGFyZW50T2JqLCBwYXJUeXBlKTtcclxuICAgIHRoaXMuc2V0VmFsdWUodmFsKTtcclxuICAgIHRoaXMuc2V0T3JnVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGlkIG9mIHRoaXMgcHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc2V0SWQoY0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lkID0gY0lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE5lZWQgcGFydCBpbnB1dCBTdHJpbmcgdG8gcmVsZXZhbnQgZm9yIHRoZSBjbGFzcyBkYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFJlZlwiPnJlZmVyZW5jZSB0byBwYXJlbnQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+PC9wYXJhbT5cclxuICBmaWxsRGF0YShwYXJlbnRSZWY6IFByb3BQYXJlbnRJbnRlcmZhY2UsIHBhclR5cGU6IHN0cmluZywgcGFyc2VyOiBYbWxQYXJzZXIpIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoXCI+XCIsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudE9iaiA9PT0gbnVsbCAmJiBwYXJlbnRSZWYgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcGFyZW50T2JqID0gcGFyZW50UmVmO1xyXG4gICAgICB0aGlzLl9wYXJlbnRUeXBlID0gcGFyVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihYTUxDb25zdGFudHMuTUdfVEFHX1BST1ApICsgWE1MQ29uc3RhbnRzLk1HX1RBR19QUk9QLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIGlmIChFdmVudHMuU2hvdWxkTG9nKExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpKSB7XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRGV2VG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJJbiBQcm9wLkZpbGxEYXRhKCk6IHswfVwiLCB0b2tlbnNWZWN0b3IudG9TdHJpbmcoKSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IpO1xyXG5cclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRS5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gZGVhbCB3aXRoIGludGVybmFsIHRhZ3NcclxuICAgICAgdGhpcy5Jbml0SW5uZXJPYmplY3RzKHBhcnNlcik7XHJcblxyXG4gICAgICAvLyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhpcyB0eXBlcyBuZWVkIHNldCBwYXJhbWV0ZXJzIHRvIHRoZSBwYXJlbnQgLSBDT05UUk9MIChpbiB0aGlzIGNhc2UpXHJcbiAgICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTClcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xBdHRyaWJ1dGVzKCk7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNKVxyXG4gICAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuU2V0U2l6ZSgxKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coXCJJbiBQcm9wZXJ0eS5GaWxsRGF0YSgpOiBPdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdElubmVyT2JqZWN0cyh4bWxQYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IG5leHRUYWc6IHN0cmluZyA9IHhtbFBhcnNlci5nZXROZXh0VGFnKCk7XHJcblxyXG4gICAgaWYgKG5leHRUYWcgPT09IFhNTENvbnN0YW50cy5NR19UQUdfVEFTS0RFRklOSVRJT05JRF9FTlRSWSkge1xyXG4gICAgICBsZXQgeG1sQnVmZmVyOiBzdHJpbmcgPSB4bWxQYXJzZXIuUmVhZFRvRW5kT2ZDdXJyZW50RWxlbWVudCgpO1xyXG4gICAgICB0aGlzLkluaXRUYXNrRGVmaW5pdGlvbklkKHhtbEJ1ZmZlcik7XHJcblxyXG4gICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0geG1sUGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfUFJPUCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgIHhtbFBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIChYTUxDb25zdGFudHMuTUdfVEFHX1BST1AgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFKS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2UgaW5pdGlhbGl6YXRpb24gb2YgcHJpdmF0ZSBlbGVtZW50cyBieSBmb3VuZCB0b2tlbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9rZW5zVmVjdG9yXCI+Zm91bmQgdG9rZW5zLCB3aGljaCBjb25zaXN0IGF0dHJpYnV0ZS92YWx1ZSBvZiBldmVyeSBmb3VuZCBlbGVtZW50IDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lEOlxyXG4gICAgICAgICAgdGhpcy5zZXRJZChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGFUeXBlKCk7IC8vIFRoZSAnbmFtZScgbWVtYmVyIG11c3QgYmUgZm91bmQgaW4gdGhpcyBwb2ludFxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9TVFVESU9fVkFMVUU6XHJcbiAgICAgICAgICB0aGlzLlN0dWRpb1ZhbHVlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVkFMVUU6XHJcbiAgICAgICAgICBpZiAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9QUk9QRVJUSUVTKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSW5pdEN1c3RvbVByb3BlcnRpZXMoWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9WQUxJREFUT1JTKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSW5pdEN1c3RvbVZhbGlkYXRpb25Qcm9wZXJ0aWVzKFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbCA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAgIHRoaXMuX29yZ1ZhbHVlID0gdGhpcy5fdmFsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9FWFA6XHJcbiAgICAgICAgICB0aGlzLl9leHBJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2V4cElkID4gMCAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9PTFRJUClcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhVHlwZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOlxyXG4gICAgICAgICAgLy8gTmFtZSBpcyBvbmx5IHNlcmlhbGl6ZWQgZm9yIGRlYnVnIHZlcnNpb24gLlxyXG4gICAgICAgICAgLy8gVG8gYXZvaWQgZXhjZXB0aW9ucywgYWRkIGEgYmxhbmsgY2FzZSBmb3IgaXRcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfQ1RMX0lEWDpcclxuICAgICAgICAgIHRoaXMuX3Rhc2tEZWZpbml0aW9uSWQuQ3RsSW5kZXggPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUFJPR1JBTV9JU046XHJcbiAgICAgICAgICB0aGlzLl90YXNrRGVmaW5pdGlvbklkLlByb2dyYW1Jc24gPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIFByb3BlcnR5IGNsYXNzLiBJbnNlcnQgY2FzZSB0byBQcm9wZXJ0eS5pbml0RWxlbWVudHMgZm9yIHswfVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgY29tcHV0ZSBpbiB0aGUgc2VydmVyICwgdGhlbiBzZXQgX2V4cEFscmVhZHlDb21wdXRlZE9uY2VcclxuICAgICAgaWYgKHRoaXMuSXNDb21wdXRlZE9uY2VPblNlcnZlcigpKVxyXG4gICAgICAgIHRoaXMuX2V4cEFscmVhZHlDb21wdXRlZE9uY2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbml0IHRoZSBjdXN0b20gcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBJbml0Q3VzdG9tUHJvcGVydGllcyhjdXN0b21Qcm9wcnRpZXNTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oSlNPTi5wYXJzZShjdXN0b21Qcm9wcnRpZXNTdHIpKTtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRPYmouSXNGaXJzdFJlZnJlc2hPZlByb3BzKCkpXHJcbiAgICAgIHRoaXMuU2V0Rmlyc3RWYWx1ZUZvckN1c3RvbVByb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIEluaXQgQ3VzdG9tVmFsaWRhdG9yXHJcbiAgcHJpdmF0ZSBJbml0Q3VzdG9tVmFsaWRhdG9yIChwYXJzZXIgOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gcGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgIHRleHQgPSB0ZXh0LnN1YnN0cih0ZXh0LmluZGV4T2YoWE1MQ29uc3RhbnRzLk1HX1RBR19DVVNUT01fVkFMSURBVE9SKSArIFhNTENvbnN0YW50cy5NR19UQUdfQ1VTVE9NX1ZBTElEQVRPUi5sZW5ndGgpO1xyXG4gICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2Vucyh0ZXh0LCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG5cclxuICAgIGxldCBjID0gbmV3IEN1c3RvbVZhbGlkYXRvclByb3AoKTtcclxuICAgIGxldCBrZXk7XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbnMubGVuZ3RoOyBqICs9IDIpXHJcbiAgICB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IHRva2Vucy5nZXRfSXRlbShqKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSB0b2tlbnMuZ2V0X0l0ZW0oaiArIDEpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VYUDpcclxuICAgICAgICAgIGMuX2V4cCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOlxyXG4gICAgICAgICAga2V5ID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRVJST1JfRVhQOlxyXG4gICAgICAgICAgYy5fZXJyb3JNZXNzYWdlRXhwID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VSUk9SOlxyXG4gICAgICAgICAgYy5fZXJyb3JNZXNzYWdlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzLnNldCAoa2V5LCBjKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdCB0aGUgY3VzdG9tIHZhbGlkYXRpb24gcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBJbml0Q3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoY3VzdG9tUHJvcHJ0aWVzU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgcGFyc2VyID0gbmV3IFhtbFBhcnNlcihjdXN0b21Qcm9wcnRpZXNTdHIpO1xyXG4gICAgbGV0IGN1cnJUYWdOYW1lID0gcGFyc2VyLmdldE5leHRUYWcoKTtcclxuICAgIHdoaWxlIChjdXJyVGFnTmFtZSAhPSBudWxsKVxyXG4gICAge1xyXG4gICAgICBzd2l0Y2ggKGN1cnJUYWdOYW1lKVxyXG4gICAgICB7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX0NVU1RPTV9WQUxJREFUT1JTOlxyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzID0gbmV3IE1hcDxzdHJpbmcsIEN1c3RvbVZhbGlkYXRvclByb3A+KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfQ1VTVE9NX1ZBTElEQVRPUjpcclxuICAgICAgICAgIHRoaXMuSW5pdEN1c3RvbVZhbGlkYXRvciAocGFyc2VyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjdXJyVGFnTmFtZSA9IHBhcnNlci5nZXROZXh0VGFnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudE9iai5Jc0ZpcnN0UmVmcmVzaE9mUHJvcHMoKSlcclxuICAgICAgdGhpcy5TZXRGaXJzdFZhbHVlRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIFNldEZpcnN0VmFsdWVGb3JDdXN0b21WYWxpZGF0aW9uUHJvcGVydGllcygpOiB2b2lkIHtcclxuXHJcbiAgICAgIGZvciAobGV0IGN1c3RvbVByb3BlcnR5IG9mIHRoaXMuY3VzdG9tVmFsaWRhdG9yUHJvcGVydGllcy5rZXlzKCkpIHtcclxuICAgICAgbGV0IGMgOiBDdXN0b21WYWxpZGF0b3JQcm9wID0gdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzLmdldChjdXN0b21Qcm9wZXJ0eSk7XHJcbiAgICAgIHRoaXMuY3VzdG9tVmFsaWRhdG9yVmFsdWVzLnNldCg8c3RyaW5nPmN1c3RvbVByb3BlcnR5LCBuZXcgQ3VzdG9tVmFsaWRhdG9yKHRydWUsIFwiXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjcmVhdGUgZnJvbSB0aGUgdmFsdWUgc3RyaW5nIGFuZCBzYXZlIGl0IGluIHZhbCAmIG9yZ1ZhbHVlXHJcbiAgICB0aGlzLl92YWwgPSB0aGlzLkdldEFycmF5VmFsdWVzRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKVxyXG4gICAgdGhpcy5fb3JnVmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldEFycmF5VmFsdWVzRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKTogc3RyaW5ne1xyXG4gICAgbGV0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5jdXN0b21WYWxpZGF0b3JWYWx1ZXMudmFsdWVzKCkpO1xyXG4gICAgbGV0IHZhbHVlc1N0ciA9IEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XHJcbiAgICByZXR1cm4gdmFsdWVzU3RyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBHZXRBcnJheVZhbHVlc0ZvckN1c3RvbVByb3BlcnRpZXMoKTogc3RyaW5ne1xyXG4gICAgbGV0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5jdXN0b21Qcm9wZXJ0aWVzVmFsdWVzLnZhbHVlcygpKTtcclxuICAgIGxldCB2YWx1ZXNTdHIgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZXMpO1xyXG4gICAgcmV0dXJuIHZhbHVlc1N0cjtcclxufVxyXG5cclxuICBwcml2YXRlIFNldEZpcnN0VmFsdWVGb3JDdXN0b21Qcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG5cclxuICAgIGZvciAobGV0IGN1c3RvbVByb3BlcnR5IG9mIHRoaXMuY3VzdG9tUHJvcGVydGllcy5rZXlzKCkpXHJcbiAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1ZhbHVlcy5zZXQoPHN0cmluZz5jdXN0b21Qcm9wZXJ0eSwgXCJcIik7XHJcblxyXG4gICAgLy8gY3JlYXRlIGZyb20gdGhlIHZhbHVlIHN0cmluZyBhbmQgc2F2ZSBpdCBpbiB2YWwgJiBvcmdWYWx1ZVxyXG4gICAgdGhpcy5fdmFsID0gdGhpcy5HZXRBcnJheVZhbHVlc0ZvckN1c3RvbVByb3BlcnRpZXMoKVxyXG4gICAgdGhpcy5fb3JnVmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlc2V0IF9leHBBbHJlYWR5Q29tcHV0ZWRPbmNlIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFJlc2V0Q29tcHV0ZWRPbmNlRmxhZygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4cEFscmVhZHlDb21wdXRlZE9uY2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdFRhc2tEZWZpbml0aW9uSWQoeG1sQnVmZmVyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCB0YXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyOiBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyID0gbmV3IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIodGhpcy5TZXRUYXNrRGVmaW5pdGlvbklkKTtcclxuICAgIHRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIucGFyc2UoeG1sQnVmZmVyKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGxiYWNrIGZvciBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyXHJcbiAgU2V0VGFza0RlZmluaXRpb25JZCh0YXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrRGVmaW5pdGlvbklkID0gdGFza0RlZmluaXRpb25JZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YVR5cGUoKTogdm9pZCB7XHJcbiAgICBsZXQgY29tcElkeDogbnVtYmVyID0gdGhpcy5fcGFyZW50T2JqLmdldENvbXBJZHgoKTtcclxuXHJcbiAgICB0aGlzLl9waWMgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9pZCA9PT0gSW50MzIuTWluVmFsdWUpIHtcclxuICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJUbyBmaWxsIGRhdGFUeXBlIG1lbWJlciBpbiBQcm9wZXJ0eS5GaWxsRGF0YVR5cGUgbXVzdCBpZCE9ezB9XCIsIEludDMyLk1pblZhbHVlKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVElUTEVfQkFSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVCUkVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01PRElGWV9JTl9RVUVSWTpcclxuXHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NZU1RFTV9NRU5VOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VORF9DT05ESVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX01PRElGWTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19DUkVBVEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfREVMRVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1FVRVJZOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0xPQ0FURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19TT1JUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19BTExPV19JTkRFWDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19MT0NBVEVfSU5fUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09ORklSTV9VUERBVEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9SQ0VfU1VGRklYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUkNFX0RFTEVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NVVNUX0lOUFVUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01PRElGSUFCTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FTkFCTEVEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTkZJUk1fQ0FOQ0VMOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFUEVBVEFCTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSElHSExJR0hUSU5HOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBU1NXT1JEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JU19DQUNIRUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJFTE9BRF9WSUVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORV9WRVJUSUNBTF9TQ1JPTEw6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX0FMTE9XX0NSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0NPTF9SRVNJWkU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUkVPUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TSE9XX0xJTkVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NPUlRfQ09MVU1OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTF9BTExPV19GSUxURVJJTkc6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRElTUExBWV9TVEFUVVNfQkFSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fUkVGUkVTSDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QQVJLX09OX0NMSUNLOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NIT1dfRlVMTF9ST1c6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBQ0tfU0VMRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NIT1dfQlVUVE9OUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MSU5FU19BVF9ST09UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0VNUFRZX0RBVEFWSUVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX0RJVklERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElORV9ESVZJREVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RIUkVFX1NUQVRFUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRUZSRVNIX1dIRU5fSElEREVOOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX09QVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRBSU5fRk9DVVM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJJTlRfREFUQTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DTE9TRV9UQVNLU19CWV9NRElfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBVklFV0NPTlRST0w6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX09QRU5fVEFTS19XSU5ET1c6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX0FMTE9XX0VWRU5UUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfSU5ERVhfT1BUSU1JWkFUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19SQU5HRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19QT1NJVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfU1FMX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0JFRk9SRV85MDBfVkVSU0lPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GSUxMX1dJRFRIOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJX0NPTFVNTl9ESVNQTEFZOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lTX1JPVVRFUl9PVVRMRVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREVGQVVMVF9PVVRMRVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VSVkVSX1JFQURfQUhFQUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQVVUT19DT01QTEVURV9NT0RFX1dDOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JTUFHRV9GSUxFTkFNRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FVkFMX0VORF9DT05ESVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRlJBTUVfTkFNRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RSQVNBQ1RJT05fQkVHSU46XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1RSQU5TQUNUSU9OX01PREU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0FMTFBBUEVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FUVFJJQlVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUklHR0VSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9NT0RFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfSUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCQklOR19DWUNMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QQVJBTUVURVJTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lNQUdFX0xJU1RfSU5ERVhFUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xBWUVSU19MSVNUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX09CSkVDVF9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFQUxfT0JKRUNUX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQVZJRVdDT05UUk9MX0ZJRUxEUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfUkFOR0VfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX0xPQ0FURV9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfUE9TSVRJT05fVVNBR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19NT0RFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9QUk9QRVJUSUVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9WQUxJREFUT1JTOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX1RJVExFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfTElTVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFOR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FERElUSU9OQUxfSU5GT1JNQVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ISU5UOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9VT006XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSE9SX0ZBQzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WRVJfRkFDOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQl9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XQUxMUEFQRVJfU1RZTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU5ERVg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElOS19GSUVMRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX0ZJRUxEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BVTExET1dOX01FTlU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0lORE9XX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfU1RZTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQVVUT19GSVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFJU0VfQVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRVhQQU5EX1dJTkRPVzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xJTkVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NIT0lDRV9DT0xVTU5TOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NUWUxFXzNEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPTlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTEFZRVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0lEVEg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVElUTEVfSEVJR0hUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTE9SOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xFRlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9QOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RPT0xUSVA6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVMUF9TQ1I6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElORVNfSU5fVEFCTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUSU9OX1JPV1M6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSE9SSVpPTlRBTF9BTElHTk1FTlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX1dPUkRXUkFQX1NDUk9MTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ST1dfSEVJR0hUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1dJTkRPV19XSURUSDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NQUlOX0RJU1BMQVk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBTlNMQVRPUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRVNFVF9TVFlMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRV9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XRURfRElSRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JPV19ISUdITElHSFRfU1RZTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVkVSVElDQUxfQUxJR05NRU5UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQkJJTkdfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1RBVElDX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQlVUVE9OX1NUWUxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xPQURfSU1BR0VfRlJPTTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TVUJGT1JNX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQk9UVE9NX1BPU0lUSU9OX0lOVEVSVkFMOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVElPTl9NT0RFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BSR1RTS19OVU06XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEVSU0lTVEVOVF9GT1JNX1NUQVRFX1ZFUlNJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0NST0xMX0JBUl9USFVNQjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CSU5ESU5HX0xFVkVMOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTk5FQ1RFRF9aT09NX0NPTlRST0w6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU06XHJcbiAgICAgICAgaWYgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UT09MVElQICYmIHRoaXMuX2V4cElkID4gMClcclxuICAgICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIC8vIHBpYyB3aWxsIGJlIHNldCBhY2NvcmRpbmcgdG8gZXhwIGxlbmd0aFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZGF0YVR5cGUgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgICBpZiAoUHJvcGVydHkuX251bWVyaWNQcm9wZXJ0eVBpYyA9PSBudWxsKVxyXG4gICAgICAgICAgICBQcm9wZXJ0eS5fbnVtZXJpY1Byb3BlcnR5UGljID0gbmV3IFBJQyhcIk42XCIsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgY29tcElkeCk7XHJcbiAgICAgICAgICB0aGlzLl9waWMgPSBQcm9wZXJ0eS5fbnVtZXJpY1Byb3BlcnR5UGljO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRVUk5fQUNUSU9OOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgdGhpcy5fZGF0YVR5cGUgPSAoPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmopLkRhdGFUeXBlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BPUF9VUDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUklFTlRBVElPTl9MT0NLOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOVEVSX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FWElUX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQVZJR0FUSU9OX0RSQVdFUl9NRU5VOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FDVElPTl9CQVJfTUVOVTpcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfT1BFTl9QSUNLRVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfT1BFTl9FRElUX0RJQUxPRzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ERUZBVUxUX0FMSUdOTUVOVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9LRVlCT0FSRF9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0tFWUJPQVJEX1JFVFVSTl9LRVk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfU1VHR0VTVElPTlM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTU9CSUxFX0lNQUdFX0xJU1RfRklMRV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NXSVBFX1JFRlJFU0g6XHJcbiAgICAgICAgLy8gTm8gaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUgYXMgdGhlIHByb3BlcnRpZXMgYXJlIHZhbGlkIGZvciBtb2JpbGUgYXMgZm9yIG5vdy5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcImluIFByb3BlcnR5LnNldERhdGFUeXBlKCkgbm8gY2FzZSBmb3I6IHswfVwiLCB0aGlzLl9pZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhdHRyaWJ1dGVzIG9mIGEgdGhlIHBhcmVudCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHNldENvbnRyb2xBdHRyaWJ1dGVzKCkge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudE9iaiA9PSBudWxsIHx8IHRoaXMuX3BhcmVudFR5cGUgIT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiaW4gUHJvcGVydHkuc2V0Q29udHJvbEF0dHJpYnV0ZXMoKSB0aGVyZSBpcyBubyBwYXJlbnQgb3IgdGhlIHBhcmVudCBpcyBub3QgYSBjb250cm9sXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudENvbnRyb2wgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgIHN3aXRjaCAodGhpcy5faWQpIHtcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX05BTUU6XHJcbiAgICAgICAgcGFyZW50Q29udHJvbC5OYW1lID0gdGhpcy5fdmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVFRSSUJVVEU6XHJcbiAgICAgICAgcGFyZW50Q29udHJvbC5EYXRhVHlwZSA9IDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3ZhbFswXTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUOlxyXG4gICAgICAgIHBhcmVudENvbnRyb2wuc2V0UGljU3RyKHRoaXMuX3ZhbCwgdGhpcy5fZXhwSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SQU5HRTpcclxuICAgICAgICBwYXJlbnRDb250cm9sLnNldFJhbmdlKHRoaXMuX3ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cElkID4gMClcclxuICAgICAgICAgIHBhcmVudENvbnRyb2wuc2V0VmFsRXhwKHRoaXMuX2V4cElkKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl92YWwgIT0gbnVsbClcclxuICAgICAgICAgIHBhcmVudENvbnRyb2wuc2V0RmllbGQodGhpcy5fdmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQlVUVE9OX1NUWUxFOlxyXG4gICAgICAgIGlmICh0aGlzLl92YWwgIT0gbnVsbClcclxuICAgICAgICAgIHBhcmVudENvbnRyb2wuQnV0dG9uU3R5bGUgPSA8Q3RybEJ1dHRvblR5cGVHdWk+dGhpcy5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQVlFUjpcclxuICAgICAgICBpZiAodGhpcy5fdmFsICE9IG51bGwpXHJcbiAgICAgICAgICBwYXJlbnRDb250cm9sLkxheWVyID0gdGhpcy5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG9iamVjdCBvZiB0aGlzIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQYXJlbnRPYmooKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnRPYmo7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgcGFyZW50IG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaWQgb2YgdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRJRCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFuZCB0YWtlIGNhcmUgb2YgdGhlIHByZXNlbnRhdGlvbiB0aGUgdmFsdWUgbXVzdCBiZSBpbiBhIG1hZ2ljIGludGVybmFsXHJcbiAgLy8vICAgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nVmFsXCI+dGhlIG5ldyB2YWx1ZTwvcGFyYW0+XHJcbiAgc2V0VmFsdWUobWdWYWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGNvbXBJZHg6IG51bWJlciA9IHRoaXMuX3BhcmVudE9iai5nZXRDb21wSWR4KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBIHx8IHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OT0RFX0lEIHx8IHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OT0RFX1BBUkVOVElEKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX2RhdGFUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpXHJcbiAgICAgIHRoaXMuc2V0RGF0YVR5cGUoKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2RhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIGlmIChtZ1ZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgbWdWYWwgPSBcIkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIjtcclxuICAgICAgICB0aGlzLl92YWwgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3AobWdWYWwsIFwiXCIsIHRoaXMuX3BpYywgZmFsc2UsIGNvbXBJZHgsIGZhbHNlKS50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICB0aGlzLl92YWwgPSBtZ1ZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkuc2V0VmFsdWUoKSBpbGxlZ2FsIGRhdGEgdHlwZTogXCIgKyB0aGlzLl9kYXRhVHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBhbiBpbnQgdmFsdWUgZGlyZWN0bHksIGFzIGlzIGRvbmUgd2hlbiBpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIFNldFZhbHVlKHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWwgPSBTdHJpbmcodmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdGFrZSBjYXJlIG9mIHRoZSBwcmVzZW50YXRpb24gdGhlIHZhbHVlIG11c3QgYmUgaW4gYSBtYWdpYyBpbnRlcm5hbCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldE9yZ1ZhbHVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3JnVmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBTZXRTdHVkaW9WYWx1ZUFzT3JnVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcmdWYWx1ZSA9IHRoaXMuU3R1ZGlvVmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgdGhlIGZvcm0gcmVsYXRlZCB0byB0aGlzIHByb3BlcnR5LiBJZiB0aGUgcHJvcGVydHkncyBwYXJlbnQgaXMgdGhlIGZvcm0gdGhlbiByZXR1cm4gaXQsXHJcbiAgLy8vICAgb3RoZXJ3aXNlLCBpZiB0aGUgcHJvcGVydHkncyBwYXJlbnQgaXMgYSBjb250cm9sIHRoZW4gcmV0dXJuIHRoZSBmb3JtIHRvIHdoaWNoIHRoaXMgY29udHJvbCBiZWxvbmdzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBNZ0Zvcm08L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGb3JtKCk6IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIge1xyXG4gICAgbGV0IGZvcm06IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSlcclxuICAgICAgZm9ybSA9IDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgZWxzZSBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpXHJcbiAgICAgIGZvcm0gPSAoPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmopLmdldEZvcm0oKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHRhc2sgYnkgdGhlIHBhcmVudCBvYmplY3Q8L3JldHVybnM+XHJcbiAgR2V0VGFza0J5UGFyZW50T2JqZWN0KCk6IEd1aVRhc2tCYXNlIHtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNKVxyXG4gICAgICB0YXNrID0gKDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5nZXRUYXNrKCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTClcclxuICAgICAgdGFzayA9ICg8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iaikuZ2V0Rm9ybSgpLmdldFRhc2soKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9UQVNLKVxyXG4gICAgICB0YXNrID0gPEd1aVRhc2tCYXNlPnRoaXMuX3BhcmVudE9iajtcclxuXHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZWZyZXNoIHRoZSBkaXNwbGF5IGZvciBjb250cm9sIHByb3BlcnRpZXMgYW5kIGZvcm0gcHJvcGVydGllcyBvbmx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvcmNlUmVmcmVzaFwiPmlmIHRydWUgdGhlbiByZWZyZXNoIGlzIGZvcmNlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmV2aW91cyB2YWx1ZTwvcGFyYW0+XHJcbiAgYXN5bmMgUmVmcmVzaERpc3BsYXkoZm9yY2VSZWZyZXNoOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5V2l0aEN1cnJlbnRMaW5lKGZvcmNlUmVmcmVzaCwgSW50MzIuTWluVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHRoZSBwcm9wZXJ0eSBuZWVkIHRvIGJlIHNraXAgZnJvbSB0aGUgcmVmcmVzaCBwcm9wZXJ0aWVzLiBmb3IgYSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2tpcFJlZnJlc2hDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBtZ0NvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVCUkVXOlxyXG4gICAgICAgIGlmIChtZ0NvbnRyb2wuaXNUYWJsZUNvbnRyb2woKSlcclxuICAgICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX05PREVfSUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTk9ERV9QQVJFTlRJRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0hJR0hMSUdIVElORzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NVVNUX0lOUFVUOlxyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9IRUxQX1NDUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRUxFQ1RfUFJPR1JBTTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRUxFQ1RfTU9ERTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV0VEX0RJUkVDVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRVUk5fQUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FUVFJJQlVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVBFQVRBQkxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZSQU1FX05BTUU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJJR0dFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSVNfQ0FDSEVEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xBWUVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fRklUOlxyXG4gICAgICAvLyBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORV9WRVJUSUNBTF9TQ1JPTEw6XHJcbiAgICAgIC8vIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX1dPUkRXUkFQX1NDUk9MTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SQUlTRV9BVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRVNFVF9TVFlMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRV9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1dJTkRPV19XSURUSDpcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCQklOR19PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX1JFRlJFU0g6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSQU1FVEVSUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PQkpFQ1RfVFlQRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRBSU5fRk9DVVM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFQUxfT0JKRUNUX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQURESVRJT05BTF9JTkZPUk1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBVklFV0NPTlRST0w6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQVZJRVdDT05UUk9MX0ZJRUxEUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkdUU0tfTlVNOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lOREVYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfRklFTEQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElOS19GSUVMRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CRUZPUkVfOTAwX1ZFUlNJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkVGUkVTSF9XSEVOX0hJRERFTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRVJWRVJfUkVBRF9BSEVBRDpcclxuICAgICAgICBza2lwID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQlVUVE9OX1NUWUxFOlxyXG4gICAgICAgIGlmICghKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc1JhZGlvKCkpXHJcbiAgICAgICAgICBza2lwID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNraXA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdGhlIHByb3BlcnR5IG5lZWQgdG8gYmUgc2tpcCBmcm9tIHRoZSByZWZyZXNoIHByb3BlcnRpZXMuIGZvciBhIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBTaG91bGRTa2lwUmVmcmVzaEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0ZPUk0pO1xyXG5cclxuICAgIGxldCBza2lwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbWdGb3JtQmFzZTogR3VpRm9ybVByb3BlcnR5QWRhcHRlciA9IDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG5cclxuICAgIC8vIENvbXB1dGUgcHJvcGVydGllczogYWxsIHRob3NlIHByb3BlcnRpZXMgd2lsbCBiZSByZWZyZXNoIG9ubHkgb25lIHRpbWVcclxuICAgIHN3aXRjaCAodGhpcy5faWQpIHtcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XSU5ET1dfVFlQRTpcclxuICAgICAgICBpZiAoIXRoaXMuX3BhcmVudE9iai5Jc0ZpcnN0UmVmcmVzaE9mUHJvcHMoKSlcclxuICAgICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MSU5FU19JTl9UQUJMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9IRUxQX1NDUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJCSU5HX09SREVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BFUlNJU1RFTlRfRk9STV9TVEFURV9WRVJTSU9OOlxyXG4gICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyByZWZyZXNoIG9ubHkgdGhlIHJlbGV2YW50IHN1YmZvcm0gcHJvcGVydGllcyAoY29sb3IsIGZvbnQsIGV0Yy4pXHJcbiAgICBpZiAoIXNraXAgJiYgbWdGb3JtQmFzZS5pc1N1YkZvcm0oKSkge1xyXG4gICAgICBza2lwID0gdHJ1ZTtcclxuICAgICAgc3dpdGNoICh0aGlzLl9pZCkge1xyXG5cclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9QUk9QRVJUSUVTOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ1VTVE9NX1ZBTElEQVRPUlM6XHJcbiAgICAgICAgICBza2lwID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBza2lwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHRoZSBwcm9wZXJ0eSBuZWVkIHRvIGJlIHNraXAgZnJvbSB0aGUgcmVmcmVzaCBwcm9wZXJ0aWVzLiBmb3IgYSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2tpcFJlZnJlc2hUYXNrKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfQ1JFQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0RFTEVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19NT0RJRlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUkFOR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1NPUlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX0FMTE9XX0lOREVYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQkJJTkdfQ1lDTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09ORklSTV9DQU5DRUw6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09ORklSTV9VUERBVEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5EX0NPTkRJVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FVkFMX0VORF9DT05ESVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9SQ0VfU1VGRklYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUkNFX0RFTEVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX01PREU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RSQVNBQ1RJT05fQkVHSU46XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1RSQU5TQUNUSU9OX01PREU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJJTlRfREFUQTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DTE9TRV9UQVNLU19CWV9NRElfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfT1BFTl9UQVNLX1dJTkRPVzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfQUxMT1dfRVZFTlRTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19DSFVOS19TSVpFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19JTkRFWF9PUFRJTUlaQVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19SQU5HRV9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19MT0NBVEVfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1BPU0lUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19QT1NJVElPTl9VU0FHRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfU1FMX1JBTkdFOlxyXG4gICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2tpcDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGVjayBpZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGlnbm9yZWQgYnkgUmVmcmVzaERpc3BsYXkoKSBza2lwIHByb3BlcnRpZXMgd2hpY2ggaGFzIG5vdGhpbmcgdG8gZG8gd2l0aFxyXG4gIC8vLyAgIHRoZSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBpZ25vcmVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2tpcFJlZnJlc2goKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2tpcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc3dpdGNoICh0aGlzLl9wYXJlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0w6XHJcbiAgICAgICAgc2tpcCA9IHRoaXMuU2hvdWxkU2tpcFJlZnJlc2hDb250cm9sKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0ZPUk06XHJcbiAgICAgICAgc2tpcCA9IHRoaXMuU2hvdWxkU2tpcFJlZnJlc2hGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX1RBU0s6XHJcbiAgICAgICAgc2tpcCA9IHRoaXMuU2hvdWxkU2tpcFJlZnJlc2hUYXNrKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9pZCkge1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BPUF9VUDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUklFTlRBVElPTl9MT0NLOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOVEVSX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FWElUX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQVZJR0FUSU9OX0RSQVdFUl9NRU5VOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FDVElPTl9CQVJfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUEVOX1BJQ0tFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUEVOX0VESVRfRElBTE9HOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RFRkFVTFRfQUxJR05NRU5UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0tFWUJPQVJEX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfS0VZQk9BUkRfUkVUVVJOX0tFWTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19TVUdHRVNUSU9OUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0JJTEVfSU1BR0VfTElTVF9GSUxFX05BTUU6XHJcbiAgICAgICAgc2tpcCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2tpcDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZWZyZXNoIHRoZSBkaXNwbGF5IGZvciBjb250cm9sIHByb3BlcnRpZXMgYW5kIGZvcm0gcHJvcGVydGllcyBvbmx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvcmNlUmVmcmVzaFwiPmlmIHRydWUgdGhlbiByZWZyZXNoIGlzIGZvcmNlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmV2aW91cyB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyTGluZVwiPmxpbmUgbnVtYmVyIGluIHRhYmxlIHdoZW4gcmVmcmVzaGluZyBhIGNvbHVtbiBpZiB0aGUgY3VycmVudCBsaW5lIGlzIHJlZnJlc2hlZCBzZXQgdG9cclxuICAvLy8gICAoSW50ZWdlci5NSU5fVkFMVUUpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBSZWZyZXNoRGlzcGxheVdpdGhDdXJyZW50TGluZShmb3JjZVJlZnJlc2g6IGJvb2xlYW4sIGN1cnJMaW5lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuUmVmcmVzaERpc3BsYXlXaXRoQ3VyckxpbmVBbmRDaGVja1NraXBSZWZyZXNoKGZvcmNlUmVmcmVzaCwgY3VyckxpbmUsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhpcyBtZXRob2QgY2hlY2tzIGlmIHdlIG11c3QgcmVmcmVzaCB0aGUgcHJvcGVydHkgZXZlbiBpZiBpdCBoYXMgZXhwcmVzc2lvblxyXG4gIC8vIEZvciBub3cgaXQgcmV0dXJucyB0cnVlIGZvciBwcm9wZXJ0aWVzIHdpdGggdGV4dCBmb3IgbXVsdGlsaW5ndWFsIHN1cHBvcnRcclxuXHJcbiAgLy8gdG9kbyBOZWVkIHRvIGFkZCBoZXJlIGNoZWNrIGlmIHVzZXIgd2FudHMgbXVsdGlsaW5ndWFsIHN1cHBvcnQgYXQgYWxsXHJcbiAgU2tpcFdoZW5Ob0V4cHJlc3Npb24oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2tpcFdoZW5Ob0V4cHJlc3Npb24gPSB0cnVlO1xyXG5cclxuICAgIGxldCBjdHJsID0gKCh0aGlzLl9wYXJlbnRPYmogaW5zdGFuY2VvZiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyKSA/IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPnRoaXMuX3BhcmVudE9iaiA6IG51bGwpO1xyXG4gICAgaWYgKChjdHJsICE9IG51bGwgJiYgY3RybC5pc0J1dHRvbigpICYmIHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc0NvbWJvQm94KCkgJiYgdGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xBQkVMKSB8fFxyXG4gICAgICAoY3RybCAhPSBudWxsICYmIGN0cmwuaXNMaXN0Qm94KCkgJiYgdGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xBQkVMKSB8fFxyXG4gICAgICAoY3RybCAhPSBudWxsICYmIGN0cmwuaXNSYWRpbygpICYmIHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTCkgfHxcclxuICAgICAgKGN0cmwgIT0gbnVsbCAmJiBjdHJsLmlzQ2hlY2tCb3goKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTEFCRUwpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc1RhYkNvbnRyb2woKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTEFCRUwpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc0ltYWdlQ29udHJvbCgpICYmIHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JTUFHRV9GSUxFTkFNRSkgfHxcclxuICAgICAgKGN0cmwgIT0gbnVsbCAmJiBjdHJsLklzSW1hZ2VCdXR0b24oKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfRklMRU5BTUUpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc0NvbHVtbkNvbnRyb2woKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX1RJVExFKSB8fFxyXG4gICAgICAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfTElTVCkgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9URVhUKSB8fFxyXG4gICAgICAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RPT0xUSVApIHx8XHJcbiAgICAgICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSElOVCkgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QQVNTV09SRCkgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fUFJPUEVSVElFUykgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fVkFMSURBVE9SUykgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFKSB8fFxyXG4gICAgICAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQpfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CSU5ESU5HX0xFVkVMKSlcclxuICAgICAgc2tpcFdoZW5Ob0V4cHJlc3Npb24gPSBmYWxzZTtcclxuICAgIHJldHVybiBza2lwV2hlbk5vRXhwcmVzc2lvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVldmFsdWF0ZSB0aGUgcHJvcGVydHkgdmFsdWUgKGlmIGl0IGhhcyBhbiBleHByZXNzaW9uKSBhbmRcclxuICAvLy8gcmVmcmVzaCB0aGUgZGlzcGxheSBmb3IgY29udHJvbCBwcm9wZXJ0aWVzIGFuZCBmb3JtIHByb3BlcnRpZXMgb25seVxyXG4gIC8vL1xyXG4gIC8vLyBUaGlzIG1ldGhvZCB3YXMgKGFzIGl0cyBuYW1lIGltcGxpZXMpIHJlbGV2YW50IG9ubHkgZm9yIEdVSSBwcm9wZXJ0aWVzLCBpLmUuIHByb3BlcnRpZXMgdGhhdCBhZmZlY3Qgb24gdGhlIGRpc3BsYXkuXHJcbiAgLy8vIE5vbi1HVUkgcHJvcGVydGllcyAoc3VjaCBhcyBQUk9QX1RZUEVfVEFCX0lOKSB3ZXJlIHNraXBwZWQgYW5kIG5vdCByZWV2YWx1YXRlZC5cclxuICAvLy8gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gR1VJIHByb3BlcnRpZXMgYW5kIG5vbi1HVUkgcHJvcGVydGllcyBpcyBkb25lIGJ5IHRoZSBtZXRob2Qg77+9U2hvdWxkU2tpcFJlZnJlc2jvv71FXHJcbiAgLy8vIE5vdyB3ZSBoYXZlIG5vbi1HVUkgcHJvcGVydGllcyB0aGF0IGFyZSByZWV2YWx1YXRlZCBpbiB0aGlzIGZ1bmN0aW9uOlxyXG4gIC8vLyBQUk9QX1RZUEVfTU9ESUZZX0lOX1FVRVJZLCBQUk9QX1RZUEVfQ09OVEVYVF9NRU5VLCBQUk9QX1RZUEVfVEFCX0lOLCBQUk9QX1RZUEVfUEFSS19PTl9DTElDSy5cclxuICAvLy8gRm9yIHRoZXNlIHByb3BlcnRpZXMgd2UgZG8gbm90IGV4ZWN1dGUgZXhwbGljaXRseSB0aGVpciBleHByZXNzaW9ucyAoaXQgd2FzIGRvbmUgaW4gMS45IGJ5IENoZWNrUHJvcCBmdW5jdGlvbiksXHJcbiAgLy8vIHdlIG9ubHkgdXNlIHRoZWlyIHZhbHVlcyBieSBHZXRDb21wdXRlZEJvb2xlYW5Qcm9wZXJ0eSBmdW5jdGlvbi4gSXQgaXMgZG9uZSBmb3IgZG8gbm90IGV4ZWN1dGUgdGhlIHByb3BlcnR5IGV4cHJlc3Npb25cclxuICAvLy8gaW4gR1VJIHRocmVhZC4gSW4gR1VJIHRocmVhZCB3ZSBvbmx5IHVzZSB0aGUgcHJvcGVydHkgdmFsdWUuIFNvIGl0IGlzIG5lZWRlZCB0byByZWV2YWx1YXRlIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9yY2VSZWZyZXNoXCI+aWYgdHJ1ZSB0aGVuIHJlZnJlc2ggaXMgZm9yY2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXZpb3VzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN1cnJMaW5lXCI+bGluZSBudW1iZXIgaW4gdGFibGUgd2hlbiByZWZyZXNoaW5nIGEgY29sdW1uIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgcmVmcmVzaGVkIHNldCB0b1xyXG4gIC8vLyAgIChJbnRlZ2VyLk1JTl9WQUxVRSlcclxuICAvLy8gPC9wYXJhbT5cclxuICBhc3luYyBSZWZyZXNoRGlzcGxheVdpdGhDdXJyTGluZUFuZENoZWNrU2tpcFJlZnJlc2goZm9yY2VSZWZyZXNoOiBib29sZWFuLCBjdXJyTGluZTogbnVtYmVyLCBjaGVja1NraXBSZWZyZXNoOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IG51bGw7XHJcbiAgICBsZXQgbGluZTogbnVtYmVyID0gMDtcclxuICAgIGxldCBwcmV2VmFsdWU6IHN0cmluZztcclxuICAgIGxldCB2YWxDaGFuZ2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5fdmFsID09PSBudWxsICYmIHRoaXMuX2V4cElkID09PSAwKSB7XHJcbiAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiaW4gUHJvcGVydHkuUmVmcmVzaERpc3BsYXkoKSBudWxsIHZhbHVlIGFuZCBleHByZXNzaW9uXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoZWNrU2tpcFJlZnJlc2ggJiYgdGhpcy5TaG91bGRTa2lwUmVmcmVzaCgpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX2V4cElkID09PSAwICYmIHRoaXMuU2tpcFdoZW5Ob0V4cHJlc3Npb24oKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcmV2VmFsdWVzLmxlbmd0aCA9PT0gMClcclxuICAgICAgdGhpcy5zZXRQcmV2QXJyYXlTaXplKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5Db21wdXRlVmFsdWUoKTtcclxuXHJcbiAgICAvLyBiZWZvcmUgdXBkYXRlIHRoZSBwcm9wZXJ0eSBuZWVkIHRvIHByZXBhcmUgZGF0YVxyXG4gICAgc3dpdGNoICh0aGlzLl9wYXJlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0w6XHJcbiAgICAgICAgY3RybCA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICAgIC8vIHJlY29tcHV0ZSB0aGUgUElDIGZvciBmb3JtYXQgcHJvcGVydGllc1xyXG4gICAgICAgIGlmICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUICYmIHRoaXMuX2V4cElkID4gMClcclxuICAgICAgICAgIGN0cmwuY29tcHV0ZVBJQyh0aGlzLl92YWwpO1xyXG5cclxuICAgICAgICBpZiAoY3RybC5Jc1JlcGVhdGFibGUgJiYgIWN0cmwuZ2V0Rm9ybSgpLmlzUmVmcmVzaFJlcGVhdGFibGVBbGxvd2VkKCkpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChjdXJyTGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgICAgICBsaW5lID0gdGhpcy5nZXRMaW5lKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbGluZSA9IGN1cnJMaW5lO1xyXG5cclxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdhcyBjaGFuZ2VkIHRvIHByZXZlbnQgc2VuZGluZyByZWR1bmRhbnRcclxuICAgICAgICAvLyBqYXZhc2NyaXB0IGNvbW1hbmRzIHRvIHRoZSBicm93c2VyXHJcbiAgICAgICAgcHJldlZhbHVlID0gdGhpcy5fcHJldlZhbHVlcy5nZXRfSXRlbShsaW5lKTtcclxuXHJcblxyXG4gICAgICAgIGlmICghZm9yY2VSZWZyZXNoICYmICh0aGlzLl92YWwgPT09IHByZXZWYWx1ZSlcclxuICAgICAgICAgICYmIHRoaXMuX2lkICE9PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRklBQkxFXHJcbiAgICAgICAgICAmJiB0aGlzLl9pZCAhPT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRVxyXG4gICAgICAgICAgJiYgdGhpcy5faWQgIT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIHRvIHByZXZlbnQgcmVjdXJzaW9uIHdoaWxlIHVwZGF0aW5nIGNvbHVtbiB2aXNpYmlsaXR5XHJcbiAgICAgICAgaWYgKGN0cmwuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ09MVU1OXHJcbiAgICAgICAgICAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRVxyXG4gICAgICAgICAgJiYgdGhpcy5fdmFsID09PSBwcmV2VmFsdWUpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl92YWwgPT09IHByZXZWYWx1ZSlcclxuICAgICAgICAgIHZhbENoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldlZhbHVlcy5zZXRfSXRlbShsaW5lLCB0aGlzLl92YWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STTpcclxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdhcyBjaGFuZ2VkIHRvIHByZXZlbnQgc2VuZGluZyByZWR1bmRhbnRcclxuICAgICAgICAvLyBqYXZhc2NyaXB0IGNvbW1hbmRzIHRvIHRoZSBicm93c2VyXHJcbiAgICAgICAgcHJldlZhbHVlID0gdGhpcy5fcHJldlZhbHVlcy5nZXRfSXRlbSgwKTtcclxuICAgICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiAodGhpcy5fdmFsID09PSBwcmV2VmFsdWUpKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuc2V0X0l0ZW0oMCwgdGhpcy5fdmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX1RBU0s6IC8vIFRBU0sgUFJPUEVSVElFU1xyXG4gICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFxyXG4gICAgICAgICAgTlN0cmluZy5Gb3JtYXQoXCJQcm9wZXJ0eS5SZWZyZXNoRGlzcGxheSgpOiB0YXNrIHByb3BlcnR5IHswfSB3YXNuJ3QgaGFuZGxlZFwiLCB0aGlzLl9pZCkpO1xyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coXHJcbiAgICAgICAgICBOU3RyaW5nLkZvcm1hdChcIlByb3BlcnR5LlJlZnJlc2hEaXNwbGF5KCk6IHBhcmVudFR5cGUgdW5rbm93biwgcHJvcGVydHkgezB9IHdhc24ndCBoYW5kbGVkXCIsIHRoaXMuX2lkKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5faWQpIHtcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfRklMRU5BTUU6XHJcbiAgICAgICAgdGhpcy5vbkltYWdlRmlsZU5hbWUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgICB0aGlzLm9uRW5hYmxlKHZhbENoYW5nZWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICAgIGF3YWl0IHRoaXMub25WaXNpYmxlKHZhbENoYW5nZWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTkFNRTpcclxuICAgICAgICB0aGlzLk9uQ29udHJvbE5hbWUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FOlxyXG4gICAgICAgIHRoaXMub25Gb3JtTmFtZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DT0xVTU5fVElUTEU6XHJcbiAgICAgICAgdGhpcy5vblRleHQoMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RFWFQ6XHJcbiAgICAgICAgdGhpcy5vblRleHQobGluZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0hJTlQ6XHJcbiAgICAgICAgdGhpcy5vbkhpbnQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTU9ESUZJQUJMRTpcclxuICAgICAgICBhd2FpdCB0aGlzLm9uTW9kaWZpYWJsZSh2YWxDaGFuZ2VkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9PTFRJUDpcclxuICAgICAgICB0aGlzLm9uVG9vbHRpcCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX0xJU1Q6XHJcbiAgICAgICAgYXdhaXQgdGhpcy5vbkRpc3BsYXlMaXN0KGxpbmUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX0NPTVBMRVRFX01PREVfV0M6XHJcbiAgICAgICAgdGhpcy5vbkF1dG9Db21wbGV0ZU1vZGUoKTtcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xBWUVSU19MSVNUOlxyXG4gICAgICAgIGF3YWl0IHRoaXMub25WaXNpYmxlTGF5ZXJMaXN0KGxpbmUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgICAgdGhpcy5vbkZvcm1hdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTDpcclxuICAgICAgICBhd2FpdCB0aGlzLm9uTGFiZWwobGluZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFTU1dPUkQ6XHJcbiAgICAgICAgdGhpcy5vblBhc3N3b3JkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRllfSU5fUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCX0lOOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUktfT05fQ0xJQ0s6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTE9BRF9JTUFHRV9GUk9NOiAvLyB0aGlzIHByb3BlcnR5IGlzIHVzZWQgZm9yIGlkZW50aWZ5aW5nIGxvYWRpbmcgb2YgaW1hZ2UgKFNlcnZlci9DbGllbnQpLlxyXG4gICAgICAgIC8vIFNvIG5vIGhhbmRsaW5nIG5lZWRlZCBpbiBSZWZyZXNoRGlzcGxheVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ1VTVE9NX1BST1BFUlRJRVM6XHJcbiAgICAgICAgdGhpcy5vbkN1c3RvbVByb3BlcnRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fVkFMSURBVE9SUzpcclxuICAgICAgICB0aGlzLm9uQ3VzdG9tVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CSU5ESU5HX0xFVkVMOlxyXG4gICAgICAgIHRoaXMub25CaW5kaW5nTGV2ZWwoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhcclxuICAgICAgICAgIE5TdHJpbmcuRm9ybWF0KFwiUHJvcGVydHkuUmVmcmVzaERpc3BsYXkoKTogUHJvcGVydHkgezB9IHdhc24ndCBoYW5kbGVkXCIsIHRoaXMuX2lkKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBuZWVkIHRvIGNhbGN1bGF0ZSBvbmNlIG9ubHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBTaG91bGRCZUNvbXB1dGVkT25jZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfVEFTSykge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX01PREU6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkVMT0FEX1ZJRVc6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJCSU5HX0NZQ0xFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX09QRU5fVEFTS19XSU5ET1c6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfQUxMT1dfRVZFTlRTOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFX0lOX1FVRVJZOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJJTlRfREFUQTpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfU09SVDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19BTExPV19JTkRFWDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01BSU5fRElTUExBWTpcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBpZiAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lTX0NBQ0hFRCB8fCB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaWYgdGhlIHZhbHVlIGlzIGNvbXB1dGVkIGluIHRoZSBzZXJ2ZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBJc0NvbXB1dGVkT25jZU9uU2VydmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuU2hvdWxkQmVDb21wdXRlZE9uY2UoKSkge1xyXG4gICAgICBsZXQgdGFzazogR3VpVGFza0Jhc2UgPSB0aGlzLkdldFRhc2tCeVBhcmVudE9iamVjdCgpO1xyXG4gICAgICBpZiAodGFzayAhPSBudWxsKVxyXG4gICAgICAgIHJldHVybiAhdGFzay5TaG91bGRFdmFsdWF0ZVByb3BlcnR5TG9jYWxseSh0aGlzLl9pZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcHV0ZXMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIENvbXB1dGVWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSAyNTU7XHJcbiAgICBsZXQgd2FzRXZhbHVhdGVkOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbShmYWxzZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fUFJPUEVSVElFUykge1xyXG4gICAgICBhd2FpdCB0aGlzLmNvbXB1dGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzKCk7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMuR2V0QXJyYXlWYWx1ZXNGb3JDdXN0b21Qcm9wZXJ0aWVzKCk7XHJcbiAgICAgIHRoaXMuc2V0VmFsdWUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ1VTVE9NX1ZBTElEQVRPUlMpIHtcclxuICAgICAgYXdhaXQgdGhpcy5jb21wdXRlQ3VzdG9tVmFsaWRhdG9ycygpO1xyXG4gICAgICByZXN1bHQgPSB0aGlzLkdldEFycmF5VmFsdWVzRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKTtcclxuICAgICAgdGhpcy5zZXRWYWx1ZShyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5fZXhwSWQgPiAwKSB7XHJcbiAgICAgIC8vIGZvciBvZmZsaW5lIDogY29tcHV0ZSBvbmNlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2FzIGNvbXB1dGUgb24gdGhlIHNlcnZlclxyXG4gICAgICBpZiAodGhpcy5TaG91bGRCZUNvbXB1dGVkT25jZSgpICYmIHRoaXMuX2V4cEFscmVhZHlDb21wdXRlZE9uY2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5fZXhwQWxyZWFkeUNvbXB1dGVkT25jZSA9IHRydWU7XHJcblxyXG4gICAgICAvLyBmb3IgZm9sbG93aW5nIGNvbnRyb2wgcHJvcGVydGllcyBhbHdheXMgZXZhbHVhdGUgZXhwcmVzc2lvbnNcclxuICAgICAgbGV0IGFsd2F5c0V2YWx1YXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9UQVNLKVxyXG4gICAgICAgIGFsd2F5c0V2YWx1YXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUKSB7XHJcbiAgICAgICAgbGVuID0gNjU1MzU7XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5ydHJpbShhd2FpdCB0aGlzLl9wYXJlbnRPYmouRXZhbHVhdGVFeHByZXNzaW9uKHRoaXMuX2V4cElkLCB0aGlzLl9kYXRhVHlwZSwgbGVuLCB0cnVlLFxyXG4gICAgICAgICAgU3RvcmFnZUF0dHJpYnV0ZS5TS0lQLCBhbHdheXNFdmFsdWF0ZSwgd2FzRXZhbHVhdGVkKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3BhcmVudE9iai5FdmFsdWF0ZUV4cHJlc3Npb24odGhpcy5fZXhwSWQsIHRoaXMuX2RhdGFUeXBlLCBsZW4sIHRydWUsIFN0b3JhZ2VBdHRyaWJ1dGUuU0tJUCwgYWx3YXlzRXZhbHVhdGUsIHdhc0V2YWx1YXRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBsZXQgd2FybmluZ01zZyA9IG5ldyBTdHJpbmdCdWlsZGVyKFwiRXhjZXB0aW9uOiBcIiArIGUuTWVzc2FnZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcGFyZW50T2JqIGluc3RhbmNlb2YgR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcilcclxuICAgICAgICAgICAgd2FybmluZ01zZy5BcHBlbmQoXCIgQ29udHJvbDogXCIgKyAoPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+dGhpcy5fcGFyZW50T2JqKS5OYW1lKTtcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZVdhcm5pbmdUb0xvZyh3YXJuaW5nTXNnLlRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh3YXNFdmFsdWF0ZWQudmFsdWUpIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLnVwZGF0ZVJlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLl92YWwgPT0gbnVsbCAmJiB0aGlzLl9wYXJlbnRUeXBlICE9PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICAgIHJlc3VsdCA9IFByb3BEZWZhdWx0cy5nZXREZWZhdWx0VmFsdWUodGhpcy5faWQsIHRoaXMuX3BhcmVudFR5cGUsIHRoaXMuX3BhcmVudE9iaik7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShyZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlcyByZXN1bHRzIG9mIGV4cHJlc3Npb24gZm9yIHNvbWUgcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXN1bHRcIj4gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IDwvcmV0dXJucz5cclxuICBwcml2YXRlIHVwZGF0ZVJlc3VsdChyZXN1bHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUOlxyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbClcclxuICAgICAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfTU9ERTpcclxuICAgICAgICByZXN1bHQgPSBQcm9wZXJ0eS51cGRhdGVUYXNrTW9kZVJlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGRvIHRoZSBzYW1lIGFzIHdlIGRvaW5nIGZvciBjKysgVWNoYXIgUlQ6OnRza19tb2RlX2V4cCAobG9uZyBleHAsIFVjaGFyIG1vZGUpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXN1bHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgdXBkYXRlVGFza01vZGVSZXN1bHQocmVzdWx0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvZGU6IHN0cmluZyA9ICcgJztcclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHJlc3VsdCkpIHtcclxuICAgICAgY29kZSA9IHJlc3VsdFswXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcclxuICAgICAgICBjYXNlICdRJzpcclxuICAgICAgICAgIGNvZGUgPSAnRSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdGJzpcclxuICAgICAgICAgIGNvZGUgPSAnTyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdPJzpcclxuICAgICAgICAgIGNvZGUgPSAnTic7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2RlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGF3YWl0IHRoaXMuQ29tcHV0ZVZhbHVlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbnQgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eTwvcmV0dXJucz5cclxuICBhc3luYyBnZXRWYWx1ZUludCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBhd2FpdCB0aGlzLkNvbXB1dGVWYWx1ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLl92YWwgIT09IG51bGwpXHJcbiAgICAgIHJlc3VsdCA9IE5OdW1iZXIuUGFyc2UodGhpcy5fdmFsKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2l0aG91dCBleGVjdXRlIGl0cyBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGludCB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5PC9yZXR1cm5zPlxyXG4gIEdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTk51bWJlci5QYXJzZSh0aGlzLl92YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSBib29sZWFuIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB2YWxpZCBvbmx5IGZvciBsb2dpY2FsIHR5cGUgcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZ2V0VmFsdWVCb29sZWFuKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMuX2RhdGFUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xyXG4gICAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odGhpcy5fdmFsKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlByb3BlcnR5LmdldFZhbHVlQm9vbGVhbigpIHdhcyBjYWxsZWQgZm9yIG5vbiBib29sZWFuIHR5cGUgcHJvcGVydHk6IHswfVwiLCB0aGlzLl9pZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIGNvbXB1dGVkIHZhbHVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRDb21wdXRlZFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGNvbXB1dGVkIGJvb2xlYW4gdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGhvdXQgZXhlY3V0ZSBpdHMgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5fZGF0YVR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTikge1xyXG4gICAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odGhpcy5fdmFsKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlByb3BlcnR5LmdldFZhbHVlQm9vbGVhbigpIHdhcyBjYWxsZWQgZm9yIG5vbiBib29sZWFuIHR5cGUgcHJvcGVydHk6IHswfVwiLCB0aGlzLl9pZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vICAgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBzcGVjaWZpZWQgbGluZSBvZiB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGluZVwiPnRoZSByZXF1ZXN0ZWQgbGluZSBudW1iZXI8L3BhcmFtPlxyXG4gIGdldFByZXZWYWx1ZShsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGxpbmUgPCB0aGlzLl9wcmV2VmFsdWVzLmxlbmd0aClcclxuICAgICAgcmV0dXJuIHRoaXMuX3ByZXZWYWx1ZXMuZ2V0X0l0ZW0obGluZSk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhpcyBwcm9wZXJ0eSBoYXMgYW4gZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNFeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V4cElkID4gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0RXhwcmVzc2lvbklkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhwSWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkltYWdlRmlsZU5hbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgbGV0IG1nQ29udHJvbEJhc2U6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgaWYgKG1nQ29udHJvbEJhc2UuaXNUYWJDb250cm9sKCkpIHtcclxuICAgICAgICBtZ0NvbnRyb2xCYXNlLnNldEltYWdlTGlzdCh0aGlzLkdldENvbXB1dGVkVmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobWdDb250cm9sQmFzZS5pc0ltYWdlQ29udHJvbCgpIHx8IG1nQ29udHJvbEJhc2UuaXNSYWRpbygpIHx8IG1nQ29udHJvbEJhc2UuaXNDaGVja0JveCgpIHx8IG1nQ29udHJvbEJhc2UuSXNJbWFnZUJ1dHRvbigpKSB7XHJcbiAgICAgICAgbWdDb250cm9sQmFzZS5zZXRJbWFnZVdpdGhGaWxlTmFtZSh0aGlzLkdldENvbXB1dGVkVmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gb25JbWFnZUZpbGVOYW1lLm9uRW5hYmxlKClcIik7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25FbmFibGUodmFsQ2hhbmdlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIGxldCBjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmo7XHJcbiAgICAgIGxldCBjdXJyZW50RWRpdGluZ0NvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuQ3VycmVudEVkaXRpbmdDb250cm9sO1xyXG5cclxuICAgICAgLy8gQUNUX1RCTF9OWFRGTEQgaXMgYWRkZWQgaW4gcXVldWUsIHdoZW5ldmVyIGN1cnJlbnQgY29udHJvbCBpcyBoaWRkZW4gb3IgZGlzYWJsZWQgdG8gc2V0IHRoZSBmb2N1cyB0byBuZXh0IGNvbnRyb2wgZm9yIGJvdGggUkMgJiBPTFxyXG4gICAgICAvLyB3aGljaCBpcyBjb3JyZWN0IGJlaGF2aW9yLiBCdXQgb25jZSBjdXJyZW50IGN0cmwgaXMgYWxyZWFkeSBkaXNhYmxlZC9oaWRkZW4gLCB3ZSBzaG91bGQgbm90IHB1dCB0aGUgc2FtZSBhY3Rpb25cclxuICAgICAgLy8gaW4gcXVldWUgYWdhaW4gd2hlbiBzYW1lIGN0cmwgaXMgZGlzYWJsZWQvaGlkZGVuIG11bHRpcGxlIHRpbWVzLlxyXG4gICAgICBpZiAodGhpcy5fdmFsICE9PSBudWxsICYmIHRoaXMuX3ZhbCA9PT0gXCIwXCIgJiYgdmFsQ2hhbmdlZCAmJiBjdXJyZW50RWRpdGluZ0NvbnRyb2wgIT09IG51bGwgJiZcclxuICAgICAgICAoY3RybCA9PT0gY3VycmVudEVkaXRpbmdDb250cm9sIHx8IGN1cnJlbnRFZGl0aW5nQ29udHJvbC5pc0Rlc2NlbmRlbnRPZkNvbnRyb2woY3RybCkgfHwgY3RybCA9PT0gY3VycmVudEVkaXRpbmdDb250cm9sLmdldExpbmtlZFBhcmVudChmYWxzZSkpKSB7XHJcbiAgICAgICAgbGV0IHBhcmtlZENvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0TGFzdFBhcmtlZEN0cmwoKTtcclxuICAgICAgICBpZiAocGFya2VkQ29udHJvbCAhPT0gbnVsbCAmJiBwYXJrZWRDb250cm9sLkluQ29udHJvbCAmJiAoY3RybCA9PT0gcGFya2VkQ29udHJvbCB8fCBwYXJrZWRDb250cm9sLmlzRGVzY2VuZGVudE9mQ29udHJvbChjdHJsKSkpIHtcclxuICAgICAgICAgIEV2ZW50cy5Pbk5vblBhcmthYmxlTGFzdFBhcmtlZEN0cmwoY3RybCk7XHJcbiAgICAgICAgICBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuQ3VycmVudEVkaXRpbmdDb250cm9sID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5TZXRFbmFibGVkKHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uRW5hYmxlKClcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIG9uVmlzaWJsZSh2YWxDaGFuZ2VkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgbGV0IGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgbGV0IGN1cnJlbnRFZGl0aW5nQ29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5DdXJyZW50RWRpdGluZ0NvbnRyb2w7XHJcbiAgICAgIGlmICh0aGlzLl92YWwgIT09IG51bGwgJiYgdGhpcy5fdmFsID09PSBcIjBcIiAmJiB2YWxDaGFuZ2VkICYmIGN1cnJlbnRFZGl0aW5nQ29udHJvbCAhPT0gbnVsbCAmJlxyXG4gICAgICAgIChjdHJsID09PSBjdXJyZW50RWRpdGluZ0NvbnRyb2wgfHwgY3VycmVudEVkaXRpbmdDb250cm9sLmlzRGVzY2VuZGVudE9mQ29udHJvbChjdHJsKSB8fCBjdHJsID09PSBjdXJyZW50RWRpdGluZ0NvbnRyb2wuZ2V0TGlua2VkUGFyZW50KGZhbHNlKSkpIHtcclxuICAgICAgICBsZXQgcGFya2VkQ29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRMYXN0UGFya2VkQ3RybCgpO1xyXG4gICAgICAgIGlmIChwYXJrZWRDb250cm9sICE9PSBudWxsICYmIHBhcmtlZENvbnRyb2wuSW5Db250cm9sICYmIChjdHJsID09PSBwYXJrZWRDb250cm9sIHx8IHBhcmtlZENvbnRyb2wuaXNEZXNjZW5kZW50T2ZDb250cm9sKGN0cmwpKSkge1xyXG4gICAgICAgICAgRXZlbnRzLk9uTm9uUGFya2FibGVMYXN0UGFya2VkQ3RybChjdHJsKTtcclxuICAgICAgICAgIGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5DdXJyZW50RWRpdGluZ0NvbnRyb2wgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBhd2FpdCBjdHJsLnVwZGF0ZVByb3BlcnR5TG9naWNOZXN0aW5nKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUsIHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSwgdHJ1ZSk7XHJcblxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgT25Db250cm9sTmFtZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG5cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkuT25Db250cm9sTmFtZSgpXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgaGludCBmb3IgZWRpdCBjb250cm9sIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uSGludCgpIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPnRoaXMuZ2V0T2JqZWN0QnlQYXJlbnRPYmooKTtcclxuICAgICAgbGV0IHRyYW5zbGF0ZWRTdHJpbmc6IHN0cmluZyA9IEV2ZW50cy5UcmFuc2xhdGUodGhpcy5HZXRDb21wdXRlZFZhbHVlKCkpO1xyXG5cclxuICAgICAgaWYgKCFjb250cm9sLklzRGF0ZVRpbWVQaWN0dXJlKCkgJiYgKCFjb250cm9sLklzVGFibGVDaGlsZCB8fCBjb250cm9sLklzVGFibGVIZWFkZXJDaGlsZCkpIHtcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIHRoaXMuZ2V0T2JqZWN0QnlQYXJlbnRPYmooKSwgdGhpcy5nZXRMaW5lKCksIEh0bWxQcm9wZXJ0aWVzLlBsYWNlSG9sZGVyLCB0cmFuc2xhdGVkU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpblByb3BlcnR5Lm9uSGludCgpXCIpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25Gb3JtTmFtZSgpIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSlcclxuICAgICAgdGhpcy5hZGRDb21tYW5kVHlwZVRleHQoMCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uRm9ybU5hbWUoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYWRkQ29tbWFuZFR5cGVUZXh0KGxpbmU6IG51bWJlcikge1xyXG4gICAgbGV0IG1sc1RyYW5zVmFsdWU6IHN0cmluZyA9IEV2ZW50cy5UcmFuc2xhdGUodGhpcy5HZXRDb21wdXRlZFZhbHVlKCkpO1xyXG5cclxuICAgIC8vIEZpeGVkIGJ1ZyM6NzMzNDgwIFN5c3RlbUJveCA9IGZhbHNlIGFuZCB0aXRsZSBpcyBlbXB0eS0+IC5ORVQgaGlkZSB0aGUgdGl0bGUuXHJcbiAgICAvLyB3ZSB3aWxsIHNldCBpdCB0byAnICdcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSB8fFxyXG4gICAgICAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wgJiYgKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc0NvbHVtbkNvbnRyb2woKSkpIHtcclxuICAgICAgLy8gIzczNzQ4ODogV2hlbiB2YXJpYWJsZSBhdHRhY2hlZCB0byBmb3JtJ3MgdGV4dCBwcm9wZXJ0eSwgc3BhY2VzIGFyZSBhcHBlbmRlZFxyXG4gICAgICAvLyBhZnRlciBhY3R1YWwgdmFsdWUsIGVxdWFsIHRvIHBpY3R1cmUgb2YgdmFyaWFibGUuIEJlZm9yZSBzZXR0aW5nIHRleHQgcmVtb3ZlIHRoZXNlIGV4dHJhXHJcbiAgICAgIC8vIHNwYWNlcyBhdCB0aGUgZW5kLlxyXG4gICAgICBtbHNUcmFuc1ZhbHVlID0gU3RyVXRpbC5ydHJpbShtbHNUcmFuc1ZhbHVlKTtcclxuICAgICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNICYmIG1sc1RyYW5zVmFsdWUgPT09IE5TdHJpbmcuRW1wdHkpIHtcclxuICAgICAgICBtbHNUcmFuc1ZhbHVlID0gXCIgXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCAmJiAoKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc1RleHRDb250cm9sKClcclxuICAgICAgICB8fCAoKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc0J1dHRvbigpKSkpIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGh5cGVydGV4dCBvciBvdGhlciB0eXBlcyBvZiBidXR0b25cclxuICAgICAgQ29tbWFuZHMuYWRkVmFsdWVXaXRoTGluZShDb21tYW5kVHlwZS5TRVRfVkFMVUUsIHRoaXMuX3BhcmVudE9iaiwgbGluZSwgbWxzVHJhbnNWYWx1ZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcy5fcGFyZW50T2JqLCBsaW5lLCBIdG1sUHJvcGVydGllcy5UZXh0LCBtbHNUcmFuc1ZhbHVlKTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblRleHQobGluZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFkZENvbW1hbmRUeXBlVGV4dChsaW5lKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb25Nb2RpZmlhYmxlKHZhbENoYW5nZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG5cclxuICAgICAgaWYgKGN0cmwuaXNUZXh0Q29udHJvbCgpKSB7XHJcbiAgICAgICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gdGhpcy5HZXRUYXNrQnlQYXJlbnRPYmplY3QoKTtcclxuXHJcbiAgICAgICAgbGV0IHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gPSAhdGhpcy5HZXRDb21wdXRlZFZhbHVlQm9vbGVhbigpO1xyXG5cclxuICAgICAgICBpZiAoKHJlYWRPbmx5VmFsdWUgfHwgdGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfUVVFUlkpICYmIGN0cmwuR2V0Q3VyclJlYWRPbmx5KCkgIT09IHJlYWRPbmx5VmFsdWUpIHtcclxuICAgICAgICAgIGN0cmwuU2V0Q3VyclJlYWRPbmx5KHJlYWRPbmx5VmFsdWUpO1xyXG5cclxuICAgICAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnQgKGVuYWJsZSBJTUUgaW4gcXVlcnkgbW9kZSlcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgICAgICAgIGlmIChhd2FpdCBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0xPQ0FURV9JTl9RVUVSWSwgZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCB0aGlzLmdldE9iamVjdEJ5UGFyZW50T2JqKCksIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5SZWFkT25seSwgcmVhZE9ubHlWYWx1ZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBQcm9wZXJ0eS5vbk1vZGlmaWFibGUoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25Ub29sdGlwKCk6IHZvaWQge1xyXG4gICAgbGV0IHRvb2xUaXA6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgbGV0IGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuXHJcbiAgICAgIC8vIFRvb2x0aXAgZXhwcmVzc2lvbiByZXR1cm5zIHN0cmluZ1xyXG4gICAgICBpZiAodGhpcy5fZXhwSWQgPT09IDApXHJcbiAgICAgICAgdG9vbFRpcCA9ICg8VG9vbFRpcEhlbHA+Y3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldEhlbHBJdGVtKE5OdW1iZXIuUGFyc2UodGhpcy5fdmFsKSkpLnRvb2x0aXBIZWxwVGV4dDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRvb2xUaXAgPSB0aGlzLl92YWw7XHJcblxyXG4gICAgICAvLyAjOTI5ODg5OiBSZW1vdmUgZXh0cmEgd2hpdGUgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdG9vbHRpcCB0ZXh0LlxyXG4gICAgICB0b29sVGlwID0gU3RyVXRpbC5ydHJpbSh0b29sVGlwKTtcclxuICAgICAgaWYoY3RybC5pc0J1dHRvbigpICYmICBjdHJsLkNvbm5lY3RlZENvbnRyb2wpXHJcbiAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBjdHJsLkNvbm5lY3RlZENvbnRyb2wsIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5ab29tQnV0dG9uVG9vbHRpcCwgdG9vbFRpcCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIGN0cmwsIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5Ub29sdGlwLCB0b29sVGlwKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkub25Ub29sdGlwKClcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIG9uRGlzcGxheUxpc3QoY3VyckxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIGxldCBjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmo7XHJcblxyXG4gICAgICBpZiAoY3RybC5pc1NlbGVjdGlvbkN0cmwoKSB8fCBjdHJsLmlzVGFiQ29udHJvbCgpIHx8IGN0cmwuaXNSYWRpbygpIHx8ICg8TWdDb250cm9sQmFzZT5jdHJsKS5IYXNBdXRvY29tcGxldGUoKSkge1xyXG4gICAgICAgIGxldCBsaW5lOiBudW1iZXIgPSAoY3VyckxpbmUgPT09IEludDMyLk1pblZhbHVlKSA/IGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpIDogY3VyckxpbmU7XHJcbiAgICAgICAgYXdhaXQgY3RybC5yZWZyZXNoQW5kU2V0SXRlbXNMaXN0KGxpbmUsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uRGlzcGxheUxpc3QoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3VyckxpbmVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgb25WaXNpYmxlTGF5ZXJMaXN0KGN1cnJMaW5lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICBsZXQgbGluZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIGlmIChjdXJyTGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgICAgbGluZSA9IGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbGluZSA9IGN1cnJMaW5lO1xyXG5cclxuICAgICAgLy8gQWx3YXlzIGxheWVyaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gRGlzcGxheWxpc3QuIEJ1dCxcclxuICAgICAgLy8gRGlzcGxheUxpc3QgYW5kIGl0ZW1MaXN0IHNob3VsZCBub3QgYmUgcmVmcmVzaGVkLlxyXG4gICAgICBhd2FpdCBjdHJsLnJlZnJlc2hUYWJGb3JMYXllckxpc3QobGluZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uVmlzaWJsZUxheWVyTGlzdCgpXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkZvcm1hdCgpIHtcclxuICAgIGxldCBjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gbnVsbDtcclxuICAgIGxldCBjdHJsUGljOiBQSUM7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIGN0cmwgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgY3RybFBpYyA9IGN0cmwuZ2V0UElDKCk7XHJcbiAgICAgIGN0cmwucmVzZXRQcmV2VmFsKCk7XHJcblxyXG4gICAgICBzd2l0Y2ggKGN0cmwuVHlwZSkge1xyXG4gICAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQlVUVE9OOlxyXG4gICAgICAgICAgLy8gaWYgdGhlIGJ1dHRvbiBkb2Vzbid0IGhhdmUgZmllbGQgd2UgbmVlZCB0byBzZXQgdGhlIGZvcm1hdCBhcyB0aGUgdGV4dCBvZiB0aGUgY29udHJvbCxcclxuICAgICAgICAgIC8vIG90aGVyd2lzZSwgdGhlIGZpZWxkIHZhbHVlIHdpbGwgc2V0IHRoZSB0ZXh0IG9uIHRoZSBjb250cm9sXHJcbiAgICAgICAgICAvLyBpbiBhZGRpdGlvbiB3ZSBuZWVkIHRvIHNldCB0aGUgdGV4dCBmb3IgaW1hZ2UgYnV0dG9uXHJcbiAgICAgICAgICAvLyBBbHNvLCBkbyBub3Qgb3ZlcnJpZGUgdGhlIHRleHQgd2l0aCB0aGUgZm9ybWF0IGlmIHRoZSBjb250cm9sIGhhcyBhbiBleHByZXNzaW9uLlxyXG4gICAgICAgICAgLy8gUUNSIyA5Mzg5MzMuIFdoZW4gdGhlIGNvbnRyb2wgaXMgcmVmcmVzaGVkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugc2hvdWxkIHNob3cgdGhlIHRleHQgYXMgaXRcclxuICAgICAgICAgIC8vIGlzIGluIHRoZSBGb3JtYXQgcHJvcGVydHkgLSBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBmaWVsZCBvciBleHByZXNzaW9uIGlzIGF0dGFjaGVkIHRvIGl0IG9yIG5vdC5cclxuICAgICAgICAgIC8vIFRoZSBmaXggaXMgY29uZmluZWQgdG8gQ29udHJvbFR5cGVzLkNUUkxfVFlQRV9CVVRUT04gYmVjYXVzZSBvbmx5IGluIGNhc2Ugb2YgQnV0dG9uIHdlIGRpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBGb3JtYXQgcHJvcGVydHkuXHJcbiAgICAgICAgICBpZiAoY3RybC5nZXRGaWVsZCgpID09IG51bGwgJiYgIWN0cmwuZXhwcmVzc2lvblNldEFzRGF0YSgpIHx8IGN0cmwuSXNJbWFnZUJ1dHRvbigpIHx8ICh0aGlzLl9wYXJlbnRPYmouSXNGaXJzdFJlZnJlc2hPZlByb3BzKCkgJiYgIUd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNwZWNpYWxJZ25vcmVCdXR0b25Gb3JtYXQoKSkpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tbWFuZFR5cGVUZXh0KHRoaXMuZ2V0TGluZSgpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9URVhUOlxyXG5cclxuICAgICAgICAgIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RFWFQpIHtcclxuICAgICAgICAgICAgaWYgKGN0cmxQaWMuZ2V0QXR0cigpICE9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkub25Gb3JtYXQoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb25MYWJlbChjdXJyTGluZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgLy8gU0VMRUNUIGNvbnRyb2wuIE5vdGUgd2UgZG8gbm90IHN1cHBvcnQgZHluYW1pYyBjaGFuZ2Ugb2YgcmFkaW8gYnV0dG9ucyByYW5nZSFcclxuICAgICAgLy8gZGF0YSBjb250cm9sIHJhbmdlcyBhcmUgdXBkYXRlZCB3aGVuIHdlIHNldCB2YWx1ZXMgdG8gdGhlbSBpbiBDb250cm9sLnJlZnJlc2hEaXNwVmFsKClcclxuICAgICAgbGV0IGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgbGV0IGxpbmU6IG51bWJlcjtcclxuXHJcbiAgICAgIGlmIChjdXJyTGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgICAgbGluZSA9IGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbGluZSA9IGN1cnJMaW5lO1xyXG5cclxuICAgICAgLy8gb24gY29tYm8gYm94IGNvbXBmb3IgY2hlY2sgYm94IHRoZSBsYWJlbCBpcyB0aGUgaXRlbSBsaXN0IHByb3BlcnR5XHJcbiAgICAgIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NIRUNLQk9YKVxyXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZFR5cGVUZXh0KGxpbmUpO1xyXG4gICAgICBlbHNlIGlmIChjdHJsLmlzU2VsZWN0aW9uQ3RybCgpIHx8IGN0cmwuaXNUYWJDb250cm9sKCkgfHwgY3RybC5pc1JhZGlvKCkpIHtcclxuICAgICAgICBjdHJsLnNldFJhbmdlKGF3YWl0IHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICAgICAgY3RybC5jbGVhclJhbmdlKGxpbmUpO1xyXG4gICAgICAgIGF3YWl0IGN0cmwucmVmcmVzaEFuZFNldEl0ZW1zTGlzdChsaW5lLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gSWYgSXRlbUxpc3QgaGFzIGFuIGV4cHJlc3Npb24gQW5kIGl0IG1heSBiZSBtb2RpZmllZCBhZ2FpbiwgcmVmcmVzaCB0aGUgZGlzcGxheSB2YWx1ZSBvZiBjb250cm9sLlxyXG4gICAgICAgIC8vIEJlY2F1c2UgaXQgbWF5IGJlIHBvc3NpYmxlIHRoYXQgZGlzcGxheSB2YWx1ZSB3aWxsIGNoYW5nZS5cclxuICAgICAgICBpZiAodGhpcy5fZXhwSWQgPiAwKVxyXG4gICAgICAgICAgYXdhaXQgY3RybC5Db21wdXRlQW5kUmVmcmVzaERpc3BsYXlWYWx1ZShmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoKDxNZ0NvbnRyb2xCYXNlPmN0cmwpLkhhc0F1dG9jb21wbGV0ZSgpKVxyXG4gICAgICAgIGF3YWl0IGN0cmwucmVmcmVzaEFuZFNldEl0ZW1zTGlzdChsaW5lLCB0cnVlKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIlByb3BlcnR5Lm9uTGFiZWwoKSwgbm90IHN1cHBvcnQgY29udHJvbFwiKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkub25MYWJlbCgpXCIpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWxsIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc3VwcG9ydCBpbiBzdWJmb3JtLCBtdXN0IGNhbGwgdGhpcyBtZXRob2RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRPYmplY3RCeVBhcmVudE9iaigpOiBhbnkge1xyXG4gICAgbGV0IHJlc3VsdDogYW55ID0gdGhpcy5fcGFyZW50T2JqO1xyXG5cclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSkge1xyXG4gICAgICBsZXQgZm9ybTogR3VpRm9ybVByb3BlcnR5QWRhcHRlciA9IDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICBpZiAoZm9ybS5pc1N1YkZvcm0oKSlcclxuICAgICAgICByZXN1bHQgPSBmb3JtLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BJZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgaXNSZXBlYXRhYmxlSW5UYWJsZShwcm9wSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBjdXJyZW50IGxpbmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRMaW5lKCk6IG51bWJlciB7XHJcbiAgICBsZXQgbGluZTogbnVtYmVyID0gMDtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICBsZXQgZGlzcGxheUxpbmVGb3JUcmVlT3JUYWJsZTogYm9vbGVhbiA9IGN0cmwuaXNQcm9wZXJ0eVJlcGVhdGFibGUodGhpcy5faWQpO1xyXG5cclxuICAgICAgbGluZSA9IGN0cmwuZ2V0RGlzcGxheUxpbmUoZGlzcGxheUxpbmVGb3JUcmVlT3JUYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIG9yaWdpbmFsIHZhbHVlIG9mIHByb3BlcnR5IHRoYXQgd2FzIGNvbXB1dGVkIGJlZm9yZSBleGVjdXRpb24gb2YgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRPcmdWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yZ1ZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1cGRhdGUgc2l6ZSBvZiBwcmV2dmFsdWVzIGFycmF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1NpemVcIj48L3BhcmFtPlxyXG4gIHVwZGF0ZVByZXZWYWx1ZUFycmF5KG5ld1NpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLlNob3VsZFNraXBSZWZyZXNoKCkpXHJcbiAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuU2V0U2l6ZShuZXdTaXplKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2xlYXIgX3ByZXZWYWx1ZXMgYXJyYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3U2l6ZVwiPjwvcGFyYW0+XHJcbiAgY2xlYXJQcmV2VmFsdWVBcnJheSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXZWYWx1ZXMuQ2xlYXIoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFJlc2V0UHJldlZhbHVlQXJyYXkoKTogdm9pZCB7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlciA9IHRoaXMuX3ByZXZWYWx1ZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5fcHJldlZhbHVlcy5DbGVhcigpO1xyXG4gICAgdGhpcy5fcHJldlZhbHVlcy5TZXRTaXplKGNvdW50KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb21wdXRlIGFuZCBzZXQgYXJyYXlzIHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc2V0UHJldkFycmF5U2l6ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSB8fCB0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgc2l6ZTogbnVtYmVyID0gMTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICAgIGxldCBtZ0NvbnRyb2xCYXNlOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmo7XHJcbiAgICAgICAgaWYgKG1nQ29udHJvbEJhc2UuSXNSZXBlYXRhYmxlKVxyXG4gICAgICAgICAgc2l6ZSA9IG1nQ29udHJvbEJhc2UuZ2V0Rm9ybSgpLmdldFRhYmxlSXRlbXNDb3VudCgpO1xyXG4gICAgICAgIGVsc2UgaWYgKG1nQ29udHJvbEJhc2UuaXNUYWJsZUNvbnRyb2woKSAmJiBQcm9wZXJ0eS5pc1JlcGVhdGFibGVJblRhYmxlKHRoaXMuX2lkKSlcclxuICAgICAgICAgIHNpemUgPSBtZ0NvbnRyb2xCYXNlLmdldEZvcm0oKS5nZXRUYWJsZUl0ZW1zQ291bnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fcHJldlZhbHVlcy5TZXRTaXplKHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhc3N3b3JkIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uUGFzc3dvcmQoKSB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpXHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcy5nZXRPYmplY3RCeVBhcmVudE9iaigpLCB0aGlzLmdldExpbmUoKSwgSHRtbFByb3BlcnRpZXMuUGFzc3dvcmQsIHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uUGFzc3dvcmQoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHVzZXIgcHJvcGVydHkgVGl0bGVQYWRkaW5nIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGNvbXB1dGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgZm9yIChsZXQgW2N1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21Qcm9wZXJ0eVZhbHVlXSBvZiB0aGlzLmN1c3RvbVByb3BlcnRpZXMpIHtcclxuICAgICAgbGV0IGxlbjogbnVtYmVyID0gMjU1O1xyXG4gICAgICBsZXQgd2FzRXZhbHVhdGVkOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbShmYWxzZSk7XHJcbiAgICAgIGxldCBleHByZXNzaW9uID0gY3VzdG9tUHJvcGVydHlWYWx1ZTtcclxuICAgICAgLy8gaW5pdCB0aGUgdmFsdWVcclxuICAgICAgbGV0IHJldEV4cHJlc3Npb25WYWx1ZSA9IGF3YWl0IHRoaXMuR2V0UmV0cnVuVmFsdWVGb3JDdXN0b21Qcm9wZXJ0eUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcbiAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1ZhbHVlcy5zZXQoY3VzdG9tUHJvcGVydHlLZXksIHJldEV4cHJlc3Npb25WYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNvbXB1dGUgY3VzdG9tIHZhbGlkYXRvcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgY29tcHV0ZUN1c3RvbVZhbGlkYXRvcnMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgbWdDb250cm9sID0gPE1nQ29udHJvbEJhc2U+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgaWYgKG1nQ29udHJvbC5Nb2RpZmllZEJ5VXNlciB8fCBtZ0NvbnRyb2wuVmFsaWRhdGVDb250cm9sIHx8IHRoaXMuR2V0VGFza0J5UGFyZW50T2JqZWN0KCkuSXNJblJlY29tcHV0ZSgpKXtcclxuICAgICAgZm9yIChsZXQgW2N1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21WYWxpZGF0b3JQcm9wZXJ0eV0gb2YgdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IGxlbjogbnVtYmVyID0gMjU1O1xyXG4gICAgICAgIGxldCB3YXNFdmFsdWF0ZWQ6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKGZhbHNlKTtcclxuICAgICAgICBsZXQgZXhwcmVzc2lvbiA9ICg8Q3VzdG9tVmFsaWRhdG9yUHJvcD5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0eSkuX2V4cDtcclxuICAgICAgICAvLyBpbml0IHRoZSB2YWx1ZVxyXG4gICAgICAgIGxldCBpc0luVmFsaWQgPSBhd2FpdCB0aGlzLkdldFJldHJ1blZhbHVlRm9yQ3VzdG9tUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gICAgICAgIGxldCBlcnJTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBJblZhbGlkID0gKGlzSW5WYWxpZCA9PT0gXCIxXCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGlmIChJblZhbGlkKSB7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gKDxDdXN0b21WYWxpZGF0b3JQcm9wPmN1c3RvbVZhbGlkYXRvclByb3BlcnR5KS5fZXJyb3JNZXNzYWdlRXhwO1xyXG4gICAgICAgICAgaWYgKGV4cHJlc3Npb24gPiAwKVxyXG4gICAgICAgICAgICBlcnJTdHJpbmcgPSBhd2FpdCB0aGlzLkdldFJldHJ1blZhbHVlRm9yQ3VzdG9tUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBlcnJTdHJpbmcgPSAoPEN1c3RvbVZhbGlkYXRvclByb3A+Y3VzdG9tVmFsaWRhdG9yUHJvcGVydHkpLl9lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbVZhbGlkYXRvclZhbHVlcy5zZXQoY3VzdG9tUHJvcGVydHlLZXksIG5ldyBDdXN0b21WYWxpZGF0b3IoIUluVmFsaWQsIGVyclN0cmluZykpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzKSlcclxuICAgICAgICBtZ0NvbnRyb2wuUmVmcmVzaERpc3BsYXkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHVzZXIgcHJvcGVydHkgVGl0bGVQYWRkaW5nIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uQ3VzdG9tUHJvcGVydGllcygpOiB2b2lkIHtcclxuXHJcbiAgICBmb3IgKGxldCBbY3VzdG9tUHJvcGVydHlLZXksIGN1c3RvbVByb3BlcnR5VmFsdWVdIG9mIHRoaXMuY3VzdG9tUHJvcGVydGllc1ZhbHVlcykge1xyXG4gICAgICAvLyB1c2UgdGhpcy5fcGFyZW50T2JqIGFuZCBub3QgdGhpcy5nZXRPYmplY3RCeVBhcmVudE9iaigpXHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlBST1BfU0VUX1VTRVJfUFJPUEVSVFksIHRoaXMuX3BhcmVudE9iaiwgdGhpcy5nZXRMaW5lKCksIGN1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21Qcm9wZXJ0eVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNldCBjdXN0b20gdmFsaWRhdG9ycyBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkN1c3RvbVZhbGlkYXRvcnMoKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBbY3VzdG9tUHJvcGVydHlLZXksIGN1c3RvbVByb3BlcnR5VmFsdWVdIG9mIHRoaXMuY3VzdG9tVmFsaWRhdG9yVmFsdWVzKSB7XHJcblxyXG4gICAgICAvLyB1c2UgdGhpcy5fcGFyZW50T2JqIGFuZCBub3QgdGhpcy5nZXRPYmplY3RCeVBhcmVudE9iaigpXHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlBST1BfU0VUX0NVU1RPTV9WQUxJREFUT1IsIHRoaXMuX3BhcmVudE9iaiwgdGhpcy5nZXRMaW5lKCksXHJcbiAgICAgICAgY3VzdG9tUHJvcGVydHlLZXksIGN1c3RvbVByb3BlcnR5VmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgQmluZGluZyBMZXZlbFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkJpbmRpbmdMZXZlbCgpXHJcbiAge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKVxyXG4gICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCB0aGlzLmdldE9iamVjdEJ5UGFyZW50T2JqKCksIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5CaW5kaW5nTGV2ZWwsIHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUludGVnZXIoKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBQcm9wZXJ0eS5CaW5kaW5nTGV2ZWwoKVwiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgb25BdXRvQ29tcGxldGVNb2RlKClcclxuICB7XHJcblxyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXN5bmMgR2V0UmV0cnVuVmFsdWVGb3JDdXN0b21Qcm9wZXJ0eUV4cHJlc3Npb24oZXhwcmVzc2lvbjogbnVtYmVyKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGxldCBsZW46IG51bWJlciA9IDI1NTtcclxuICAgIGxldCBleHBTdG9yYWdlQXR0cmlidXRlID0gdGhpcy5fcGFyZW50T2JqLkdldEV4cHJlc3Npb25TdG9yYWdlKGV4cHJlc3Npb24pO1xyXG4gICAgbGV0IHdhc0V2YWx1YXRlZDogUmVmUGFyYW08Ym9vbGVhbj4gPSBuZXcgUmVmUGFyYW0oZmFsc2UpO1xyXG4gICAgbGV0IHJldHVyblZhbHVlID0gYXdhaXQgdGhpcy5fcGFyZW50T2JqLkV2YWx1YXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBleHBTdG9yYWdlQXR0cmlidXRlLCBsZW4sIHRydWUsIFN0b3JhZ2VBdHRyaWJ1dGUuU0tJUCwgZmFsc2UsIHdhc0V2YWx1YXRlZCk7XHJcblxyXG4gICAgZXhwU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX3BhcmVudE9iai5HZXRFeHByZXNzaW9uU3RvcmFnZShleHByZXNzaW9uKTtcclxuICAgIGxldCBjb21wSWR4OiBudW1iZXIgPSB0aGlzLl9wYXJlbnRPYmouZ2V0Q29tcElkeCgpO1xyXG5cclxuICAgIHN3aXRjaCAoZXhwU3RvcmFnZUF0dHJpYnV0ZSkge1xyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQzpcclxuICAgICAgICBsZXQgdGVtcFBpYyA9IG5ldyBQSUMoXCJONi4yXCIsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgdGhpcy5fcGFyZW50T2JqLmdldENvbXBJZHgoKSk7XHJcbiAgICAgICAgaWYgKHJldHVyblZhbHVlID09IG51bGwpXHJcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IFwiRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiO1xyXG4gICAgICAgIHJldHVyblZhbHVlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKHJldHVyblZhbHVlLCBcIlwiLCB0ZW1wUGljLCBmYWxzZSwgY29tcElkeCwgZmFsc2UpLnRyaW0oKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5EQVRFOlxyXG4gICAgICAgIHRlbXBQaWMgPSBuZXcgUElDKFwiIyMvIyMvIyMjI1wiLCBleHBTdG9yYWdlQXR0cmlidXRlLCBjb21wSWR4KTtcclxuICAgICAgICByZXR1cm5WYWx1ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChyZXR1cm5WYWx1ZSwgXCJcIiwgdGVtcFBpYywgdHJ1ZSwgZmFsc2UsIGNvbXBJZHgsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlRJTUU6XHJcbiAgICAgICAgdGVtcFBpYyA9IG5ldyBQSUMoXCIjIzojIy8jIyMjXCIsIGV4cFN0b3JhZ2VBdHRyaWJ1dGUsIGNvbXBJZHgpO1xyXG4gICAgICAgIHJldHVyblZhbHVlID0gRGlzcGxheUNvbnZlcnRvci5JbnN0YW5jZS5tZzJkaXNwKHJldHVyblZhbHVlLCBcIlwiLCB0ZW1wUGljLCB0cnVlLCBmYWxzZSwgY29tcElkeCwgdHJ1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkFMUEhBOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJMT0I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9CX1ZFQ1RPUjpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLlVOSUNPREU6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OT05FOlxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBQcm9wZXJ0eS5HZXRSZXRydW5WYWx1ZUZvckN1c3RvbVByb3BlcnR5RXhwcmVzc2lvbigpIGlsbGVnYWwgZGF0YSB0eXBlOiBcIiArIGV4cFN0b3JhZ2VBdHRyaWJ1dGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICB9XHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpZHhcIj48L3BhcmFtPlxyXG4gIFJlbW92ZVByZXZWYWxJbmRleEF0KGlkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcHJldlZhbHVlcy5sZW5ndGggPiBpZHgpIHtcclxuICAgICAgdGhpcy5fcHJldlZhbHVlcy5SZW1vdmVBdChpZHgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaWR4XCI+PC9wYXJhbT5cclxuICBJbnNlcnRQcmV2VmFsQXQoaWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXZWYWx1ZXMuSW5zZXJ0KGlkeCwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJpZHhcIj48L3BhcmFtPlxyXG4gIHJlc2V0UHJldlZhbEF0KGlkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaWR4ID49IDAgJiYgaWR4IDwgdGhpcy5fcHJldlZhbHVlcy5sZW5ndGgpXHJcbiAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuc2V0X0l0ZW0oaWR4LCBudWxsKTtcclxuICB9XHJcblxyXG5cclxuICB0b1N0cmluZygpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIE5TdHJpbmcuRm9ybWF0KFwiezB9ID0gezF9IChleHA9ezJ9LCBzdHVkaW8gdmFsdWU9ezN9KVwiLCBbXHJcbiAgICAgIFByb3BEZWZhdWx0cy5HZXRQcm9wZXJ0eU5hbWUodGhpcy5faWQpLCAodGhpcy5fdmFsID09PSBudWxsKSA/IFwiaXMgbnVsbFwiIDogdGhpcy5fdmFsLCB0aGlzLl9leHBJZCwgdGhpcy5TdHVkaW9WYWx1ZVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldERlZmF1bHRQcm9wKCkgcmV0dXJucyBhIHByb3BlcnR5IHRoYXQgaGFzIGEgc3lzdGVtIGRlZmF1bHQgdmFsdWUuXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInByb3BJZFwiPlRoZSBwcm9wZXJ0eSBpZDwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwYXJlbnRUeXBlXCI+UEFSRU5UX1RZUEVfQ09OVFJPTCwgUEFSRU5UX1RZUEVfRk9STSwgUEFSRU5UX1RZUEVfVEFTSzwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wUGFyZW50XCI+PC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IFByb3BlcnR5IHRoYXQgaGFzIGEgc3lzdGVtIGRlZmF1bHQgdmFsdWU8L3JldHVybnM+XHJcbiAgc3RhdGljIGdldERlZmF1bHRQcm9wKHByb3BJZDogbnVtYmVyLCBwYXJlbnRUeXBlOiBzdHJpbmcsIHByb3BQYXJlbnQ6IFByb3BQYXJlbnRJbnRlcmZhY2UpOiBQcm9wZXJ0eSB7XHJcbiAgICBsZXQgcHJvcDogUHJvcGVydHkgPSBudWxsO1xyXG4gICAgbGV0IG1nVmFsOiBzdHJpbmcgPSBQcm9wRGVmYXVsdHMuZ2V0RGVmYXVsdFZhbHVlKHByb3BJZCwgcGFyZW50VHlwZSwgcHJvcFBhcmVudCk7XHJcblxyXG4gICAgaWYgKG1nVmFsICE9PSBudWxsKVxyXG4gICAgICBwcm9wID0gbmV3IFByb3BlcnR5KHByb3BJZCwgcHJvcFBhcmVudCwgcGFyZW50VHlwZSwgbWdWYWwpO1xyXG5cclxuICAgIHJldHVybiBwcm9wO1xyXG4gIH1cclxuXHJcbiAgSW5zZXJ0UHJldlZhbHVlQXJyYXkoaWR4OiBudW1iZXIsIGNvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5TaG91bGRTa2lwUmVmcmVzaCgpKVxyXG4gICAgICB0aGlzLl9wcmV2VmFsdWVzLkluc2VydFJhbmdlKGlkeCwgbmV3IEFycmF5KGNvdW50KSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
1402
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUHJvcGVydHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWkvc3JjL21hbmFnZW1lbnQvZ3VpL1Byb3BlcnR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLEtBQUssRUFDTCxLQUFLLEVBQ0wsSUFBSSxFQUNKLE9BQU8sRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDZCxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFDTCxTQUFTLEVBRVQsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFNBQVMsRUFDVixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBRTNGLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFNUIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJdEQsTUFBTSxPQUFPLG1C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QixDQUFDO1lBQ3JDLEtBQUssYUFBYSxDQUFDLGlCQUFpQixDQUFDO1lBQ3JDLEtBQUssYUFBYSxDQUFDLHdCQUF3QixDQUFDO1lBQzVDLEtBQUssYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQ3hDLEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLEtBQUssYUFBYSxDQUFDLGtCQUFrQixDQUFDO1lBQ3RDLEtBQUssYUFBYSxDQUFDLG1CQUFtQixDQUFDO1lBQ3ZDLEtBQUssYUFBYSxDQUFDLG1CQUFtQixDQUFDO1lBQ3ZDLEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLEtBQUssYUFBYSxDQUFDLG1DQUFtQyxDQUFDO1lBQ3ZELEtBQUssYUFBYSxDQUFDLDRCQUE0QixDQUFDO1lBQ2hELEtBQUssYUFBYSxDQUFDLDBCQUEwQixDQUFDO1lBQzlDLEtBQUssYUFBYSxDQUFDLHVCQUF1QixDQUFDO1lBQzNDLEtBQUssYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQ3hDLEtBQUssYUFBYSxDQUFDLHFCQUFxQixDQUFDO1lBQ3pDLEtBQUssYUFBYSxDQUFDLDZCQUE2QixDQUFDO1lBQ2pELEtBQUssYUFBYSxDQUFDLDRCQUE0QixDQUFDO1lBQ2hELEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLEtBQUssYUFBYSxDQUFDLHVCQUF1QixDQUFDO1lBQzNDLEtBQUssYUFBYSxDQUFDLHVCQUF1QixDQUFDO1lBQzNDLEtBQUssYUFBYSxDQUFDLHlCQUF5QixDQUFDO1lBQzdDLEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLEtBQUssYUFBYSxDQUFDLHVCQUF1QixDQUFDO1lBQzNDLEtBQUssYUFBYSxDQUFDLDhCQUE4QixDQUFDO1lBQ2xELEtBQUssYUFBYSxDQUFDLG9CQUFvQixDQUFDO1lBQ3hDLEtBQUssYUFBYSxDQUFDLHdCQUF3QixDQUFDO1lBQzVDLEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQzFDLEtBQUssYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lB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LEdBQVcsRUFBRSxLQUFhO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQzs7QUE1NURjLDRCQUFtQixHQUFRLElBQUksQ0FBQztBQWlCeEMsbUJBQVUsR0FBZSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQXBwbGljYXRpb25FeGNlcHRpb24sXHJcbiAgRGVidWcsXHJcbiAgSW50MzIsXHJcbiAgTGlzdCxcclxuICBOTnVtYmVyLFxyXG4gIE5TdHJpbmcsXHJcbiAgUmVmUGFyYW0sXHJcbiAgU3RyaW5nQnVpbGRlclxyXG59IGZyb20gJ0BtYWdpYy14cGEvbXNjb3JlbGliJztcclxuaW1wb3J0IHtcclxuICBDb25zdGFudHMsXHJcbiAgQ3RybEJ1dHRvblR5cGVHdWksXHJcbiAgTG9nZ2VyX0xvZ0xldmVscyxcclxuICBNZ0NvbnRyb2xUeXBlLFxyXG4gIFN0b3JhZ2VBdHRyaWJ1dGUsXHJcbiAgU3RyVXRpbCxcclxuICBVdGlsSW1lSnBuLFxyXG4gIFV0aWxTdHJCeXRlTW9kZSxcclxuICBYTUxDb25zdGFudHMsXHJcbiAgWG1sUGFyc2VyXHJcbn0gZnJvbSAnQG1hZ2ljLXhwYS91dGlscyc7XHJcbmltcG9ydCB7IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIgfSBmcm9tICcuLi90YXNrcy9UYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyJztcclxuaW1wb3J0IHsgUHJvcFBhcmVudEludGVyZmFjZSB9IGZyb20gJy4uLy4uL2d1aS9Qcm9wUGFyZW50SW50ZXJmYWNlJztcclxuaW1wb3J0IHsgUElDIH0gZnJvbSAnLi9QSUMnO1xyXG5pbXBvcnQgeyBUYXNrRGVmaW5pdGlvbklkIH0gZnJvbSAnLi4vdGFza3MvVGFza0RlZmluaXRpb25JZCc7XHJcbmltcG9ydCB7IEV2ZW50cyB9IGZyb20gJy4uLy4uL0V2ZW50cyc7XHJcbmltcG9ydCB7IEd1aUNvbnN0YW50cyB9IGZyb20gJy4uLy4uL0d1aUNvbnN0YW50cyc7XHJcbmltcG9ydCB7IFByb3BJbnRlcmZhY2UgfSBmcm9tICcuL1Byb3BJbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyIH0gZnJvbSAnLi9HdWlDb250cm9sUHJvcGVydHlBZGFwdGVyJztcclxuaW1wb3J0IHsgRGlzcGxheUNvbnZlcnRvciB9IGZyb20gJy4vRGlzcGxheUNvbnZlcnRvcic7XHJcbmltcG9ydCB7IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIgfSBmcm9tICcuL0d1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXInO1xyXG5pbXBvcnQgeyBDb21tYW5kcyB9IGZyb20gJy4uLy4uL0NvbW1hbmRzJztcclxuaW1wb3J0IHsgQ29tbWFuZFR5cGUsIEh0bWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vR3VpRW51bXMnO1xyXG5pbXBvcnQgeyBHdWlUYXNrQmFzZSB9IGZyb20gJy4uL3Rhc2tzL0d1aVRhc2tCYXNlJztcclxuaW1wb3J0IHsgUHJvcERlZmF1bHRzIH0gZnJvbSAnLi9Qcm9wRGVmYXVsdHMnO1xyXG5pbXBvcnQgeyBUb29sVGlwSGVscCB9IGZyb20gJy4vSGVscHMnO1xyXG5pbXBvcnQgeyBHdWlFbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL0d1aUVudmlyb25tZW50JztcclxuaW1wb3J0IHsgTWdDb250cm9sQmFzZSB9IGZyb20gJy4vTWdDb250cm9sQmFzZSc7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSBcInV0aWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21WYWxpZGF0b3JQcm9wIHtcclxuICBfZXhwOiBudW1iZXI7XHJcbiAgX2Vycm9yTWVzc2FnZUV4cDogbnVtYmVyO1xyXG4gIF9lcnJvck1lc3NhZ2U6IHN0cmluZztcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21WYWxpZGF0b3Ige1xyXG4gIF92YWxpZDogYm9vbGVhbjtcclxuICBfZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZhbGlkOiBib29sZWFuLCBlcnJNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3ZhbGlkID0gdmFsaWQ7XHJcbiAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSBlcnJNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVmFsaWQoKTogYm9vbGVhbiB7cmV0dXJuIHRoaXMuX3ZhbGlkO31cclxuICBwdWJsaWMgZ2V0RXJyTWVzc2FnZSgpOiBzdHJpbmcge3JldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7fVxyXG59XHJcblxyXG4vLy8gPHN1bW1hcnk+XHJcbi8vLyAgIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIFByb3BlcnR5IG9iamVjdCBvZiBjb250cm9sLCBmb3JtIG9yIHRhc2suXHJcbi8vLyA8L3N1bW1hcnk+XHJcbmV4cG9ydCBjbGFzcyBQcm9wZXJ0eSB7XHJcbiAgcHJpdmF0ZSBfaWQ6IG51bWJlciA9IEludDMyLk1pblZhbHVlO1xyXG4gIHByaXZhdGUgX2RhdGFUeXBlOiBTdG9yYWdlQXR0cmlidXRlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gIHByaXZhdGUgX3ZhbDogc3RyaW5nID0gbnVsbDtcclxuICBwcml2YXRlIF9waWM6IFBJQyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZXhwSWQ6IG51bWJlciA9IDA7XHJcbiAgcHJpdmF0ZSBfcGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlID0gbnVsbDsgLy8gYSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBvYmplY3QgKENvbnRyb2wsIEZvcm0sIEd1aVRhc2tCYXNlKVxyXG4gIHByaXZhdGUgX3BhcmVudFR5cGU6IHN0cmluZyA9IG51bGw7IC8vIENvbnRyb2x8Rm9ybXxHdWlUYXNrQmFzZVxyXG4gIHByaXZhdGUgX3ByZXZWYWx1ZXM6IExpc3Q8c3RyaW5nPiA9IG51bGw7IC8vIHJldmVyZW5jZSB0byBwcm9wZXJ0eSB2YWx1ZXMgaW4gYSB0YWJsZVxyXG4gIHByaXZhdGUgX29yZ1ZhbHVlOiBzdHJpbmcgPSBudWxsOyAvLyByZXZlcmVuY2UgdG8gcHJvcGVydHkgdmFsdWVzIGluIGEgdGFibGVcclxuICBwcml2YXRlIHN0YXRpYyBfbnVtZXJpY1Byb3BlcnR5UGljOiBQSUMgPSBudWxsO1xyXG4gIHByaXZhdGUgX3Rhc2tEZWZpbml0aW9uSWQ6IFRhc2tEZWZpbml0aW9uSWQgPSBudWxsOyAvLyB0YXNrIGRlZmluaXRpb24gYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm9wZXJ0eS5cclxuICAvLyBzdHVkaW9WYWx1ZSBmb3Igb2ZmbGluZSBzdGF0ZVxyXG4gIC8vIFRvRG86IGNvbW1lbnQgc2F5cyB0aGF0IGl0IGlzIGZvciBcIk9mZmxpbmUgc3RhdGVcIi4gU28sIGRvIHdlIG5lZWQgaXQgaW5XZWJDbGllbnQ/XHJcbiAgU3R1ZGlvVmFsdWU6IHN0cmluZyA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfZXhwQWxyZWFkeUNvbXB1dGVkT25jZTogYm9vbGVhbiA9IGZhbHNlOyAvLyB0aGUgZXhwcmVzc2lvbiBpcyBhbHJlYWR5IGNvbXB1dGVkIG9uY2VcclxuXHJcbiAgLy8gZm9yIHdlYiBjbGllbnQgOlxyXG4gIC8vIHNhdmUgdGhlIGN1c3RvbSBwcm9wZXJ0aWVzIHRoYXQgZGVmaW5lIGJ5IHRoZSB1c2VyXHJcbiAgcHJpdmF0ZSBjdXN0b21Qcm9wZXJ0aWVzOiBNYXA8c3RyaW5nLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gIHByaXZhdGUgY3VzdG9tUHJvcGVydGllc1ZhbHVlczogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgLy8gZm9yIHdlYiBjbGllbnQgOlxyXG4gIC8vIHNhdmUgdGhlIGN1c3RvbSB2YWxpZGF0b3JzIHRoYXQgZGVmaW5lIGJ5IHRoZSB1c2VyXHJcbiAgcHJpdmF0ZSBjdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzOiBNYXA8c3RyaW5nLCBDdXN0b21WYWxpZGF0b3JQcm9wPiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGN1c3RvbVZhbGlkYXRvclZhbHVlczogTWFwPHN0cmluZywgQ3VzdG9tVmFsaWRhdG9yPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgc3RhdGljIFV0aWxJbWVKcG46IFV0aWxJbWVKcG4gPSAoVXRpbFN0ckJ5dGVNb2RlLmlzTG9jYWxlRGVmTGFuZ0pQTigpID8gbmV3IFV0aWxJbWVKcG4oKSA6IG51bGwpOyAvLyBKUE46IElNRSBzdXBwb3J0XHJcblxyXG4gIC8vIHRhc2sgZGVmaW5pdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3BlcnR5LlxyXG4gIGdldCBUYXNrRGVmaW5pdGlvbklkKCk6IFRhc2tEZWZpbml0aW9uSWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Rhc2tEZWZpbml0aW9uSWQ7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpO1xyXG4gIGNvbnN0cnVjdG9yKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcpO1xyXG4gIGNvbnN0cnVjdG9yKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcsIHZhbDogc3RyaW5nKTtcclxuICBjb25zdHJ1Y3RvcihjSWQ/OiBudW1iZXIsIGNQYXJlbnRPYmo/OiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlPzogc3RyaW5nLCB2YWw/OiBzdHJpbmcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzAoKTtcclxuXHJcbiAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAzKVxyXG4gICAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY0lkLCBjUGFyZW50T2JqLCBwYXJUeXBlKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jb25zdHJ1Y3Rvcl8yKGNJZCwgY1BhcmVudE9iaiwgcGFyVHlwZSwgdmFsKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY29uc3RydWN0b3JfMCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXZWYWx1ZXMgPSBuZXcgTGlzdCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8xKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMuY29uc3RydWN0b3JfMCgpO1xyXG4gICAgdGhpcy5zZXRJZChjSWQpO1xyXG4gICAgdGhpcy5fcGFyZW50T2JqID0gY1BhcmVudE9iajtcclxuICAgIHRoaXMuX3BhcmVudFR5cGUgPSBwYXJUeXBlO1xyXG4gICAgdGhpcy5zZXREYXRhVHlwZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcl8yKGNJZDogbnVtYmVyLCBjUGFyZW50T2JqOiBQcm9wUGFyZW50SW50ZXJmYWNlLCBwYXJUeXBlOiBzdHJpbmcsIHZhbDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbnN0cnVjdG9yXzEoY0lkLCBjUGFyZW50T2JqLCBwYXJUeXBlKTtcclxuICAgIHRoaXMuc2V0VmFsdWUodmFsKTtcclxuICAgIHRoaXMuc2V0T3JnVmFsdWUoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIGlkIG9mIHRoaXMgcHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc2V0SWQoY0lkOiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2lkID0gY0lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE5lZWQgcGFydCBpbnB1dCBTdHJpbmcgdG8gcmVsZXZhbnQgZm9yIHRoZSBjbGFzcyBkYXRhXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcInBhcmVudFJlZlwiPnJlZmVyZW5jZSB0byBwYXJlbnQgPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJwYXJUeXBlXCI+PC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ0YXNrXCI+PC9wYXJhbT5cclxuICBmaWxsRGF0YShwYXJlbnRSZWY6IFByb3BQYXJlbnRJbnRlcmZhY2UsIHBhclR5cGU6IHN0cmluZywgcGFyc2VyOiBYbWxQYXJzZXIpIHtcclxuICAgIGxldCBlbmRDb250ZXh0OiBudW1iZXIgPSBwYXJzZXIuZ2V0WE1MZGF0YSgpLmluZGV4T2YoXCI+XCIsIHBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudE9iaiA9PT0gbnVsbCAmJiBwYXJlbnRSZWYgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fcGFyZW50T2JqID0gcGFyZW50UmVmO1xyXG4gICAgICB0aGlzLl9wYXJlbnRUeXBlID0gcGFyVHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZW5kQ29udGV4dCAhPT0gLTEgJiYgZW5kQ29udGV4dCA8IHBhcnNlci5nZXRYTUxkYXRhKCkubGVuZ3RoKSB7XHJcbiAgICAgIC8vIGxhc3QgcG9zaXRpb24gb2YgaXRzIHRhZ1xyXG4gICAgICBsZXQgdGFnOiBzdHJpbmcgPSBwYXJzZXIuZ2V0WE1Mc3Vic3RyaW5nKGVuZENvbnRleHQpO1xyXG4gICAgICBwYXJzZXIuYWRkMkN1cnJJbmRleCh0YWcuaW5kZXhPZihYTUxDb25zdGFudHMuTUdfVEFHX1BST1ApICsgWE1MQ29uc3RhbnRzLk1HX1RBR19QUk9QLmxlbmd0aCk7XHJcblxyXG4gICAgICBsZXQgdG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4gPSBYbWxQYXJzZXIuZ2V0VG9rZW5zKHBhcnNlci5nZXRYTUxzdWJzdHJpbmcoZW5kQ29udGV4dCksIFhNTENvbnN0YW50cy5YTUxfQVRUUl9ERUxJTSk7XHJcbiAgICAgIGlmIChFdmVudHMuU2hvdWxkTG9nKExvZ2dlcl9Mb2dMZXZlbHMuRGV2ZWxvcG1lbnQpKSB7XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRGV2VG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJJbiBQcm9wLkZpbGxEYXRhKCk6IHswfVwiLCB0b2tlbnNWZWN0b3IudG9TdHJpbmcoKSkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmluaXRFbGVtZW50cyh0b2tlbnNWZWN0b3IpO1xyXG5cclxuICAgICAgcGFyc2VyLnNldEN1cnJJbmRleChlbmRDb250ZXh0ICsgWE1MQ29uc3RhbnRzLlRBR19DTE9TRS5sZW5ndGgpO1xyXG5cclxuICAgICAgLy8gZGVhbCB3aXRoIGludGVybmFsIHRhZ3NcclxuICAgICAgdGhpcy5Jbml0SW5uZXJPYmplY3RzKHBhcnNlcik7XHJcblxyXG4gICAgICAvLyBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdGhpcyB0eXBlcyBuZWVkIHNldCBwYXJhbWV0ZXJzIHRvIHRoZSBwYXJlbnQgLSBDT05UUk9MIChpbiB0aGlzIGNhc2UpXHJcbiAgICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTClcclxuICAgICAgICB0aGlzLnNldENvbnRyb2xBdHRyaWJ1dGVzKCk7XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNKVxyXG4gICAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuU2V0U2l6ZSgxKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coXCJJbiBQcm9wZXJ0eS5GaWxsRGF0YSgpOiBPdXQgb2Ygc3RyaW5nIGJvdW5kc1wiKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdElubmVyT2JqZWN0cyh4bWxQYXJzZXI6IFhtbFBhcnNlcik6IHZvaWQge1xyXG4gICAgbGV0IG5leHRUYWc6IHN0cmluZyA9IHhtbFBhcnNlci5nZXROZXh0VGFnKCk7XHJcblxyXG4gICAgaWYgKG5leHRUYWcgPT09IFhNTENvbnN0YW50cy5NR19UQUdfVEFTS0RFRklOSVRJT05JRF9FTlRSWSkge1xyXG4gICAgICBsZXQgeG1sQnVmZmVyOiBzdHJpbmcgPSB4bWxQYXJzZXIuUmVhZFRvRW5kT2ZDdXJyZW50RWxlbWVudCgpO1xyXG4gICAgICB0aGlzLkluaXRUYXNrRGVmaW5pdGlvbklkKHhtbEJ1ZmZlcik7XHJcblxyXG4gICAgICBsZXQgZW5kQ29udGV4dDogbnVtYmVyID0geG1sUGFyc2VyLmdldFhNTGRhdGEoKS5pbmRleE9mKFhNTENvbnN0YW50cy5NR19UQUdfUFJPUCArIFhNTENvbnN0YW50cy5UQUdfQ0xPU0UsIHhtbFBhcnNlci5nZXRDdXJySW5kZXgoKSk7XHJcbiAgICAgIHhtbFBhcnNlci5zZXRDdXJySW5kZXgoZW5kQ29udGV4dCArIChYTUxDb25zdGFudHMuTUdfVEFHX1BST1AgKyBYTUxDb25zdGFudHMuVEFHX0NMT1NFKS5sZW5ndGgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIE1ha2UgaW5pdGlhbGl6YXRpb24gb2YgcHJpdmF0ZSBlbGVtZW50cyBieSBmb3VuZCB0b2tlbnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwidG9rZW5zVmVjdG9yXCI+Zm91bmQgdG9rZW5zLCB3aGljaCBjb25zaXN0IGF0dHJpYnV0ZS92YWx1ZSBvZiBldmVyeSBmb3VuZCBlbGVtZW50IDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBpbml0RWxlbWVudHModG9rZW5zVmVjdG9yOiBMaXN0PHN0cmluZz4pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGo6IG51bWJlciA9IDA7IGogPCB0b2tlbnNWZWN0b3IubGVuZ3RoOyBqICs9IDIpIHtcclxuICAgICAgbGV0IGF0dHJpYnV0ZTogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqKSk7XHJcbiAgICAgIGxldCB2YWx1ZVN0cjogc3RyaW5nID0gKHRva2Vuc1ZlY3Rvci5nZXRfSXRlbShqICsgMSkpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0lEOlxyXG4gICAgICAgICAgdGhpcy5zZXRJZChYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICB0aGlzLnNldERhdGFUeXBlKCk7IC8vIFRoZSAnbmFtZScgbWVtYmVyIG11c3QgYmUgZm91bmQgaW4gdGhpcyBwb2ludFxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9TVFVESU9fVkFMVUU6XHJcbiAgICAgICAgICB0aGlzLlN0dWRpb1ZhbHVlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfVkFMVUU6XHJcbiAgICAgICAgICBpZiAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9QUk9QRVJUSUVTKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSW5pdEN1c3RvbVByb3BlcnRpZXMoWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9WQUxJREFUT1JTKSB7XHJcbiAgICAgICAgICAgIHRoaXMuSW5pdEN1c3RvbVZhbGlkYXRpb25Qcm9wZXJ0aWVzKFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cikpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbCA9IFhtbFBhcnNlci51bmVzY2FwZSh2YWx1ZVN0cik7XHJcbiAgICAgICAgICAgIHRoaXMuX29yZ1ZhbHVlID0gdGhpcy5fdmFsO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9FWFA6XHJcbiAgICAgICAgICB0aGlzLl9leHBJZCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2V4cElkID4gMCAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9PTFRJUClcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhVHlwZSgpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOlxyXG4gICAgICAgICAgLy8gTmFtZSBpcyBvbmx5IHNlcmlhbGl6ZWQgZm9yIGRlYnVnIHZlcnNpb24gLlxyXG4gICAgICAgICAgLy8gVG8gYXZvaWQgZXhjZXB0aW9ucywgYWRkIGEgYmxhbmsgY2FzZSBmb3IgaXRcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfQ1RMX0lEWDpcclxuICAgICAgICAgIHRoaXMuX3Rhc2tEZWZpbml0aW9uSWQuQ3RsSW5kZXggPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfUFJPR1JBTV9JU046XHJcbiAgICAgICAgICB0aGlzLl90YXNrRGVmaW5pdGlvbklkLlByb2dyYW1Jc24gPSBYbWxQYXJzZXIuZ2V0SW50KHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlRoZXJlIGlzIG5vIHN1Y2ggdGFnIGluIFByb3BlcnR5IGNsYXNzLiBJbnNlcnQgY2FzZSB0byBQcm9wZXJ0eS5pbml0RWxlbWVudHMgZm9yIHswfVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gaWYgdGhlIHByb3BlcnR5IGlzIGFscmVhZHkgY29tcHV0ZSBpbiB0aGUgc2VydmVyICwgdGhlbiBzZXQgX2V4cEFscmVhZHlDb21wdXRlZE9uY2VcclxuICAgICAgaWYgKHRoaXMuSXNDb21wdXRlZE9uY2VPblNlcnZlcigpKVxyXG4gICAgICAgIHRoaXMuX2V4cEFscmVhZHlDb21wdXRlZE9uY2UgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBpbml0IHRoZSBjdXN0b20gcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBJbml0Q3VzdG9tUHJvcGVydGllcyhjdXN0b21Qcm9wcnRpZXNTdHI6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5jdXN0b21Qcm9wZXJ0aWVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oSlNPTi5wYXJzZShjdXN0b21Qcm9wcnRpZXNTdHIpKTtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRPYmouSXNGaXJzdFJlZnJlc2hPZlByb3BzKCkpXHJcbiAgICAgIHRoaXMuU2V0Rmlyc3RWYWx1ZUZvckN1c3RvbVByb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG4gIC8vIEluaXQgQ3VzdG9tVmFsaWRhdG9yXHJcbiAgcHJpdmF0ZSBJbml0Q3VzdG9tVmFsaWRhdG9yIChwYXJzZXIgOiBYbWxQYXJzZXIpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgdGV4dDogc3RyaW5nID0gcGFyc2VyLlJlYWRUb0VuZE9mQ3VycmVudEVsZW1lbnQoKTtcclxuICAgIHRleHQgPSB0ZXh0LnN1YnN0cih0ZXh0LmluZGV4T2YoWE1MQ29uc3RhbnRzLk1HX1RBR19DVVNUT01fVkFMSURBVE9SKSArIFhNTENvbnN0YW50cy5NR19UQUdfQ1VTVE9NX1ZBTElEQVRPUi5sZW5ndGgpO1xyXG4gICAgbGV0IHRva2VuczogTGlzdDxzdHJpbmc+ID0gWG1sUGFyc2VyLmdldFRva2Vucyh0ZXh0LCBYTUxDb25zdGFudHMuWE1MX0FUVFJfREVMSU0pO1xyXG5cclxuICAgIGxldCBjID0gbmV3IEN1c3RvbVZhbGlkYXRvclByb3AoKTtcclxuICAgIGxldCBrZXk7XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0b2tlbnMubGVuZ3RoOyBqICs9IDIpXHJcbiAgICB7XHJcbiAgICAgIGxldCBhdHRyaWJ1dGU6IHN0cmluZyA9IHRva2Vucy5nZXRfSXRlbShqKTtcclxuICAgICAgbGV0IHZhbHVlU3RyOiBzdHJpbmcgPSB0b2tlbnMuZ2V0X0l0ZW0oaiArIDEpO1xyXG5cclxuICAgICAgc3dpdGNoIChhdHRyaWJ1dGUpIHtcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VYUDpcclxuICAgICAgICAgIGMuX2V4cCA9IFhtbFBhcnNlci5nZXRJbnQodmFsdWVTdHIpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfQVRUUl9OQU1FOlxyXG4gICAgICAgICAga2V5ID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgWE1MQ29uc3RhbnRzLk1HX0FUVFJfRVJST1JfRVhQOlxyXG4gICAgICAgICAgYy5fZXJyb3JNZXNzYWdlRXhwID0gWG1sUGFyc2VyLmdldEludCh2YWx1ZVN0cik7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19BVFRSX0VSUk9SOlxyXG4gICAgICAgICAgYy5fZXJyb3JNZXNzYWdlID0gWG1sUGFyc2VyLnVuZXNjYXBlKHZhbHVlU3RyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzLnNldCAoa2V5LCBjKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaW5pdCB0aGUgY3VzdG9tIHZhbGlkYXRpb24gcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBJbml0Q3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoY3VzdG9tUHJvcHJ0aWVzU3RyOiBzdHJpbmcpOiB2b2lkIHtcclxuXHJcbiAgICBsZXQgcGFyc2VyID0gbmV3IFhtbFBhcnNlcihjdXN0b21Qcm9wcnRpZXNTdHIpO1xyXG4gICAgbGV0IGN1cnJUYWdOYW1lID0gcGFyc2VyLmdldE5leHRUYWcoKTtcclxuICAgIHdoaWxlIChjdXJyVGFnTmFtZSAhPSBudWxsKVxyXG4gICAge1xyXG4gICAgICBzd2l0Y2ggKGN1cnJUYWdOYW1lKVxyXG4gICAgICB7XHJcbiAgICAgICAgY2FzZSBYTUxDb25zdGFudHMuTUdfVEFHX0NVU1RPTV9WQUxJREFUT1JTOlxyXG4gICAgICAgICAgcGFyc2VyLnNldEN1cnJJbmRleDJFbmRPZlRhZygpO1xyXG4gICAgICAgICAgdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzID0gbmV3IE1hcDxzdHJpbmcsIEN1c3RvbVZhbGlkYXRvclByb3A+KCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFhNTENvbnN0YW50cy5NR19UQUdfQ1VTVE9NX1ZBTElEQVRPUjpcclxuICAgICAgICAgIHRoaXMuSW5pdEN1c3RvbVZhbGlkYXRvciAocGFyc2VyKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBwYXJzZXIuc2V0Q3VyckluZGV4MkVuZE9mVGFnKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICBjdXJyVGFnTmFtZSA9IHBhcnNlci5nZXROZXh0VGFnKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudE9iai5Jc0ZpcnN0UmVmcmVzaE9mUHJvcHMoKSlcclxuICAgICAgdGhpcy5TZXRGaXJzdFZhbHVlRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIFNldEZpcnN0VmFsdWVGb3JDdXN0b21WYWxpZGF0aW9uUHJvcGVydGllcygpOiB2b2lkIHtcclxuXHJcbiAgICAgIGZvciAobGV0IGN1c3RvbVByb3BlcnR5IG9mIHRoaXMuY3VzdG9tVmFsaWRhdG9yUHJvcGVydGllcy5rZXlzKCkpIHtcclxuICAgICAgbGV0IGMgOiBDdXN0b21WYWxpZGF0b3JQcm9wID0gdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzLmdldChjdXN0b21Qcm9wZXJ0eSk7XHJcbiAgICAgIHRoaXMuY3VzdG9tVmFsaWRhdG9yVmFsdWVzLnNldCg8c3RyaW5nPmN1c3RvbVByb3BlcnR5LCBuZXcgQ3VzdG9tVmFsaWRhdG9yKHRydWUsIFwiXCIpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjcmVhdGUgZnJvbSB0aGUgdmFsdWUgc3RyaW5nIGFuZCBzYXZlIGl0IGluIHZhbCAmIG9yZ1ZhbHVlXHJcbiAgICB0aGlzLl92YWwgPSB0aGlzLkdldEFycmF5VmFsdWVzRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKVxyXG4gICAgdGhpcy5fb3JnVmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIEdldEFycmF5VmFsdWVzRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKTogc3RyaW5ne1xyXG4gICAgbGV0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5jdXN0b21WYWxpZGF0b3JWYWx1ZXMudmFsdWVzKCkpO1xyXG4gICAgbGV0IHZhbHVlc1N0ciA9IEpTT04uc3RyaW5naWZ5KHZhbHVlcyk7XHJcbiAgICByZXR1cm4gdmFsdWVzU3RyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBHZXRBcnJheVZhbHVlc0ZvckN1c3RvbVByb3BlcnRpZXMoKTogc3RyaW5ne1xyXG4gICAgbGV0IHZhbHVlcyA9IEFycmF5LmZyb20odGhpcy5jdXN0b21Qcm9wZXJ0aWVzVmFsdWVzLnZhbHVlcygpKTtcclxuICAgIGxldCB2YWx1ZXNTdHIgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZXMpO1xyXG4gICAgcmV0dXJuIHZhbHVlc1N0cjtcclxufVxyXG5cclxuICBwcml2YXRlIFNldEZpcnN0VmFsdWVGb3JDdXN0b21Qcm9wZXJ0aWVzKCk6IHZvaWQge1xyXG5cclxuICAgIGZvciAobGV0IGN1c3RvbVByb3BlcnR5IG9mIHRoaXMuY3VzdG9tUHJvcGVydGllcy5rZXlzKCkpXHJcbiAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1ZhbHVlcy5zZXQoPHN0cmluZz5jdXN0b21Qcm9wZXJ0eSwgXCJcIik7XHJcblxyXG4gICAgLy8gY3JlYXRlIGZyb20gdGhlIHZhbHVlIHN0cmluZyBhbmQgc2F2ZSBpdCBpbiB2YWwgJiBvcmdWYWx1ZVxyXG4gICAgdGhpcy5fdmFsID0gdGhpcy5HZXRBcnJheVZhbHVlc0ZvckN1c3RvbVByb3BlcnRpZXMoKVxyXG4gICAgdGhpcy5fb3JnVmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHJlc2V0IF9leHBBbHJlYWR5Q29tcHV0ZWRPbmNlIGZsYWdcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFJlc2V0Q29tcHV0ZWRPbmNlRmxhZygpOiB2b2lkIHtcclxuICAgIHRoaXMuX2V4cEFscmVhZHlDb21wdXRlZE9uY2UgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgSW5pdFRhc2tEZWZpbml0aW9uSWQoeG1sQnVmZmVyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGxldCB0YXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyOiBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyID0gbmV3IFRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIodGhpcy5TZXRUYXNrRGVmaW5pdGlvbklkKTtcclxuICAgIHRhc2tEZWZpbml0aW9uSWRUYWJsZVNheEhhbmRsZXIucGFyc2UoeG1sQnVmZmVyKTtcclxuICB9XHJcblxyXG4gIC8vIGNhbGxiYWNrIGZvciBUYXNrRGVmaW5pdGlvbklkVGFibGVTYXhIYW5kbGVyXHJcbiAgU2V0VGFza0RlZmluaXRpb25JZCh0YXNrRGVmaW5pdGlvbklkOiBUYXNrRGVmaW5pdGlvbklkKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YXNrRGVmaW5pdGlvbklkID0gdGFza0RlZmluaXRpb25JZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0RGF0YVR5cGUoKTogdm9pZCB7XHJcbiAgICBsZXQgY29tcElkeDogbnVtYmVyID0gdGhpcy5fcGFyZW50T2JqLmdldENvbXBJZHgoKTtcclxuXHJcbiAgICB0aGlzLl9waWMgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9pZCA9PT0gSW50MzIuTWluVmFsdWUpIHtcclxuICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coTlN0cmluZy5Gb3JtYXQoXCJUbyBmaWxsIGRhdGFUeXBlIG1lbWJlciBpbiBQcm9wZXJ0eS5GaWxsRGF0YVR5cGUgbXVzdCBpZCE9ezB9XCIsIEludDMyLk1pblZhbHVlKSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVElUTEVfQkFSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVCUkVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01PRElGWV9JTl9RVUVSWTpcclxuXHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NZU1RFTV9NRU5VOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VORF9DT05ESVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX01PRElGWTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19DUkVBVEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfREVMRVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1FVRVJZOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0xPQ0FURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19TT1JUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19BTExPV19JTkRFWDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19MT0NBVEVfSU5fUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09ORklSTV9VUERBVEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9SQ0VfU1VGRklYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUkNFX0RFTEVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NVVNUX0lOUFVUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01PRElGSUFCTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FTkFCTEVEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTkZJUk1fQ0FOQ0VMOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFUEVBVEFCTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSElHSExJR0hUSU5HOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBU1NXT1JEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JU19DQUNIRUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJFTE9BRF9WSUVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORV9WRVJUSUNBTF9TQ1JPTEw6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX0FMTE9XX0NSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0NPTF9SRVNJWkU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUkVPUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TSE9XX0xJTkVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NPUlRfQ09MVU1OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTF9BTExPV19GSUxURVJJTkc6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRElTUExBWV9TVEFUVVNfQkFSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fUkVGUkVTSDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QQVJLX09OX0NMSUNLOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NIT1dfRlVMTF9ST1c6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBQ0tfU0VMRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NIT1dfQlVUVE9OUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MSU5FU19BVF9ST09UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0VNUFRZX0RBVEFWSUVXOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NDUk9MTF9CQVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX0RJVklERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElORV9ESVZJREVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RIUkVFX1NUQVRFUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRUZSRVNIX1dIRU5fSElEREVOOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX09QVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRBSU5fRk9DVVM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJJTlRfREFUQTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DTE9TRV9UQVNLU19CWV9NRElfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBVklFV0NPTlRST0w6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX09QRU5fVEFTS19XSU5ET1c6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX0FMTE9XX0VWRU5UUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfSU5ERVhfT1BUSU1JWkFUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19SQU5HRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19QT1NJVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfU1FMX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0JFRk9SRV85MDBfVkVSU0lPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GSUxMX1dJRFRIOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJX0NPTFVNTl9ESVNQTEFZOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lTX1JPVVRFUl9PVVRMRVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREVGQVVMVF9PVVRMRVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VSVkVSX1JFQURfQUhFQUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQVVUT19DT01QTEVURV9NT0RFX1dDOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JTUFHRV9GSUxFTkFNRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FVkFMX0VORF9DT05ESVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRlJBTUVfTkFNRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RSQVNBQ1RJT05fQkVHSU46XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1RSQU5TQUNUSU9OX01PREU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0FMTFBBUEVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FUVFJJQlVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UUklHR0VSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVF9NT0RFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfSUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCQklOR19DWUNMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QQVJBTUVURVJTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lNQUdFX0xJU1RfSU5ERVhFUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xBWUVSU19MSVNUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX09CSkVDVF9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFQUxfT0JKRUNUX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQVZJRVdDT05UUk9MX0ZJRUxEUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfUkFOR0VfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX0xPQ0FURV9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfUE9TSVRJT05fVVNBR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19NT0RFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9QUk9QRVJUSUVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9WQUxJREFUT1JTOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX1RJVExFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfTElTVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFOR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FERElUSU9OQUxfSU5GT1JNQVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEVYVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ISU5UOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9VT006XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSE9SX0ZBQzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WRVJfRkFDOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQl9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XQUxMUEFQRVJfU1RZTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU5ERVg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElOS19GSUVMRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX0ZJRUxEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BVTExET1dOX01FTlU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0lORE9XX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfU1RZTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQVVUT19GSVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkFJU0VfQVQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRVhQQU5EX1dJTkRPVzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xJTkVTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NIT0lDRV9DT0xVTU5TOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NUWUxFXzNEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPTlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTEFZRVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfV0lEVEg6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVElUTEVfSEVJR0hUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTE9SOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xFRlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9QOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RPT0xUSVA6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVMUF9TQ1I6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElORVNfSU5fVEFCTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUSU9OX1JPV1M6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSE9SSVpPTlRBTF9BTElHTk1FTlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX1dPUkRXUkFQX1NDUk9MTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ST1dfSEVJR0hUOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1dJTkRPV19XSURUSDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NQUlOX0RJU1BMQVk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJBTlNMQVRPUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRVNFVF9TVFlMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRV9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XRURfRElSRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JPV19ISUdITElHSFRfU1RZTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVkVSVElDQUxfQUxJR05NRU5UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQkJJTkdfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1RBVElDX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQlVUVE9OX1NUWUxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xPQURfSU1BR0VfRlJPTTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TVUJGT1JNX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQk9UVE9NX1BPU0lUSU9OX0lOVEVSVkFMOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NFTEVDVElPTl9NT0RFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BSR1RTS19OVU06XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEVSU0lTVEVOVF9GT1JNX1NUQVRFX1ZFUlNJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0NST0xMX0JBUl9USFVNQjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CSU5ESU5HX0xFVkVMOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NPTk5FQ1RFRF9aT09NX0NPTlRST0w6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUX1BST0dSQU06XHJcbiAgICAgICAgaWYgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UT09MVElQICYmIHRoaXMuX2V4cElkID4gMClcclxuICAgICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFO1xyXG4gICAgICAgIC8vIHBpYyB3aWxsIGJlIHNldCBhY2NvcmRpbmcgdG8gZXhwIGxlbmd0aFxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fZGF0YVR5cGUgPSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM7XHJcbiAgICAgICAgICBpZiAoUHJvcGVydHkuX251bWVyaWNQcm9wZXJ0eVBpYyA9PSBudWxsKVxyXG4gICAgICAgICAgICBQcm9wZXJ0eS5fbnVtZXJpY1Byb3BlcnR5UGljID0gbmV3IFBJQyhcIk42XCIsIFN0b3JhZ2VBdHRyaWJ1dGUuTlVNRVJJQywgY29tcElkeCk7XHJcbiAgICAgICAgICB0aGlzLl9waWMgPSBQcm9wZXJ0eS5fbnVtZXJpY1Byb3BlcnR5UGljO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRVUk5fQUNUSU9OOlxyXG4gICAgICAgIHRoaXMuX2RhdGFUeXBlID0gU3RvcmFnZUF0dHJpYnV0ZS5OT05FO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgdGhpcy5fZGF0YVR5cGUgPSAoPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmopLkRhdGFUeXBlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BPUF9VUDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUklFTlRBVElPTl9MT0NLOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOVEVSX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FWElUX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQVZJR0FUSU9OX0RSQVdFUl9NRU5VOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FDVElPTl9CQVJfTUVOVTpcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfT1BFTl9QSUNLRVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfT1BFTl9FRElUX0RJQUxPRzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ERUZBVUxUX0FMSUdOTUVOVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9LRVlCT0FSRF9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0tFWUJPQVJEX1JFVFVSTl9LRVk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfU1VHR0VTVElPTlM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTU9CSUxFX0lNQUdFX0xJU1RfRklMRV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1NXSVBFX1JFRlJFU0g6XHJcbiAgICAgICAgLy8gTm8gaGFuZGxpbmcgaXMgbmVlZGVkIGhlcmUgYXMgdGhlIHByb3BlcnRpZXMgYXJlIHZhbGlkIGZvciBtb2JpbGUgYXMgZm9yIG5vdy5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcImluIFByb3BlcnR5LnNldERhdGFUeXBlKCkgbm8gY2FzZSBmb3I6IHswfVwiLCB0aGlzLl9pZCkpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCBhdHRyaWJ1dGVzIG9mIGEgdGhlIHBhcmVudCBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIHNldENvbnRyb2xBdHRyaWJ1dGVzKCkge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudE9iaiA9PSBudWxsIHx8IHRoaXMuX3BhcmVudFR5cGUgIT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiaW4gUHJvcGVydHkuc2V0Q29udHJvbEF0dHJpYnV0ZXMoKSB0aGVyZSBpcyBubyBwYXJlbnQgb3IgdGhlIHBhcmVudCBpcyBub3QgYSBjb250cm9sXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBhcmVudENvbnRyb2wgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgIHN3aXRjaCAodGhpcy5faWQpIHtcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRV9OQU1FOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX05BTUU6XHJcbiAgICAgICAgcGFyZW50Q29udHJvbC5OYW1lID0gdGhpcy5fdmFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVFRSSUJVVEU6XHJcbiAgICAgICAgcGFyZW50Q29udHJvbC5EYXRhVHlwZSA9IDxTdG9yYWdlQXR0cmlidXRlPnRoaXMuX3ZhbFswXTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUOlxyXG4gICAgICAgIHBhcmVudENvbnRyb2wuc2V0UGljU3RyKHRoaXMuX3ZhbCwgdGhpcy5fZXhwSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SQU5HRTpcclxuICAgICAgICBwYXJlbnRDb250cm9sLnNldFJhbmdlKHRoaXMuX3ZhbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RBVEE6XHJcbiAgICAgICAgaWYgKHRoaXMuX2V4cElkID4gMClcclxuICAgICAgICAgIHBhcmVudENvbnRyb2wuc2V0VmFsRXhwKHRoaXMuX2V4cElkKTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLl92YWwgIT0gbnVsbClcclxuICAgICAgICAgIHBhcmVudENvbnRyb2wuc2V0RmllbGQodGhpcy5fdmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQlVUVE9OX1NUWUxFOlxyXG4gICAgICAgIGlmICh0aGlzLl92YWwgIT0gbnVsbClcclxuICAgICAgICAgIHBhcmVudENvbnRyb2wuQnV0dG9uU3R5bGUgPSA8Q3RybEJ1dHRvblR5cGVHdWk+dGhpcy5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQVlFUjpcclxuICAgICAgICBpZiAodGhpcy5fdmFsICE9IG51bGwpXHJcbiAgICAgICAgICBwYXJlbnRDb250cm9sLkxheWVyID0gdGhpcy5HZXRDb21wdXRlZFZhbHVlSW50ZWdlcigpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgcGFyZW50IG9iamVjdCBvZiB0aGlzIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRQYXJlbnRPYmooKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLl9wYXJlbnRPYmo7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgcGFyZW50IG9iamVjdFxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgZ2V0UGFyZW50VHlwZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudFR5cGU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJucyB0aGUgaWQgb2YgdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBnZXRJRCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHNldCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGFuZCB0YWtlIGNhcmUgb2YgdGhlIHByZXNlbnRhdGlvbiB0aGUgdmFsdWUgbXVzdCBiZSBpbiBhIG1hZ2ljIGludGVybmFsXHJcbiAgLy8vICAgZm9ybWF0XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm1nVmFsXCI+dGhlIG5ldyB2YWx1ZTwvcGFyYW0+XHJcbiAgc2V0VmFsdWUobWdWYWw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgbGV0IGNvbXBJZHg6IG51bWJlciA9IHRoaXMuX3BhcmVudE9iai5nZXRDb21wSWR4KCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBIHx8IHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OT0RFX0lEIHx8IHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OT0RFX1BBUkVOVElEKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX2RhdGFUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLk5PTkUpXHJcbiAgICAgIHRoaXMuc2V0RGF0YVR5cGUoKTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2RhdGFUeXBlKSB7XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5OVU1FUklDOlxyXG4gICAgICAgIGlmIChtZ1ZhbCA9PSBudWxsKVxyXG4gICAgICAgICAgbWdWYWwgPSBcIkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIjtcclxuICAgICAgICB0aGlzLl92YWwgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3AobWdWYWwsIFwiXCIsIHRoaXMuX3BpYywgZmFsc2UsIGNvbXBJZHgsIGZhbHNlKS50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQUxQSEE6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CT09MRUFOOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuVU5JQ09ERTpcclxuICAgICAgICB0aGlzLl92YWwgPSBtZ1ZhbDtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkuc2V0VmFsdWUoKSBpbGxlZ2FsIGRhdGEgdHlwZTogXCIgKyB0aGlzLl9kYXRhVHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHNldCBhbiBpbnQgdmFsdWUgZGlyZWN0bHksIGFzIGlzIGRvbmUgd2hlbiBpbml0aWFsaXppbmcgdGhlIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJ2YWxcIj48L3BhcmFtPlxyXG4gIFNldFZhbHVlKHZhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl92YWwgPSBTdHJpbmcodmFsKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBzZXQgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgdGFrZSBjYXJlIG9mIHRoZSBwcmVzZW50YXRpb24gdGhlIHZhbHVlIG11c3QgYmUgaW4gYSBtYWdpYyBpbnRlcm5hbCBmb3JtYXRcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHNldE9yZ1ZhbHVlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fb3JnVmFsdWUgPSB0aGlzLl92YWw7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBTZXRTdHVkaW9WYWx1ZUFzT3JnVmFsdWUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcmdWYWx1ZSA9IHRoaXMuU3R1ZGlvVmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFJldHVybnMgdGhlIGZvcm0gcmVsYXRlZCB0byB0aGlzIHByb3BlcnR5LiBJZiB0aGUgcHJvcGVydHkncyBwYXJlbnQgaXMgdGhlIGZvcm0gdGhlbiByZXR1cm4gaXQsXHJcbiAgLy8vICAgb3RoZXJ3aXNlLCBpZiB0aGUgcHJvcGVydHkncyBwYXJlbnQgaXMgYSBjb250cm9sIHRoZW4gcmV0dXJuIHRoZSBmb3JtIHRvIHdoaWNoIHRoaXMgY29udHJvbCBiZWxvbmdzLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBNZ0Zvcm08L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRGb3JtKCk6IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIge1xyXG4gICAgbGV0IGZvcm06IEd1aUZvcm1Qcm9wZXJ0eUFkYXB0ZXIgPSBudWxsO1xyXG5cclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSlcclxuICAgICAgZm9ybSA9IDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgZWxzZSBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpXHJcbiAgICAgIGZvcm0gPSAoPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmopLmdldEZvcm0oKTtcclxuXHJcbiAgICByZXR1cm4gZm9ybTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz4gdGhlIHRhc2sgYnkgdGhlIHBhcmVudCBvYmplY3Q8L3JldHVybnM+XHJcbiAgR2V0VGFza0J5UGFyZW50T2JqZWN0KCk6IEd1aVRhc2tCYXNlIHtcclxuICAgIGxldCB0YXNrOiBHdWlUYXNrQmFzZSA9IG51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNKVxyXG4gICAgICB0YXNrID0gKDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5nZXRUYXNrKCk7XHJcbiAgICBlbHNlIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTClcclxuICAgICAgdGFzayA9ICg8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iaikuZ2V0Rm9ybSgpLmdldFRhc2soKTtcclxuICAgIGVsc2UgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9UQVNLKVxyXG4gICAgICB0YXNrID0gPEd1aVRhc2tCYXNlPnRoaXMuX3BhcmVudE9iajtcclxuXHJcbiAgICByZXR1cm4gdGFzaztcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZWZyZXNoIHRoZSBkaXNwbGF5IGZvciBjb250cm9sIHByb3BlcnRpZXMgYW5kIGZvcm0gcHJvcGVydGllcyBvbmx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvcmNlUmVmcmVzaFwiPmlmIHRydWUgdGhlbiByZWZyZXNoIGlzIGZvcmNlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmV2aW91cyB2YWx1ZTwvcGFyYW0+XHJcbiAgYXN5bmMgUmVmcmVzaERpc3BsYXkoZm9yY2VSZWZyZXNoOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBhd2FpdCB0aGlzLlJlZnJlc2hEaXNwbGF5V2l0aEN1cnJlbnRMaW5lKGZvcmNlUmVmcmVzaCwgSW50MzIuTWluVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHRoZSBwcm9wZXJ0eSBuZWVkIHRvIGJlIHNraXAgZnJvbSB0aGUgcmVmcmVzaCBwcm9wZXJ0aWVzLiBmb3IgYSBjb250cm9sXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2tpcFJlZnJlc2hDb250cm9sKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIGxldCBtZ0NvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSEVCUkVXOlxyXG4gICAgICAgIGlmIChtZ0NvbnRyb2wuaXNUYWJsZUNvbnRyb2woKSlcclxuICAgICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX05PREVfSUQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTk9ERV9QQVJFTlRJRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0hJR0hMSUdIVElORzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NVVNUX0lOUFVUOlxyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9IRUxQX1NDUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRUxFQ1RfUFJPR1JBTTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRUxFQ1RfTU9ERTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV0VEX0RJUkVDVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRVUk5fQUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FUVFJJQlVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVBFQVRBQkxFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZSQU1FX05BTUU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVFJJR0dFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSVNfQ0FDSEVEOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xBWUVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FVVE9fRklUOlxyXG4gICAgICAvLyBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01VTFRJTElORV9WRVJUSUNBTF9TQ1JPTEw6XHJcbiAgICAgIC8vIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FX1dPUkRXUkFQX1NDUk9MTDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SQUlTRV9BVDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRVNFVF9TVFlMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GUkFNRV9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1dJTkRPV19XSURUSDpcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCQklOR19PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX1JFRlJFU0g6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFSQU1FVEVSUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PQkpFQ1RfVFlQRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9SRVRBSU5fRk9DVVM6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU1VCRk9STV9UWVBFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1JFQUxfT0JKRUNUX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQURESVRJT05BTF9JTkZPUk1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9EQVRBVklFV0NPTlRST0w6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfREFUQVZJRVdDT05UUk9MX0ZJRUxEUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkdUU0tfTlVNOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lOREVYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfRklFTEQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTElOS19GSUVMRDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CRUZPUkVfOTAwX1ZFUlNJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUkVGUkVTSF9XSEVOX0hJRERFTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9TRVJWRVJfUkVBRF9BSEVBRDpcclxuICAgICAgICBza2lwID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQlVUVE9OX1NUWUxFOlxyXG4gICAgICAgIGlmICghKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc1JhZGlvKCkpXHJcbiAgICAgICAgICBza2lwID0gdHJ1ZTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNraXA7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIFRSVUUgaWYgdGhlIHByb3BlcnR5IG5lZWQgdG8gYmUgc2tpcCBmcm9tIHRoZSByZWZyZXNoIHByb3BlcnRpZXMuIGZvciBhIGZvcm1cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBTaG91bGRTa2lwUmVmcmVzaEZvcm0oKTogYm9vbGVhbiB7XHJcbiAgICBEZWJ1Zy5Bc3NlcnQodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0ZPUk0pO1xyXG5cclxuICAgIGxldCBza2lwOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBsZXQgbWdGb3JtQmFzZTogR3VpRm9ybVByb3BlcnR5QWRhcHRlciA9IDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG5cclxuICAgIC8vIENvbXB1dGUgcHJvcGVydGllczogYWxsIHRob3NlIHByb3BlcnRpZXMgd2lsbCBiZSByZWZyZXNoIG9ubHkgb25lIHRpbWVcclxuICAgIHN3aXRjaCAodGhpcy5faWQpIHtcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9XSU5ET1dfVFlQRTpcclxuICAgICAgICBpZiAoIXRoaXMuX3BhcmVudE9iai5Jc0ZpcnN0UmVmcmVzaE9mUHJvcHMoKSlcclxuICAgICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MSU5FU19JTl9UQUJMRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9IRUxQX1NDUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJCSU5HX09SREVSOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BFUlNJU1RFTlRfRk9STV9TVEFURV9WRVJTSU9OOlxyXG4gICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICAvLyByZWZyZXNoIG9ubHkgdGhlIHJlbGV2YW50IHN1YmZvcm0gcHJvcGVydGllcyAoY29sb3IsIGZvbnQsIGV0Yy4pXHJcbiAgICBpZiAoIXNraXAgJiYgbWdGb3JtQmFzZS5pc1N1YkZvcm0oKSkge1xyXG4gICAgICBza2lwID0gdHJ1ZTtcclxuICAgICAgc3dpdGNoICh0aGlzLl9pZCkge1xyXG5cclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0NVU1RPTV9QUk9QRVJUSUVTOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ1VTVE9NX1ZBTElEQVRPUlM6XHJcbiAgICAgICAgICBza2lwID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBza2lwO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybiBUUlVFIGlmIHRoZSBwcm9wZXJ0eSBuZWVkIHRvIGJlIHNraXAgZnJvbSB0aGUgcmVmcmVzaCBwcm9wZXJ0aWVzLiBmb3IgYSB0YXNrXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+PC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2tpcFJlZnJlc2hUYXNrKCk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNraXA6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfQ1JFQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0RFTEVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19NT0RJRlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfUkFOR0U6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1NPUlQ6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX0FMTE9XX0lOREVYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBQkJJTkdfQ1lDTEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09ORklSTV9DQU5DRUw6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09ORklSTV9VUERBVEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5EX0NPTkRJVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FVkFMX0VORF9DT05ESVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9SQ0VfU1VGRklYOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0ZPUkNFX0RFTEVURTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX01PREU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfU0VMRUNUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RSQVNBQ1RJT05fQkVHSU46XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1RSQU5TQUNUSU9OX01PREU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJJTlRfREFUQTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DTE9TRV9UQVNLU19CWV9NRElfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfT1BFTl9UQVNLX1dJTkRPVzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfQUxMT1dfRVZFTlRTOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19DSFVOS19TSVpFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19JTkRFWF9PUFRJTUlaQVRJT046XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1JBTkdFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19SQU5HRV9PUkRFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfTE9DQVRFOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19MT0NBVEVfT1JERVI6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX1BPU0lUSU9OOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19QT1NJVElPTl9VU0FHRTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfU1FMX1JBTkdFOlxyXG4gICAgICAgIHNraXAgPSB0cnVlO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc2tpcDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjaGVjayBpZiB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGlnbm9yZWQgYnkgUmVmcmVzaERpc3BsYXkoKSBza2lwIHByb3BlcnRpZXMgd2hpY2ggaGFzIG5vdGhpbmcgdG8gZG8gd2l0aFxyXG4gIC8vLyAgIHRoZSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IHRydWUgaWYgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBpZ25vcmVkPC9yZXR1cm5zPlxyXG4gIHByaXZhdGUgU2hvdWxkU2tpcFJlZnJlc2goKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2tpcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgc3dpdGNoICh0aGlzLl9wYXJlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0w6XHJcbiAgICAgICAgc2tpcCA9IHRoaXMuU2hvdWxkU2tpcFJlZnJlc2hDb250cm9sKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0ZPUk06XHJcbiAgICAgICAgc2tpcCA9IHRoaXMuU2hvdWxkU2tpcFJlZnJlc2hGb3JtKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX1RBU0s6XHJcbiAgICAgICAgc2tpcCA9IHRoaXMuU2hvdWxkU2tpcFJlZnJlc2hUYXNrKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0aGlzLl9pZCkge1xyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BPUF9VUDpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUklFTlRBVElPTl9MT0NLOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOVEVSX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9FWElUX0FOSU1BVElPTjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9OQVZJR0FUSU9OX0RSQVdFUl9NRU5VOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FDVElPTl9CQVJfTUVOVTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUEVOX1BJQ0tFUjpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9PUEVOX0VESVRfRElBTE9HOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RFRkFVTFRfQUxJR05NRU5UOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0tFWUJPQVJEX1RZUEU6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfS0VZQk9BUkRfUkVUVVJOX0tFWTpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BTExPV19TVUdHRVNUSU9OUzpcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0JJTEVfSU1BR0VfTElTVF9GSUxFX05BTUU6XHJcbiAgICAgICAgc2tpcCA9IHRydWU7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc2tpcDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZWZyZXNoIHRoZSBkaXNwbGF5IGZvciBjb250cm9sIHByb3BlcnRpZXMgYW5kIGZvcm0gcHJvcGVydGllcyBvbmx5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImZvcmNlUmVmcmVzaFwiPmlmIHRydWUgdGhlbiByZWZyZXNoIGlzIGZvcmNlZCByZWdhcmRsZXNzIG9mIHRoZSBwcmV2aW91cyB2YWx1ZTwvcGFyYW0+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJjdXJyTGluZVwiPmxpbmUgbnVtYmVyIGluIHRhYmxlIHdoZW4gcmVmcmVzaGluZyBhIGNvbHVtbiBpZiB0aGUgY3VycmVudCBsaW5lIGlzIHJlZnJlc2hlZCBzZXQgdG9cclxuICAvLy8gICAoSW50ZWdlci5NSU5fVkFMVUUpXHJcbiAgLy8vIDwvcGFyYW0+XHJcbiAgcHJpdmF0ZSBhc3luYyBSZWZyZXNoRGlzcGxheVdpdGhDdXJyZW50TGluZShmb3JjZVJlZnJlc2g6IGJvb2xlYW4sIGN1cnJMaW5lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGF3YWl0IHRoaXMuUmVmcmVzaERpc3BsYXlXaXRoQ3VyckxpbmVBbmRDaGVja1NraXBSZWZyZXNoKGZvcmNlUmVmcmVzaCwgY3VyckxpbmUsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgLy8gVGhpcyBtZXRob2QgY2hlY2tzIGlmIHdlIG11c3QgcmVmcmVzaCB0aGUgcHJvcGVydHkgZXZlbiBpZiBpdCBoYXMgZXhwcmVzc2lvblxyXG4gIC8vIEZvciBub3cgaXQgcmV0dXJucyB0cnVlIGZvciBwcm9wZXJ0aWVzIHdpdGggdGV4dCBmb3IgbXVsdGlsaW5ndWFsIHN1cHBvcnRcclxuXHJcbiAgLy8gdG9kbyBOZWVkIHRvIGFkZCBoZXJlIGNoZWNrIGlmIHVzZXIgd2FudHMgbXVsdGlsaW5ndWFsIHN1cHBvcnQgYXQgYWxsXHJcbiAgU2tpcFdoZW5Ob0V4cHJlc3Npb24oKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgc2tpcFdoZW5Ob0V4cHJlc3Npb24gPSB0cnVlO1xyXG5cclxuICAgIGxldCBjdHJsID0gKCh0aGlzLl9wYXJlbnRPYmogaW5zdGFuY2VvZiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyKSA/IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPnRoaXMuX3BhcmVudE9iaiA6IG51bGwpO1xyXG4gICAgaWYgKChjdHJsICE9IG51bGwgJiYgY3RybC5pc0J1dHRvbigpICYmIHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc0NvbWJvQm94KCkgJiYgdGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xBQkVMKSB8fFxyXG4gICAgICAoY3RybCAhPSBudWxsICYmIGN0cmwuaXNMaXN0Qm94KCkgJiYgdGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0xBQkVMKSB8fFxyXG4gICAgICAoY3RybCAhPSBudWxsICYmIGN0cmwuaXNSYWRpbygpICYmIHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTCkgfHxcclxuICAgICAgKGN0cmwgIT0gbnVsbCAmJiBjdHJsLmlzQ2hlY2tCb3goKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTEFCRUwpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc1RhYkNvbnRyb2woKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTEFCRUwpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc0ltYWdlQ29udHJvbCgpICYmIHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9JTUFHRV9GSUxFTkFNRSkgfHxcclxuICAgICAgKGN0cmwgIT0gbnVsbCAmJiBjdHJsLklzSW1hZ2VCdXR0b24oKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfRklMRU5BTUUpIHx8XHJcbiAgICAgIChjdHJsICE9IG51bGwgJiYgY3RybC5pc0NvbHVtbkNvbnRyb2woKSAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ09MVU1OX1RJVExFKSB8fFxyXG4gICAgICAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0RJU1BMQVlfTElTVCkgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9URVhUKSB8fFxyXG4gICAgICAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RPT0xUSVApIHx8XHJcbiAgICAgICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSElOVCkgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QQVNTV09SRCkgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fUFJPUEVSVElFUykgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fVkFMSURBVE9SUykgfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFKSB8fFxyXG4gICAgICAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQpfHxcclxuICAgICAgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CSU5ESU5HX0xFVkVMKSlcclxuICAgICAgc2tpcFdoZW5Ob0V4cHJlc3Npb24gPSBmYWxzZTtcclxuICAgIHJldHVybiBza2lwV2hlbk5vRXhwcmVzc2lvbjtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gUmVldmFsdWF0ZSB0aGUgcHJvcGVydHkgdmFsdWUgKGlmIGl0IGhhcyBhbiBleHByZXNzaW9uKSBhbmRcclxuICAvLy8gcmVmcmVzaCB0aGUgZGlzcGxheSBmb3IgY29udHJvbCBwcm9wZXJ0aWVzIGFuZCBmb3JtIHByb3BlcnRpZXMgb25seVxyXG4gIC8vL1xyXG4gIC8vLyBUaGlzIG1ldGhvZCB3YXMgKGFzIGl0cyBuYW1lIGltcGxpZXMpIHJlbGV2YW50IG9ubHkgZm9yIEdVSSBwcm9wZXJ0aWVzLCBpLmUuIHByb3BlcnRpZXMgdGhhdCBhZmZlY3Qgb24gdGhlIGRpc3BsYXkuXHJcbiAgLy8vIE5vbi1HVUkgcHJvcGVydGllcyAoc3VjaCBhcyBQUk9QX1RZUEVfVEFCX0lOKSB3ZXJlIHNraXBwZWQgYW5kIG5vdCByZWV2YWx1YXRlZC5cclxuICAvLy8gVGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gR1VJIHByb3BlcnRpZXMgYW5kIG5vbi1HVUkgcHJvcGVydGllcyBpcyBkb25lIGJ5IHRoZSBtZXRob2Qg77+9U2hvdWxkU2tpcFJlZnJlc2jvv71FXHJcbiAgLy8vIE5vdyB3ZSBoYXZlIG5vbi1HVUkgcHJvcGVydGllcyB0aGF0IGFyZSByZWV2YWx1YXRlZCBpbiB0aGlzIGZ1bmN0aW9uOlxyXG4gIC8vLyBQUk9QX1RZUEVfTU9ESUZZX0lOX1FVRVJZLCBQUk9QX1RZUEVfQ09OVEVYVF9NRU5VLCBQUk9QX1RZUEVfVEFCX0lOLCBQUk9QX1RZUEVfUEFSS19PTl9DTElDSy5cclxuICAvLy8gRm9yIHRoZXNlIHByb3BlcnRpZXMgd2UgZG8gbm90IGV4ZWN1dGUgZXhwbGljaXRseSB0aGVpciBleHByZXNzaW9ucyAoaXQgd2FzIGRvbmUgaW4gMS45IGJ5IENoZWNrUHJvcCBmdW5jdGlvbiksXHJcbiAgLy8vIHdlIG9ubHkgdXNlIHRoZWlyIHZhbHVlcyBieSBHZXRDb21wdXRlZEJvb2xlYW5Qcm9wZXJ0eSBmdW5jdGlvbi4gSXQgaXMgZG9uZSBmb3IgZG8gbm90IGV4ZWN1dGUgdGhlIHByb3BlcnR5IGV4cHJlc3Npb25cclxuICAvLy8gaW4gR1VJIHRocmVhZC4gSW4gR1VJIHRocmVhZCB3ZSBvbmx5IHVzZSB0aGUgcHJvcGVydHkgdmFsdWUuIFNvIGl0IGlzIG5lZWRlZCB0byByZWV2YWx1YXRlIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiZm9yY2VSZWZyZXNoXCI+aWYgdHJ1ZSB0aGVuIHJlZnJlc2ggaXMgZm9yY2VkIHJlZ2FyZGxlc3Mgb2YgdGhlIHByZXZpb3VzIHZhbHVlPC9wYXJhbT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcImN1cnJMaW5lXCI+bGluZSBudW1iZXIgaW4gdGFibGUgd2hlbiByZWZyZXNoaW5nIGEgY29sdW1uIGlmIHRoZSBjdXJyZW50IGxpbmUgaXMgcmVmcmVzaGVkIHNldCB0b1xyXG4gIC8vLyAgIChJbnRlZ2VyLk1JTl9WQUxVRSlcclxuICAvLy8gPC9wYXJhbT5cclxuICBhc3luYyBSZWZyZXNoRGlzcGxheVdpdGhDdXJyTGluZUFuZENoZWNrU2tpcFJlZnJlc2goZm9yY2VSZWZyZXNoOiBib29sZWFuLCBjdXJyTGluZTogbnVtYmVyLCBjaGVja1NraXBSZWZyZXNoOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IG51bGw7XHJcbiAgICBsZXQgbGluZTogbnVtYmVyID0gMDtcclxuICAgIGxldCBwcmV2VmFsdWU6IHN0cmluZztcclxuICAgIGxldCB2YWxDaGFuZ2VkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5fdmFsID09PSBudWxsICYmIHRoaXMuX2V4cElkID09PSAwKSB7XHJcbiAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFwiaW4gUHJvcGVydHkuUmVmcmVzaERpc3BsYXkoKSBudWxsIHZhbHVlIGFuZCBleHByZXNzaW9uXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoZWNrU2tpcFJlZnJlc2ggJiYgdGhpcy5TaG91bGRTa2lwUmVmcmVzaCgpKVxyXG4gICAgICByZXR1cm47XHJcblxyXG4gICAgaWYgKHRoaXMuX2V4cElkID09PSAwICYmIHRoaXMuU2tpcFdoZW5Ob0V4cHJlc3Npb24oKSlcclxuICAgICAgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLl9wcmV2VmFsdWVzLmxlbmd0aCA9PT0gMClcclxuICAgICAgdGhpcy5zZXRQcmV2QXJyYXlTaXplKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5Db21wdXRlVmFsdWUoKTtcclxuXHJcbiAgICAvLyBiZWZvcmUgdXBkYXRlIHRoZSBwcm9wZXJ0eSBuZWVkIHRvIHByZXBhcmUgZGF0YVxyXG4gICAgc3dpdGNoICh0aGlzLl9wYXJlbnRUeXBlKSB7XHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0w6XHJcbiAgICAgICAgY3RybCA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICAgIC8vIHJlY29tcHV0ZSB0aGUgUElDIGZvciBmb3JtYXQgcHJvcGVydGllc1xyXG4gICAgICAgIGlmICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUICYmIHRoaXMuX2V4cElkID4gMClcclxuICAgICAgICAgIGN0cmwuY29tcHV0ZVBJQyh0aGlzLl92YWwpO1xyXG5cclxuICAgICAgICBpZiAoY3RybC5Jc1JlcGVhdGFibGUgJiYgIWN0cmwuZ2V0Rm9ybSgpLmlzUmVmcmVzaFJlcGVhdGFibGVBbGxvd2VkKCkpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChjdXJyTGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgICAgICBsaW5lID0gdGhpcy5nZXRMaW5lKCk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgbGluZSA9IGN1cnJMaW5lO1xyXG5cclxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdhcyBjaGFuZ2VkIHRvIHByZXZlbnQgc2VuZGluZyByZWR1bmRhbnRcclxuICAgICAgICAvLyBqYXZhc2NyaXB0IGNvbW1hbmRzIHRvIHRoZSBicm93c2VyXHJcbiAgICAgICAgcHJldlZhbHVlID0gdGhpcy5fcHJldlZhbHVlcy5nZXRfSXRlbShsaW5lKTtcclxuXHJcblxyXG4gICAgICAgIGlmICghZm9yY2VSZWZyZXNoICYmICh0aGlzLl92YWwgPT09IHByZXZWYWx1ZSlcclxuICAgICAgICAgICYmIHRoaXMuX2lkICE9PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRklBQkxFXHJcbiAgICAgICAgICAmJiB0aGlzLl9pZCAhPT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRVxyXG4gICAgICAgICAgJiYgdGhpcy5faWQgIT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0VOQUJMRUQpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIHRvIHByZXZlbnQgcmVjdXJzaW9uIHdoaWxlIHVwZGF0aW5nIGNvbHVtbiB2aXNpYmlsaXR5XHJcbiAgICAgICAgaWYgKGN0cmwuVHlwZSA9PT0gTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQ09MVU1OXHJcbiAgICAgICAgICAmJiB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVklTSUJMRVxyXG4gICAgICAgICAgJiYgdGhpcy5fdmFsID09PSBwcmV2VmFsdWUpXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl92YWwgPT09IHByZXZWYWx1ZSlcclxuICAgICAgICAgIHZhbENoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgdGhpcy5fcHJldlZhbHVlcy5zZXRfSXRlbShsaW5lLCB0aGlzLl92YWwpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STTpcclxuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdhcyBjaGFuZ2VkIHRvIHByZXZlbnQgc2VuZGluZyByZWR1bmRhbnRcclxuICAgICAgICAvLyBqYXZhc2NyaXB0IGNvbW1hbmRzIHRvIHRoZSBicm93c2VyXHJcbiAgICAgICAgcHJldlZhbHVlID0gdGhpcy5fcHJldlZhbHVlcy5nZXRfSXRlbSgwKTtcclxuICAgICAgICBpZiAoIWZvcmNlUmVmcmVzaCAmJiAodGhpcy5fdmFsID09PSBwcmV2VmFsdWUpKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuc2V0X0l0ZW0oMCwgdGhpcy5fdmFsKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX1RBU0s6IC8vIFRBU0sgUFJPUEVSVElFU1xyXG4gICAgICAgIEV2ZW50cy5Xcml0ZUV4Y2VwdGlvblRvTG9nKFxyXG4gICAgICAgICAgTlN0cmluZy5Gb3JtYXQoXCJQcm9wZXJ0eS5SZWZyZXNoRGlzcGxheSgpOiB0YXNrIHByb3BlcnR5IHswfSB3YXNuJ3QgaGFuZGxlZFwiLCB0aGlzLl9pZCkpO1xyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgRXZlbnRzLldyaXRlRXhjZXB0aW9uVG9Mb2coXHJcbiAgICAgICAgICBOU3RyaW5nLkZvcm1hdChcIlByb3BlcnR5LlJlZnJlc2hEaXNwbGF5KCk6IHBhcmVudFR5cGUgdW5rbm93biwgcHJvcGVydHkgezB9IHdhc24ndCBoYW5kbGVkXCIsIHRoaXMuX2lkKSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaCAodGhpcy5faWQpIHtcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfSU1BR0VfRklMRU5BTUU6XHJcbiAgICAgICAgdGhpcy5vbkltYWdlRmlsZU5hbWUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRU5BQkxFRDpcclxuICAgICAgICB0aGlzLm9uRW5hYmxlKHZhbENoYW5nZWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFOlxyXG4gICAgICAgIGF3YWl0IHRoaXMub25WaXNpYmxlKHZhbENoYW5nZWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTkFNRTpcclxuICAgICAgICB0aGlzLk9uQ29udHJvbE5hbWUoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STV9OQU1FOlxyXG4gICAgICAgIHRoaXMub25Gb3JtTmFtZSgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DT0xVTU5fVElUTEU6XHJcbiAgICAgICAgdGhpcy5vblRleHQoMCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RFWFQ6XHJcbiAgICAgICAgdGhpcy5vblRleHQobGluZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0hJTlQ6XHJcbiAgICAgICAgdGhpcy5vbkhpbnQoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTU9ESUZJQUJMRTpcclxuICAgICAgICBhd2FpdCB0aGlzLm9uTW9kaWZpYWJsZSh2YWxDaGFuZ2VkKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVE9PTFRJUDpcclxuICAgICAgICB0aGlzLm9uVG9vbHRpcCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9ESVNQTEFZX0xJU1Q6XHJcbiAgICAgICAgYXdhaXQgdGhpcy5vbkRpc3BsYXlMaXN0KGxpbmUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9BVVRPX0NPTVBMRVRFX01PREVfV0M6XHJcbiAgICAgICAgdGhpcy5vbkF1dG9Db21wbGV0ZU1vZGUoKTtcclxuICAgICAgICBicmVha1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9WSVNJQkxFX0xBWUVSU19MSVNUOlxyXG4gICAgICAgIGF3YWl0IHRoaXMub25WaXNpYmxlTGF5ZXJMaXN0KGxpbmUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9GT1JNQVQ6XHJcbiAgICAgICAgdGhpcy5vbkZvcm1hdCgpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9MQUJFTDpcclxuICAgICAgICBhd2FpdCB0aGlzLm9uTGFiZWwobGluZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUEFTU1dPUkQ6XHJcbiAgICAgICAgdGhpcy5vblBhc3N3b3JkKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9NT0RJRllfSU5fUVVFUlk6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFCX0lOOlxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1BBUktfT05fQ0xJQ0s6XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTE9BRF9JTUFHRV9GUk9NOiAvLyB0aGlzIHByb3BlcnR5IGlzIHVzZWQgZm9yIGlkZW50aWZ5aW5nIGxvYWRpbmcgb2YgaW1hZ2UgKFNlcnZlci9DbGllbnQpLlxyXG4gICAgICAgIC8vIFNvIG5vIGhhbmRsaW5nIG5lZWRlZCBpbiBSZWZyZXNoRGlzcGxheVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ1VTVE9NX1BST1BFUlRJRVM6XHJcbiAgICAgICAgdGhpcy5vbkN1c3RvbVByb3BlcnRpZXMoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fVkFMSURBVE9SUzpcclxuICAgICAgICB0aGlzLm9uQ3VzdG9tVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9CSU5ESU5HX0xFVkVMOlxyXG4gICAgICAgIHRoaXMub25CaW5kaW5nTGV2ZWwoKTtcclxuICAgICAgICBicmVhaztcclxuXHJcblxyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhcclxuICAgICAgICAgIE5TdHJpbmcuRm9ybWF0KFwiUHJvcGVydHkuUmVmcmVzaERpc3BsYXkoKTogUHJvcGVydHkgezB9IHdhc24ndCBoYW5kbGVkXCIsIHRoaXMuX2lkKSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBuZWVkIHRvIGNhbGN1bGF0ZSBvbmNlIG9ubHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBTaG91bGRCZUNvbXB1dGVkT25jZSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfVEFTSykge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX01PREU6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9QUkVMT0FEX1ZJRVc6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQUJCSU5HX0NZQ0xFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfVEFTS19QUk9QRVJUSUVTX09QRU5fVEFTS19XSU5ET1c6XHJcbiAgICAgICAgY2FzZSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9UQVNLX1BST1BFUlRJRVNfQUxMT1dfRVZFTlRTOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFX0lOX1FVRVJZOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfUFJJTlRfREFUQTpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX1JBTkdFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfTE9DQVRFOlxyXG4gICAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQUxMT1dfU09SVDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfUFJPUEVSVElFU19BTExPV19JTkRFWDpcclxuICAgICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX01BSU5fRElTUExBWTpcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBpZiAodGhpcy5faWQgPT09IFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0lTX0NBQ0hFRCB8fCB0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfTVVMVElMSU5FKVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gaWYgdGhlIHZhbHVlIGlzIGNvbXB1dGVkIGluIHRoZSBzZXJ2ZXJcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBJc0NvbXB1dGVkT25jZU9uU2VydmVyKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuU2hvdWxkQmVDb21wdXRlZE9uY2UoKSkge1xyXG4gICAgICBsZXQgdGFzazogR3VpVGFza0Jhc2UgPSB0aGlzLkdldFRhc2tCeVBhcmVudE9iamVjdCgpO1xyXG4gICAgICBpZiAodGFzayAhPSBudWxsKVxyXG4gICAgICAgIHJldHVybiAhdGFzay5TaG91bGRFdmFsdWF0ZVByb3BlcnR5TG9jYWxseSh0aGlzLl9pZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgY29tcHV0ZXMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSBkaXNwbGF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIENvbXB1dGVWYWx1ZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSAyNTU7XHJcbiAgICBsZXQgd2FzRXZhbHVhdGVkOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbShmYWxzZSk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2lkID09PSBQcm9wSW50ZXJmYWNlLlBST1BfVFlQRV9DVVNUT01fUFJPUEVSVElFUykge1xyXG4gICAgICBhd2FpdCB0aGlzLmNvbXB1dGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzKCk7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMuR2V0QXJyYXlWYWx1ZXNGb3JDdXN0b21Qcm9wZXJ0aWVzKCk7XHJcbiAgICAgIHRoaXMuc2V0VmFsdWUocmVzdWx0KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfQ1VTVE9NX1ZBTElEQVRPUlMpIHtcclxuICAgICAgYXdhaXQgdGhpcy5jb21wdXRlQ3VzdG9tVmFsaWRhdG9ycygpO1xyXG4gICAgICByZXN1bHQgPSB0aGlzLkdldEFycmF5VmFsdWVzRm9yQ3VzdG9tVmFsaWRhdGlvblByb3BlcnRpZXMoKTtcclxuICAgICAgdGhpcy5zZXRWYWx1ZShyZXN1bHQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5fZXhwSWQgPiAwKSB7XHJcbiAgICAgIC8vIGZvciBvZmZsaW5lIDogY29tcHV0ZSBvbmNlIHRoZSBwcm9wZXJ0aWVzIHRoYXQgd2FzIGNvbXB1dGUgb24gdGhlIHNlcnZlclxyXG4gICAgICBpZiAodGhpcy5TaG91bGRCZUNvbXB1dGVkT25jZSgpICYmIHRoaXMuX2V4cEFscmVhZHlDb21wdXRlZE9uY2UpXHJcbiAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgdGhpcy5fZXhwQWxyZWFkeUNvbXB1dGVkT25jZSA9IHRydWU7XHJcblxyXG4gICAgICAvLyBmb3IgZm9sbG93aW5nIGNvbnRyb2wgcHJvcGVydGllcyBhbHdheXMgZXZhbHVhdGUgZXhwcmVzc2lvbnNcclxuICAgICAgbGV0IGFsd2F5c0V2YWx1YXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9UQVNLKVxyXG4gICAgICAgIGFsd2F5c0V2YWx1YXRlID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9pZCA9PT0gUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUKSB7XHJcbiAgICAgICAgbGVuID0gNjU1MzU7XHJcbiAgICAgICAgcmVzdWx0ID0gU3RyVXRpbC5ydHJpbShhd2FpdCB0aGlzLl9wYXJlbnRPYmouRXZhbHVhdGVFeHByZXNzaW9uKHRoaXMuX2V4cElkLCB0aGlzLl9kYXRhVHlwZSwgbGVuLCB0cnVlLFxyXG4gICAgICAgICAgU3RvcmFnZUF0dHJpYnV0ZS5TS0lQLCBhbHdheXNFdmFsdWF0ZSwgd2FzRXZhbHVhdGVkKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMuX3BhcmVudE9iai5FdmFsdWF0ZUV4cHJlc3Npb24odGhpcy5fZXhwSWQsIHRoaXMuX2RhdGFUeXBlLCBsZW4sIHRydWUsIFN0b3JhZ2VBdHRyaWJ1dGUuU0tJUCwgYWx3YXlzRXZhbHVhdGUsIHdhc0V2YWx1YXRlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBsZXQgd2FybmluZ01zZyA9IG5ldyBTdHJpbmdCdWlsZGVyKFwiRXhjZXB0aW9uOiBcIiArIGUuTWVzc2FnZSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5fcGFyZW50T2JqIGluc3RhbmNlb2YgR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcilcclxuICAgICAgICAgICAgd2FybmluZ01zZy5BcHBlbmQoXCIgQ29udHJvbDogXCIgKyAoPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+dGhpcy5fcGFyZW50T2JqKS5OYW1lKTtcclxuICAgICAgICAgIEV2ZW50cy5Xcml0ZVdhcm5pbmdUb0xvZyh3YXJuaW5nTXNnLlRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh3YXNFdmFsdWF0ZWQudmFsdWUpIHtcclxuICAgICAgICByZXN1bHQgPSB0aGlzLnVwZGF0ZVJlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUocmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICh0aGlzLl92YWwgPT0gbnVsbCAmJiB0aGlzLl9wYXJlbnRUeXBlICE9PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICAgIHJlc3VsdCA9IFByb3BEZWZhdWx0cy5nZXREZWZhdWx0VmFsdWUodGhpcy5faWQsIHRoaXMuX3BhcmVudFR5cGUsIHRoaXMuX3BhcmVudE9iaik7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShyZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgdXBkYXRlcyByZXN1bHRzIG9mIGV4cHJlc3Npb24gZm9yIHNvbWUgcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJyZXN1bHRcIj4gPC9wYXJhbT5cclxuICAvLy8gPHJldHVybnM+IDwvcmV0dXJucz5cclxuICBwcml2YXRlIHVwZGF0ZVJlc3VsdChyZXN1bHQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuX2lkKSB7XHJcbiAgICAgIGNhc2UgUHJvcEludGVyZmFjZS5QUk9QX1RZUEVfRk9STUFUOlxyXG4gICAgICAgIGlmIChyZXN1bHQgPT0gbnVsbClcclxuICAgICAgICAgIHJlc3VsdCA9IE5TdHJpbmcuRW1wdHk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1RBU0tfTU9ERTpcclxuICAgICAgICByZXN1bHQgPSBQcm9wZXJ0eS51cGRhdGVUYXNrTW9kZVJlc3VsdChyZXN1bHQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGRvIHRoZSBzYW1lIGFzIHdlIGRvaW5nIGZvciBjKysgVWNoYXIgUlQ6OnRza19tb2RlX2V4cCAobG9uZyBleHAsIFVjaGFyIG1vZGUpXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWU9XCJyZXN1bHRcIj48L3BhcmFtPlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBzdGF0aWMgdXBkYXRlVGFza01vZGVSZXN1bHQocmVzdWx0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgbGV0IGNvZGU6IHN0cmluZyA9ICcgJztcclxuICAgIGlmICghTlN0cmluZy5Jc051bGxPckVtcHR5KHJlc3VsdCkpIHtcclxuICAgICAgY29kZSA9IHJlc3VsdFswXS50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICBzd2l0Y2ggKGNvZGUpIHtcclxuICAgICAgICBjYXNlICdRJzpcclxuICAgICAgICAgIGNvZGUgPSAnRSc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdGJzpcclxuICAgICAgICAgIGNvZGUgPSAnTyc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICdPJzpcclxuICAgICAgICAgIGNvZGUgPSAnTic7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjb2RlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXQgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZ2V0VmFsdWUoKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGF3YWl0IHRoaXMuQ29tcHV0ZVZhbHVlKCk7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPiBpbnQgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eTwvcmV0dXJucz5cclxuICBhc3luYyBnZXRWYWx1ZUludCgpOiBQcm9taXNlPG51bWJlcj4ge1xyXG4gICAgbGV0IHJlc3VsdDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBhd2FpdCB0aGlzLkNvbXB1dGVWYWx1ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLl92YWwgIT09IG51bGwpXHJcbiAgICAgIHJlc3VsdCA9IE5OdW1iZXIuUGFyc2UodGhpcy5fdmFsKTtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyByZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2l0aG91dCBleGVjdXRlIGl0cyBleHByZXNzaW9uXHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHJldHVybnM+IGludCB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5PC9yZXR1cm5zPlxyXG4gIEdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTk51bWJlci5QYXJzZSh0aGlzLl92YWwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIHJldHVybnMgYSBib29sZWFuIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSB2YWxpZCBvbmx5IGZvciBsb2dpY2FsIHR5cGUgcHJvcGVydGllc1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgYXN5bmMgZ2V0VmFsdWVCb29sZWFuKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMuX2RhdGFUeXBlID09PSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU4pIHtcclxuICAgICAgYXdhaXQgdGhpcy5nZXRWYWx1ZSgpO1xyXG4gICAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odGhpcy5fdmFsKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlByb3BlcnR5LmdldFZhbHVlQm9vbGVhbigpIHdhcyBjYWxsZWQgZm9yIG5vbiBib29sZWFuIHR5cGUgcHJvcGVydHk6IHswfVwiLCB0aGlzLl9pZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBHZXQgdGhlIGNvbXB1dGVkIHZhbHVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBHZXRDb21wdXRlZFZhbHVlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fdmFsO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBnZXQgdGhlIGNvbXB1dGVkIGJvb2xlYW4gdmFsdWUgb2YgdGhlIHByb3BlcnR5IHdpdGhvdXQgZXhlY3V0ZSBpdHMgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5fZGF0YVR5cGUgPT09IFN0b3JhZ2VBdHRyaWJ1dGUuQk9PTEVBTikge1xyXG4gICAgICByZXR1cm4gRGlzcGxheUNvbnZlcnRvci50b0Jvb2xlYW4odGhpcy5fdmFsKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBFdmVudHMuV3JpdGVFeGNlcHRpb25Ub0xvZyhOU3RyaW5nLkZvcm1hdChcIlByb3BlcnR5LmdldFZhbHVlQm9vbGVhbigpIHdhcyBjYWxsZWQgZm9yIG5vbiBib29sZWFuIHR5cGUgcHJvcGVydHk6IHswfVwiLCB0aGlzLl9pZCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vICAgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBzcGVjaWZpZWQgbGluZSBvZiB0aGUgdGFibGVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibGluZVwiPnRoZSByZXF1ZXN0ZWQgbGluZSBudW1iZXI8L3BhcmFtPlxyXG4gIGdldFByZXZWYWx1ZShsaW5lOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGxpbmUgPCB0aGlzLl9wcmV2VmFsdWVzLmxlbmd0aClcclxuICAgICAgcmV0dXJuIHRoaXMuX3ByZXZWYWx1ZXMuZ2V0X0l0ZW0obGluZSk7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICByZXR1cm5zIHRydWUgaWYgdGhpcyBwcm9wZXJ0eSBoYXMgYW4gZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgaXNFeHByZXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2V4cElkID4gMDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgR2V0RXhwcmVzc2lvbklkKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXhwSWQ7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkltYWdlRmlsZU5hbWUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgbGV0IG1nQ29udHJvbEJhc2U6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgaWYgKG1nQ29udHJvbEJhc2UuaXNUYWJDb250cm9sKCkpIHtcclxuICAgICAgICBtZ0NvbnRyb2xCYXNlLnNldEltYWdlTGlzdCh0aGlzLkdldENvbXB1dGVkVmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAobWdDb250cm9sQmFzZS5pc0ltYWdlQ29udHJvbCgpIHx8IG1nQ29udHJvbEJhc2UuaXNSYWRpbygpIHx8IG1nQ29udHJvbEJhc2UuaXNDaGVja0JveCgpIHx8IG1nQ29udHJvbEJhc2UuSXNJbWFnZUJ1dHRvbigpKSB7XHJcbiAgICAgICAgbWdDb250cm9sQmFzZS5zZXRJbWFnZVdpdGhGaWxlTmFtZSh0aGlzLkdldENvbXB1dGVkVmFsdWUoKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gb25JbWFnZUZpbGVOYW1lLm9uRW5hYmxlKClcIik7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25FbmFibGUodmFsQ2hhbmdlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIGxldCBjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmo7XHJcbiAgICAgIGxldCBjdXJyZW50RWRpdGluZ0NvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuQ3VycmVudEVkaXRpbmdDb250cm9sO1xyXG5cclxuICAgICAgLy8gQUNUX1RCTF9OWFRGTEQgaXMgYWRkZWQgaW4gcXVldWUsIHdoZW5ldmVyIGN1cnJlbnQgY29udHJvbCBpcyBoaWRkZW4gb3IgZGlzYWJsZWQgdG8gc2V0IHRoZSBmb2N1cyB0byBuZXh0IGNvbnRyb2wgZm9yIGJvdGggUkMgJiBPTFxyXG4gICAgICAvLyB3aGljaCBpcyBjb3JyZWN0IGJlaGF2aW9yLiBCdXQgb25jZSBjdXJyZW50IGN0cmwgaXMgYWxyZWFkeSBkaXNhYmxlZC9oaWRkZW4gLCB3ZSBzaG91bGQgbm90IHB1dCB0aGUgc2FtZSBhY3Rpb25cclxuICAgICAgLy8gaW4gcXVldWUgYWdhaW4gd2hlbiBzYW1lIGN0cmwgaXMgZGlzYWJsZWQvaGlkZGVuIG11bHRpcGxlIHRpbWVzLlxyXG4gICAgICBpZiAodGhpcy5fdmFsICE9PSBudWxsICYmIHRoaXMuX3ZhbCA9PT0gXCIwXCIgJiYgdmFsQ2hhbmdlZCAmJiBjdXJyZW50RWRpdGluZ0NvbnRyb2wgIT09IG51bGwgJiZcclxuICAgICAgICAoY3RybCA9PT0gY3VycmVudEVkaXRpbmdDb250cm9sIHx8IGN1cnJlbnRFZGl0aW5nQ29udHJvbC5pc0Rlc2NlbmRlbnRPZkNvbnRyb2woY3RybCkgfHwgY3RybCA9PT0gY3VycmVudEVkaXRpbmdDb250cm9sLmdldExpbmtlZFBhcmVudChmYWxzZSkpKSB7XHJcbiAgICAgICAgbGV0IHBhcmtlZENvbnRyb2w6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuZ2V0TGFzdFBhcmtlZEN0cmwoKTtcclxuICAgICAgICBpZiAocGFya2VkQ29udHJvbCAhPT0gbnVsbCAmJiBwYXJrZWRDb250cm9sLkluQ29udHJvbCAmJiAoY3RybCA9PT0gcGFya2VkQ29udHJvbCB8fCBwYXJrZWRDb250cm9sLmlzRGVzY2VuZGVudE9mQ29udHJvbChjdHJsKSkpIHtcclxuICAgICAgICAgIEV2ZW50cy5Pbk5vblBhcmthYmxlTGFzdFBhcmtlZEN0cmwoY3RybCk7XHJcbiAgICAgICAgICBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuQ3VycmVudEVkaXRpbmdDb250cm9sID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY3RybC5TZXRFbmFibGVkKHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uRW5hYmxlKClcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIG9uVmlzaWJsZSh2YWxDaGFuZ2VkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgbGV0IGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgbGV0IGN1cnJlbnRFZGl0aW5nQ29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5DdXJyZW50RWRpdGluZ0NvbnRyb2w7XHJcbiAgICAgIGlmICh0aGlzLl92YWwgIT09IG51bGwgJiYgdGhpcy5fdmFsID09PSBcIjBcIiAmJiB2YWxDaGFuZ2VkICYmIGN1cnJlbnRFZGl0aW5nQ29udHJvbCAhPT0gbnVsbCAmJlxyXG4gICAgICAgIChjdHJsID09PSBjdXJyZW50RWRpdGluZ0NvbnRyb2wgfHwgY3VycmVudEVkaXRpbmdDb250cm9sLmlzRGVzY2VuZGVudE9mQ29udHJvbChjdHJsKSB8fCBjdHJsID09PSBjdXJyZW50RWRpdGluZ0NvbnRyb2wuZ2V0TGlua2VkUGFyZW50KGZhbHNlKSkpIHtcclxuICAgICAgICBsZXQgcGFya2VkQ29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5nZXRMYXN0UGFya2VkQ3RybCgpO1xyXG4gICAgICAgIGlmIChwYXJrZWRDb250cm9sICE9PSBudWxsICYmIHBhcmtlZENvbnRyb2wuSW5Db250cm9sICYmIChjdHJsID09PSBwYXJrZWRDb250cm9sIHx8IHBhcmtlZENvbnRyb2wuaXNEZXNjZW5kZW50T2ZDb250cm9sKGN0cmwpKSkge1xyXG4gICAgICAgICAgRXZlbnRzLk9uTm9uUGFya2FibGVMYXN0UGFya2VkQ3RybChjdHJsKTtcclxuICAgICAgICAgIGN0cmwuZ2V0Rm9ybSgpLmdldFRhc2soKS5DdXJyZW50RWRpdGluZ0NvbnRyb2wgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBhd2FpdCBjdHJsLnVwZGF0ZVByb3BlcnR5TG9naWNOZXN0aW5nKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX1ZJU0lCTEUsIENvbW1hbmRUeXBlLlBST1BfU0VUX1ZJU0lCTEUsIHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSwgdHJ1ZSk7XHJcblxyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgT25Db250cm9sTmFtZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG5cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkuT25Db250cm9sTmFtZSgpXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBzZXQgaGludCBmb3IgZWRpdCBjb250cm9sIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uSGludCgpIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY29udHJvbDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPnRoaXMuZ2V0T2JqZWN0QnlQYXJlbnRPYmooKTtcclxuICAgICAgbGV0IHRyYW5zbGF0ZWRTdHJpbmc6IHN0cmluZyA9IEV2ZW50cy5UcmFuc2xhdGUodGhpcy5HZXRDb21wdXRlZFZhbHVlKCkpO1xyXG5cclxuICAgICAgaWYgKCFjb250cm9sLklzRGF0ZVRpbWVQaWN0dXJlKCkgJiYgKCFjb250cm9sLklzVGFibGVDaGlsZCB8fCBjb250cm9sLklzVGFibGVIZWFkZXJDaGlsZCkpIHtcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIHRoaXMuZ2V0T2JqZWN0QnlQYXJlbnRPYmooKSwgdGhpcy5nZXRMaW5lKCksIEh0bWxQcm9wZXJ0aWVzLlBsYWNlSG9sZGVyLCB0cmFuc2xhdGVkU3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpblByb3BlcnR5Lm9uSGludCgpXCIpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25Gb3JtTmFtZSgpIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSlcclxuICAgICAgdGhpcy5hZGRDb21tYW5kVHlwZVRleHQoMCk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uRm9ybU5hbWUoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYWRkQ29tbWFuZFR5cGVUZXh0KGxpbmU6IG51bWJlcikge1xyXG4gICAgbGV0IG1sc1RyYW5zVmFsdWU6IHN0cmluZyA9IEV2ZW50cy5UcmFuc2xhdGUodGhpcy5HZXRDb21wdXRlZFZhbHVlKCkpO1xyXG5cclxuICAgIC8vIEZpeGVkIGJ1ZyM6NzMzNDgwIFN5c3RlbUJveCA9IGZhbHNlIGFuZCB0aXRsZSBpcyBlbXB0eS0+IC5ORVQgaGlkZSB0aGUgdGl0bGUuXHJcbiAgICAvLyB3ZSB3aWxsIHNldCBpdCB0byAnICdcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSB8fFxyXG4gICAgICAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wgJiYgKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc0NvbHVtbkNvbnRyb2woKSkpIHtcclxuICAgICAgLy8gIzczNzQ4ODogV2hlbiB2YXJpYWJsZSBhdHRhY2hlZCB0byBmb3JtJ3MgdGV4dCBwcm9wZXJ0eSwgc3BhY2VzIGFyZSBhcHBlbmRlZFxyXG4gICAgICAvLyBhZnRlciBhY3R1YWwgdmFsdWUsIGVxdWFsIHRvIHBpY3R1cmUgb2YgdmFyaWFibGUuIEJlZm9yZSBzZXR0aW5nIHRleHQgcmVtb3ZlIHRoZXNlIGV4dHJhXHJcbiAgICAgIC8vIHNwYWNlcyBhdCB0aGUgZW5kLlxyXG4gICAgICBtbHNUcmFuc1ZhbHVlID0gU3RyVXRpbC5ydHJpbShtbHNUcmFuc1ZhbHVlKTtcclxuICAgICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9GT1JNICYmIG1sc1RyYW5zVmFsdWUgPT09IE5TdHJpbmcuRW1wdHkpIHtcclxuICAgICAgICBtbHNUcmFuc1ZhbHVlID0gXCIgXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCAmJiAoKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc1RleHRDb250cm9sKClcclxuICAgICAgICB8fCAoKDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqKS5pc0J1dHRvbigpKSkpIC8vIG5lZWQgdG8gY2hlY2sgZm9yIGh5cGVydGV4dCBvciBvdGhlciB0eXBlcyBvZiBidXR0b25cclxuICAgICAgQ29tbWFuZHMuYWRkVmFsdWVXaXRoTGluZShDb21tYW5kVHlwZS5TRVRfVkFMVUUsIHRoaXMuX3BhcmVudE9iaiwgbGluZSwgbWxzVHJhbnNWYWx1ZSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcy5fcGFyZW50T2JqLCBsaW5lLCBIdG1sUHJvcGVydGllcy5UZXh0LCBtbHNUcmFuc1ZhbHVlKTtcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvblRleHQobGluZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmFkZENvbW1hbmRUeXBlVGV4dChsaW5lKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb25Nb2RpZmlhYmxlKHZhbENoYW5nZWQ6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG5cclxuICAgICAgaWYgKGN0cmwuaXNUZXh0Q29udHJvbCgpKSB7XHJcbiAgICAgICAgbGV0IHRhc2s6IEd1aVRhc2tCYXNlID0gdGhpcy5HZXRUYXNrQnlQYXJlbnRPYmplY3QoKTtcclxuXHJcbiAgICAgICAgbGV0IHJlYWRPbmx5VmFsdWU6IGJvb2xlYW4gPSAhdGhpcy5HZXRDb21wdXRlZFZhbHVlQm9vbGVhbigpO1xyXG5cclxuICAgICAgICBpZiAoKHJlYWRPbmx5VmFsdWUgfHwgdGFzay5nZXRNb2RlKCkgIT09IENvbnN0YW50cy5UQVNLX01PREVfUVVFUlkpICYmIGN0cmwuR2V0Q3VyclJlYWRPbmx5KCkgIT09IHJlYWRPbmx5VmFsdWUpIHtcclxuICAgICAgICAgIGN0cmwuU2V0Q3VyclJlYWRPbmx5KHJlYWRPbmx5VmFsdWUpO1xyXG5cclxuICAgICAgICAgIC8vIEpQTjogSU1FIHN1cHBvcnQgKGVuYWJsZSBJTUUgaW4gcXVlcnkgbW9kZSlcclxuICAgICAgICAgIGlmIChVdGlsU3RyQnl0ZU1vZGUuaXNMb2NhbGVEZWZMYW5nREJDUygpKSB7XHJcbiAgICAgICAgICAgIGlmIChhd2FpdCBjdHJsLmdldEZvcm0oKS5nZXRUYXNrKCkuY2hlY2tQcm9wKFByb3BJbnRlcmZhY2UuUFJPUF9UWVBFX0FMTE9XX0xPQ0FURV9JTl9RVUVSWSwgZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCB0aGlzLmdldE9iamVjdEJ5UGFyZW50T2JqKCksIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5SZWFkT25seSwgcmVhZE9ubHlWYWx1ZSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZVxyXG4gICAgICB0aHJvdyBuZXcgQXBwbGljYXRpb25FeGNlcHRpb24oXCJpbiBQcm9wZXJ0eS5vbk1vZGlmaWFibGUoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25Ub29sdGlwKCk6IHZvaWQge1xyXG4gICAgbGV0IHRvb2xUaXA6IHN0cmluZztcclxuXHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgbGV0IGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuXHJcbiAgICAgIC8vIFRvb2x0aXAgZXhwcmVzc2lvbiByZXR1cm5zIHN0cmluZ1xyXG4gICAgICBpZiAodGhpcy5fZXhwSWQgPT09IDApXHJcbiAgICAgICAgdG9vbFRpcCA9ICg8VG9vbFRpcEhlbHA+Y3RybC5nZXRGb3JtKCkuZ2V0VGFzaygpLmdldEhlbHBJdGVtKE5OdW1iZXIuUGFyc2UodGhpcy5fdmFsKSkpLnRvb2x0aXBIZWxwVGV4dDtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRvb2xUaXAgPSB0aGlzLl92YWw7XHJcblxyXG4gICAgICAvLyAjOTI5ODg5OiBSZW1vdmUgZXh0cmEgd2hpdGUgc3BhY2VzIGF0IHRoZSBlbmQgb2YgdG9vbHRpcCB0ZXh0LlxyXG4gICAgICB0b29sVGlwID0gU3RyVXRpbC5ydHJpbSh0b29sVGlwKTtcclxuICAgICAgaWYoY3RybC5pc0J1dHRvbigpICYmICBjdHJsLkNvbm5lY3RlZENvbnRyb2wpXHJcbiAgICAgICAgQ29tbWFuZHMuYWRkT3BlcmF0aW9uV2l0aExpbmUoQ29tbWFuZFR5cGUuU0VUX1BST1BFUlRZLCBjdHJsLkNvbm5lY3RlZENvbnRyb2wsIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5ab29tQnV0dG9uVG9vbHRpcCwgdG9vbFRpcCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5TRVRfUFJPUEVSVFksIGN0cmwsIHRoaXMuZ2V0TGluZSgpLCBIdG1sUHJvcGVydGllcy5Ub29sdGlwLCB0b29sVGlwKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkub25Ub29sdGlwKClcIik7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIG9uRGlzcGxheUxpc3QoY3VyckxpbmU6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIGxldCBjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmo7XHJcblxyXG4gICAgICBpZiAoY3RybC5pc1NlbGVjdGlvbkN0cmwoKSB8fCBjdHJsLmlzVGFiQ29udHJvbCgpIHx8IGN0cmwuaXNSYWRpbygpIHx8ICg8TWdDb250cm9sQmFzZT5jdHJsKS5IYXNBdXRvY29tcGxldGUoKSkge1xyXG4gICAgICAgIGxldCBsaW5lOiBudW1iZXIgPSAoY3VyckxpbmUgPT09IEludDMyLk1pblZhbHVlKSA/IGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpIDogY3VyckxpbmU7XHJcbiAgICAgICAgYXdhaXQgY3RybC5yZWZyZXNoQW5kU2V0SXRlbXNMaXN0KGxpbmUsIHRydWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uRGlzcGxheUxpc3QoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwiY3VyckxpbmVcIj48L3BhcmFtPlxyXG4gIHByaXZhdGUgYXN5bmMgb25WaXNpYmxlTGF5ZXJMaXN0KGN1cnJMaW5lOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICBsZXQgbGluZTogbnVtYmVyID0gMDtcclxuXHJcbiAgICAgIGlmIChjdXJyTGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgICAgbGluZSA9IGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbGluZSA9IGN1cnJMaW5lO1xyXG5cclxuICAgICAgLy8gQWx3YXlzIGxheWVyaW5nIHNob3VsZCBiZSBwZXJmb3JtZWQgb24gRGlzcGxheWxpc3QuIEJ1dCxcclxuICAgICAgLy8gRGlzcGxheUxpc3QgYW5kIGl0ZW1MaXN0IHNob3VsZCBub3QgYmUgcmVmcmVzaGVkLlxyXG4gICAgICBhd2FpdCBjdHJsLnJlZnJlc2hUYWJGb3JMYXllckxpc3QobGluZSk7XHJcbiAgICB9XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uVmlzaWJsZUxheWVyTGlzdCgpXCIpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkZvcm1hdCgpIHtcclxuICAgIGxldCBjdHJsOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gbnVsbDtcclxuICAgIGxldCBjdHJsUGljOiBQSUM7XHJcblxyXG4gICAgaWYgKHRoaXMuX3BhcmVudFR5cGUgPT09IEd1aUNvbnN0YW50cy5QQVJFTlRfVFlQRV9DT05UUk9MKSB7XHJcbiAgICAgIGN0cmwgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgY3RybFBpYyA9IGN0cmwuZ2V0UElDKCk7XHJcbiAgICAgIGN0cmwucmVzZXRQcmV2VmFsKCk7XHJcblxyXG4gICAgICBzd2l0Y2ggKGN0cmwuVHlwZSkge1xyXG4gICAgICAgIGNhc2UgTWdDb250cm9sVHlwZS5DVFJMX1RZUEVfQlVUVE9OOlxyXG4gICAgICAgICAgLy8gaWYgdGhlIGJ1dHRvbiBkb2Vzbid0IGhhdmUgZmllbGQgd2UgbmVlZCB0byBzZXQgdGhlIGZvcm1hdCBhcyB0aGUgdGV4dCBvZiB0aGUgY29udHJvbCxcclxuICAgICAgICAgIC8vIG90aGVyd2lzZSwgdGhlIGZpZWxkIHZhbHVlIHdpbGwgc2V0IHRoZSB0ZXh0IG9uIHRoZSBjb250cm9sXHJcbiAgICAgICAgICAvLyBpbiBhZGRpdGlvbiB3ZSBuZWVkIHRvIHNldCB0aGUgdGV4dCBmb3IgaW1hZ2UgYnV0dG9uXHJcbiAgICAgICAgICAvLyBBbHNvLCBkbyBub3Qgb3ZlcnJpZGUgdGhlIHRleHQgd2l0aCB0aGUgZm9ybWF0IGlmIHRoZSBjb250cm9sIGhhcyBhbiBleHByZXNzaW9uLlxyXG4gICAgICAgICAgLy8gUUNSIyA5Mzg5MzMuIFdoZW4gdGhlIGNvbnRyb2wgaXMgcmVmcmVzaGVkIGZvciB0aGUgZmlyc3QgdGltZSwgd2Ugc2hvdWxkIHNob3cgdGhlIHRleHQgYXMgaXRcclxuICAgICAgICAgIC8vIGlzIGluIHRoZSBGb3JtYXQgcHJvcGVydHkgLSBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciBmaWVsZCBvciBleHByZXNzaW9uIGlzIGF0dGFjaGVkIHRvIGl0IG9yIG5vdC5cclxuICAgICAgICAgIC8vIFRoZSBmaXggaXMgY29uZmluZWQgdG8gQ29udHJvbFR5cGVzLkNUUkxfVFlQRV9CVVRUT04gYmVjYXVzZSBvbmx5IGluIGNhc2Ugb2YgQnV0dG9uIHdlIGRpc3BsYXkgdGhlIHZhbHVlIG9mIHRoZSBGb3JtYXQgcHJvcGVydHkuXHJcbiAgICAgICAgICBpZiAoY3RybC5nZXRGaWVsZCgpID09IG51bGwgJiYgIWN0cmwuZXhwcmVzc2lvblNldEFzRGF0YSgpIHx8IGN0cmwuSXNJbWFnZUJ1dHRvbigpIHx8ICh0aGlzLl9wYXJlbnRPYmouSXNGaXJzdFJlZnJlc2hPZlByb3BzKCkgJiYgIUd1aUVudmlyb25tZW50LkVudmlyb25tZW50LkdldFNwZWNpYWxJZ25vcmVCdXR0b25Gb3JtYXQoKSkpXHJcbiAgICAgICAgICAgIHRoaXMuYWRkQ29tbWFuZFR5cGVUZXh0KHRoaXMuZ2V0TGluZSgpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgICAgY2FzZSBNZ0NvbnRyb2xUeXBlLkNUUkxfVFlQRV9URVhUOlxyXG5cclxuICAgICAgICAgIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX1RFWFQpIHtcclxuICAgICAgICAgICAgaWYgKGN0cmxQaWMuZ2V0QXR0cigpICE9PSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkub25Gb3JtYXQoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgb25MYWJlbChjdXJyTGluZTogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpIHtcclxuICAgICAgLy8gU0VMRUNUIGNvbnRyb2wuIE5vdGUgd2UgZG8gbm90IHN1cHBvcnQgZHluYW1pYyBjaGFuZ2Ugb2YgcmFkaW8gYnV0dG9ucyByYW5nZSFcclxuICAgICAgLy8gZGF0YSBjb250cm9sIHJhbmdlcyBhcmUgdXBkYXRlZCB3aGVuIHdlIHNldCB2YWx1ZXMgdG8gdGhlbSBpbiBDb250cm9sLnJlZnJlc2hEaXNwVmFsKClcclxuICAgICAgbGV0IGN0cmw6IEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXIgPSA8R3VpQ29udHJvbFByb3BlcnR5QWRhcHRlcj48YW55PnRoaXMuX3BhcmVudE9iajtcclxuICAgICAgbGV0IGxpbmU6IG51bWJlcjtcclxuXHJcbiAgICAgIGlmIChjdXJyTGluZSA9PT0gSW50MzIuTWluVmFsdWUpXHJcbiAgICAgICAgbGluZSA9IGN0cmwuZ2V0RGlzcGxheUxpbmUoZmFsc2UpO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgbGluZSA9IGN1cnJMaW5lO1xyXG5cclxuICAgICAgLy8gb24gY29tYm8gYm94IGNvbXBmb3IgY2hlY2sgYm94IHRoZSBsYWJlbCBpcyB0aGUgaXRlbSBsaXN0IHByb3BlcnR5XHJcbiAgICAgIGlmIChjdHJsLlR5cGUgPT09IE1nQ29udHJvbFR5cGUuQ1RSTF9UWVBFX0NIRUNLQk9YKVxyXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZFR5cGVUZXh0KGxpbmUpO1xyXG4gICAgICBlbHNlIGlmIChjdHJsLmlzU2VsZWN0aW9uQ3RybCgpIHx8IGN0cmwuaXNUYWJDb250cm9sKCkgfHwgY3RybC5pc1JhZGlvKCkpIHtcclxuICAgICAgICBjdHJsLnNldFJhbmdlKGF3YWl0IHRoaXMuZ2V0VmFsdWUoKSk7XHJcbiAgICAgICAgY3RybC5jbGVhclJhbmdlKGxpbmUpO1xyXG4gICAgICAgIGF3YWl0IGN0cmwucmVmcmVzaEFuZFNldEl0ZW1zTGlzdChsaW5lLCB0cnVlKTtcclxuXHJcbiAgICAgICAgLy8gSWYgSXRlbUxpc3QgaGFzIGFuIGV4cHJlc3Npb24gQW5kIGl0IG1heSBiZSBtb2RpZmllZCBhZ2FpbiwgcmVmcmVzaCB0aGUgZGlzcGxheSB2YWx1ZSBvZiBjb250cm9sLlxyXG4gICAgICAgIC8vIEJlY2F1c2UgaXQgbWF5IGJlIHBvc3NpYmxlIHRoYXQgZGlzcGxheSB2YWx1ZSB3aWxsIGNoYW5nZS5cclxuICAgICAgICBpZiAodGhpcy5fZXhwSWQgPiAwKVxyXG4gICAgICAgICAgYXdhaXQgY3RybC5Db21wdXRlQW5kUmVmcmVzaERpc3BsYXlWYWx1ZShmYWxzZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAoKDxNZ0NvbnRyb2xCYXNlPmN0cmwpLkhhc0F1dG9jb21wbGV0ZSgpKVxyXG4gICAgICAgIGF3YWl0IGN0cmwucmVmcmVzaEFuZFNldEl0ZW1zTGlzdChsaW5lLCB0cnVlKTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcIlByb3BlcnR5Lm9uTGFiZWwoKSwgbm90IHN1cHBvcnQgY29udHJvbFwiKTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkub25MYWJlbCgpXCIpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgYWxsIHRoZSBwcm9wZXJ0aWVzIHRoYXQgc3VwcG9ydCBpbiBzdWJmb3JtLCBtdXN0IGNhbGwgdGhpcyBtZXRob2RcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRPYmplY3RCeVBhcmVudE9iaigpOiBhbnkge1xyXG4gICAgbGV0IHJlc3VsdDogYW55ID0gdGhpcy5fcGFyZW50T2JqO1xyXG5cclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSkge1xyXG4gICAgICBsZXQgZm9ybTogR3VpRm9ybVByb3BlcnR5QWRhcHRlciA9IDxHdWlGb3JtUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICBpZiAoZm9ybS5pc1N1YkZvcm0oKSlcclxuICAgICAgICByZXN1bHQgPSBmb3JtLmdldFN1YkZvcm1DdHJsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cInByb3BJZFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBzdGF0aWMgaXNSZXBlYXRhYmxlSW5UYWJsZShwcm9wSWQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIGdldCBjdXJyZW50IGxpbmVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cmV0dXJucz48L3JldHVybnM+XHJcbiAgcHJpdmF0ZSBnZXRMaW5lKCk6IG51bWJlciB7XHJcbiAgICBsZXQgbGluZTogbnVtYmVyID0gMDtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgY3RybDogR3VpQ29udHJvbFByb3BlcnR5QWRhcHRlciA9IDxHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyPjxhbnk+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgICBsZXQgZGlzcGxheUxpbmVGb3JUcmVlT3JUYWJsZTogYm9vbGVhbiA9IGN0cmwuaXNQcm9wZXJ0eVJlcGVhdGFibGUodGhpcy5faWQpO1xyXG5cclxuICAgICAgbGluZSA9IGN0cmwuZ2V0RGlzcGxheUxpbmUoZGlzcGxheUxpbmVGb3JUcmVlT3JUYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmU7XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vICAgcmV0dXJuIG9yaWdpbmFsIHZhbHVlIG9mIHByb3BlcnR5IHRoYXQgd2FzIGNvbXB1dGVkIGJlZm9yZSBleGVjdXRpb24gb2YgZXhwcmVzc2lvblxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxyZXR1cm5zPjwvcmV0dXJucz5cclxuICBnZXRPcmdWYWx1ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX29yZ1ZhbHVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICB1cGRhdGUgc2l6ZSBvZiBwcmV2dmFsdWVzIGFycmF5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICAvLy8gPHBhcmFtIG5hbWUgPSBcIm5ld1NpemVcIj48L3BhcmFtPlxyXG4gIHVwZGF0ZVByZXZWYWx1ZUFycmF5KG5ld1NpemU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLlNob3VsZFNraXBSZWZyZXNoKCkpXHJcbiAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuU2V0U2l6ZShuZXdTaXplKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gY2xlYXIgX3ByZXZWYWx1ZXMgYXJyYXlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwibmV3U2l6ZVwiPjwvcGFyYW0+XHJcbiAgY2xlYXJQcmV2VmFsdWVBcnJheSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3ByZXZWYWx1ZXMuQ2xlYXIoKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIFJlc2V0UHJldlZhbHVlQXJyYXkoKTogdm9pZCB7XHJcbiAgICBsZXQgY291bnQ6IG51bWJlciA9IHRoaXMuX3ByZXZWYWx1ZXMubGVuZ3RoO1xyXG4gICAgdGhpcy5fcHJldlZhbHVlcy5DbGVhcigpO1xyXG4gICAgdGhpcy5fcHJldlZhbHVlcy5TZXRTaXplKGNvdW50KTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBjb21wdXRlIGFuZCBzZXQgYXJyYXlzIHNpemVcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgc2V0UHJldkFycmF5U2l6ZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfRk9STSB8fCB0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICBsZXQgc2l6ZTogbnVtYmVyID0gMTtcclxuXHJcbiAgICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTCkge1xyXG4gICAgICAgIGxldCBtZ0NvbnRyb2xCYXNlOiBHdWlDb250cm9sUHJvcGVydHlBZGFwdGVyID0gPEd1aUNvbnRyb2xQcm9wZXJ0eUFkYXB0ZXI+PGFueT50aGlzLl9wYXJlbnRPYmo7XHJcbiAgICAgICAgaWYgKG1nQ29udHJvbEJhc2UuSXNSZXBlYXRhYmxlKVxyXG4gICAgICAgICAgc2l6ZSA9IG1nQ29udHJvbEJhc2UuZ2V0Rm9ybSgpLmdldFRhYmxlSXRlbXNDb3VudCgpO1xyXG4gICAgICAgIGVsc2UgaWYgKG1nQ29udHJvbEJhc2UuaXNUYWJsZUNvbnRyb2woKSAmJiBQcm9wZXJ0eS5pc1JlcGVhdGFibGVJblRhYmxlKHRoaXMuX2lkKSlcclxuICAgICAgICAgIHNpemUgPSBtZ0NvbnRyb2xCYXNlLmdldEZvcm0oKS5nZXRUYWJsZUl0ZW1zQ291bnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5fcHJldlZhbHVlcy5TZXRTaXplKHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyAgIFBhc3N3b3JkIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIG9uUGFzc3dvcmQoKSB7XHJcbiAgICBpZiAodGhpcy5fcGFyZW50VHlwZSA9PT0gR3VpQ29uc3RhbnRzLlBBUkVOVF9UWVBFX0NPTlRST0wpXHJcbiAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcy5nZXRPYmplY3RCeVBhcmVudE9iaigpLCB0aGlzLmdldExpbmUoKSwgSHRtbFByb3BlcnRpZXMuUGFzc3dvcmQsIHRoaXMuR2V0Q29tcHV0ZWRWYWx1ZUJvb2xlYW4oKSk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRocm93IG5ldyBBcHBsaWNhdGlvbkV4Y2VwdGlvbihcImluIFByb3BlcnR5Lm9uUGFzc3dvcmQoKVwiKTtcclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IHVzZXIgcHJvcGVydHkgVGl0bGVQYWRkaW5nIHByb3BlcnR5XHJcbiAgLy8vIDwvc3VtbWFyeT5cclxuICBwcml2YXRlIGFzeW5jIGNvbXB1dGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgZm9yIChsZXQgW2N1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21Qcm9wZXJ0eVZhbHVlXSBvZiB0aGlzLmN1c3RvbVByb3BlcnRpZXMpIHtcclxuICAgICAgbGV0IGxlbjogbnVtYmVyID0gMjU1O1xyXG4gICAgICBsZXQgd2FzRXZhbHVhdGVkOiBSZWZQYXJhbTxib29sZWFuPiA9IG5ldyBSZWZQYXJhbShmYWxzZSk7XHJcbiAgICAgIGxldCBleHByZXNzaW9uID0gY3VzdG9tUHJvcGVydHlWYWx1ZTtcclxuICAgICAgLy8gaW5pdCB0aGUgdmFsdWVcclxuICAgICAgbGV0IHJldEV4cHJlc3Npb25WYWx1ZSA9IGF3YWl0IHRoaXMuR2V0UmV0cnVuVmFsdWVGb3JDdXN0b21Qcm9wZXJ0eUV4cHJlc3Npb24oZXhwcmVzc2lvbik7XHJcbiAgICAgIHRoaXMuY3VzdG9tUHJvcGVydGllc1ZhbHVlcy5zZXQoY3VzdG9tUHJvcGVydHlLZXksIHJldEV4cHJlc3Npb25WYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIGNvbXB1dGUgY3VzdG9tIHZhbGlkYXRvcnNcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgYXN5bmMgY29tcHV0ZUN1c3RvbVZhbGlkYXRvcnMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBsZXQgbWdDb250cm9sID0gPE1nQ29udHJvbEJhc2U+dGhpcy5fcGFyZW50T2JqO1xyXG4gICAgaWYgKG1nQ29udHJvbC5Nb2RpZmllZEJ5VXNlciB8fCBtZ0NvbnRyb2wuVmFsaWRhdGVDb250cm9sIHx8IHRoaXMuR2V0VGFza0J5UGFyZW50T2JqZWN0KCkuSXNJblJlY29tcHV0ZSgpKXtcclxuICAgICAgZm9yIChsZXQgW2N1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21WYWxpZGF0b3JQcm9wZXJ0eV0gb2YgdGhpcy5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgbGV0IGxlbjogbnVtYmVyID0gMjU1O1xyXG4gICAgICAgIGxldCB3YXNFdmFsdWF0ZWQ6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKGZhbHNlKTtcclxuICAgICAgICBsZXQgZXhwcmVzc2lvbiA9ICg8Q3VzdG9tVmFsaWRhdG9yUHJvcD5jdXN0b21WYWxpZGF0b3JQcm9wZXJ0eSkuX2V4cDtcclxuICAgICAgICAvLyBpbml0IHRoZSB2YWx1ZVxyXG4gICAgICAgIGxldCBpc0luVmFsaWQgPSBhd2FpdCB0aGlzLkdldFJldHJ1blZhbHVlRm9yQ3VzdG9tUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gICAgICAgIGxldCBlcnJTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgIGxldCBJblZhbGlkID0gKGlzSW5WYWxpZCA9PT0gXCIxXCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGlmIChJblZhbGlkKSB7XHJcbiAgICAgICAgICBleHByZXNzaW9uID0gKDxDdXN0b21WYWxpZGF0b3JQcm9wPmN1c3RvbVZhbGlkYXRvclByb3BlcnR5KS5fZXJyb3JNZXNzYWdlRXhwO1xyXG4gICAgICAgICAgaWYgKGV4cHJlc3Npb24gPiAwKVxyXG4gICAgICAgICAgICBlcnJTdHJpbmcgPSBhd2FpdCB0aGlzLkdldFJldHJ1blZhbHVlRm9yQ3VzdG9tUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb24pO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBlcnJTdHJpbmcgPSAoPEN1c3RvbVZhbGlkYXRvclByb3A+Y3VzdG9tVmFsaWRhdG9yUHJvcGVydHkpLl9lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmN1c3RvbVZhbGlkYXRvclZhbHVlcy5zZXQoY3VzdG9tUHJvcGVydHlLZXksIG5ldyBDdXN0b21WYWxpZGF0b3IoIUluVmFsaWQsIGVyclN0cmluZykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLy8gPHN1bW1hcnk+XHJcbiAgLy8vIFNldCB1c2VyIHByb3BlcnR5IFRpdGxlUGFkZGluZyBwcm9wZXJ0eVxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgcHJpdmF0ZSBvbkN1c3RvbVByb3BlcnRpZXMoKTogdm9pZCB7XHJcblxyXG4gICAgZm9yIChsZXQgW2N1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21Qcm9wZXJ0eVZhbHVlXSBvZiB0aGlzLmN1c3RvbVByb3BlcnRpZXNWYWx1ZXMpIHtcclxuICAgICAgLy8gdXNlIHRoaXMuX3BhcmVudE9iaiBhbmQgbm90IHRoaXMuZ2V0T2JqZWN0QnlQYXJlbnRPYmooKVxyXG4gICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5QUk9QX1NFVF9VU0VSX1BST1BFUlRZLCB0aGlzLl9wYXJlbnRPYmosIHRoaXMuZ2V0TGluZSgpLCBjdXN0b21Qcm9wZXJ0eUtleSwgY3VzdG9tUHJvcGVydHlWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vLyBTZXQgY3VzdG9tIHZhbGlkYXRvcnMgcHJvcGVydHlcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25DdXN0b21WYWxpZGF0b3JzKCk6IHZvaWQge1xyXG4gICAgZm9yIChsZXQgW2N1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21Qcm9wZXJ0eVZhbHVlXSBvZiB0aGlzLmN1c3RvbVZhbGlkYXRvclZhbHVlcykge1xyXG5cclxuICAgICAgLy8gdXNlIHRoaXMuX3BhcmVudE9iaiBhbmQgbm90IHRoaXMuZ2V0T2JqZWN0QnlQYXJlbnRPYmooKVxyXG4gICAgICBDb21tYW5kcy5hZGRPcGVyYXRpb25XaXRoTGluZShDb21tYW5kVHlwZS5QUk9QX1NFVF9DVVNUT01fVkFMSURBVE9SLCB0aGlzLl9wYXJlbnRPYmosIHRoaXMuZ2V0TGluZSgpLFxyXG4gICAgICAgIGN1c3RvbVByb3BlcnR5S2V5LCBjdXN0b21Qcm9wZXJ0eVZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gU2V0IEJpbmRpbmcgTGV2ZWxcclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIHByaXZhdGUgb25CaW5kaW5nTGV2ZWwoKVxyXG4gIHtcclxuICAgIGlmICh0aGlzLl9wYXJlbnRUeXBlID09PSBHdWlDb25zdGFudHMuUEFSRU5UX1RZUEVfQ09OVFJPTClcclxuICAgICAgIENvbW1hbmRzLmFkZE9wZXJhdGlvbldpdGhMaW5lKENvbW1hbmRUeXBlLlNFVF9QUk9QRVJUWSwgdGhpcy5nZXRPYmplY3RCeVBhcmVudE9iaigpLCB0aGlzLmdldExpbmUoKSwgSHRtbFByb3BlcnRpZXMuQmluZGluZ0xldmVsLCB0aGlzLkdldENvbXB1dGVkVmFsdWVJbnRlZ2VyKCkpO1xyXG4gICAgZWxzZVxyXG4gICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkuQmluZGluZ0xldmVsKClcIik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uQXV0b0NvbXBsZXRlTW9kZSgpXHJcbiAge1xyXG5cclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGFzeW5jIEdldFJldHJ1blZhbHVlRm9yQ3VzdG9tUHJvcGVydHlFeHByZXNzaW9uKGV4cHJlc3Npb246IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICBsZXQgbGVuOiBudW1iZXIgPSAyNTU7XHJcbiAgICBsZXQgZXhwU3RvcmFnZUF0dHJpYnV0ZSA9IHRoaXMuX3BhcmVudE9iai5HZXRFeHByZXNzaW9uU3RvcmFnZShleHByZXNzaW9uKTtcclxuICAgIGxldCB3YXNFdmFsdWF0ZWQ6IFJlZlBhcmFtPGJvb2xlYW4+ID0gbmV3IFJlZlBhcmFtKGZhbHNlKTtcclxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGF3YWl0IHRoaXMuX3BhcmVudE9iai5FdmFsdWF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgZXhwU3RvcmFnZUF0dHJpYnV0ZSwgbGVuLCB0cnVlLCBTdG9yYWdlQXR0cmlidXRlLlNLSVAsIGZhbHNlLCB3YXNFdmFsdWF0ZWQpO1xyXG5cclxuICAgIGV4cFN0b3JhZ2VBdHRyaWJ1dGUgPSB0aGlzLl9wYXJlbnRPYmouR2V0RXhwcmVzc2lvblN0b3JhZ2UoZXhwcmVzc2lvbik7XHJcbiAgICBsZXQgY29tcElkeDogbnVtYmVyID0gdGhpcy5fcGFyZW50T2JqLmdldENvbXBJZHgoKTtcclxuXHJcbiAgICBzd2l0Y2ggKGV4cFN0b3JhZ2VBdHRyaWJ1dGUpIHtcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUM6XHJcbiAgICAgICAgbGV0IHRlbXBQaWMgPSBuZXcgUElDKFwiTjYuMlwiLCBTdG9yYWdlQXR0cmlidXRlLk5VTUVSSUMsIHRoaXMuX3BhcmVudE9iai5nZXRDb21wSWR4KCkpO1xyXG4gICAgICAgIGlmIChyZXR1cm5WYWx1ZSA9PSBudWxsKVxyXG4gICAgICAgICAgcmV0dXJuVmFsdWUgPSBcIkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIjtcclxuICAgICAgICByZXR1cm5WYWx1ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChyZXR1cm5WYWx1ZSwgXCJcIiwgdGVtcFBpYywgZmFsc2UsIGNvbXBJZHgsIGZhbHNlKS50cmltKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuREFURTpcclxuICAgICAgICB0ZW1wUGljID0gbmV3IFBJQyhcIiMjLyMjLyMjIyNcIiwgZXhwU3RvcmFnZUF0dHJpYnV0ZSwgY29tcElkeCk7XHJcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBEaXNwbGF5Q29udmVydG9yLkluc3RhbmNlLm1nMmRpc3AocmV0dXJuVmFsdWUsIFwiXCIsIHRlbXBQaWMsIHRydWUsIGZhbHNlLCBjb21wSWR4LCB0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5USU1FOlxyXG4gICAgICAgIHRlbXBQaWMgPSBuZXcgUElDKFwiIyM6IyMvIyMjI1wiLCBleHBTdG9yYWdlQXR0cmlidXRlLCBjb21wSWR4KTtcclxuICAgICAgICByZXR1cm5WYWx1ZSA9IERpc3BsYXlDb252ZXJ0b3IuSW5zdGFuY2UubWcyZGlzcChyZXR1cm5WYWx1ZSwgXCJcIiwgdGVtcFBpYywgdHJ1ZSwgZmFsc2UsIGNvbXBJZHgsIHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuXHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5BTFBIQTpcclxuICAgICAgY2FzZSBTdG9yYWdlQXR0cmlidXRlLkJPT0xFQU46XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5CTE9COlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuQkxPQl9WRUNUT1I6XHJcbiAgICAgIGNhc2UgU3RvcmFnZUF0dHJpYnV0ZS5VTklDT0RFOlxyXG4gICAgICBjYXNlIFN0b3JhZ2VBdHRyaWJ1dGUuTk9ORTpcclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhyb3cgbmV3IEFwcGxpY2F0aW9uRXhjZXB0aW9uKFwiaW4gUHJvcGVydHkuR2V0UmV0cnVuVmFsdWVGb3JDdXN0b21Qcm9wZXJ0eUV4cHJlc3Npb24oKSBpbGxlZ2FsIGRhdGEgdHlwZTogXCIgKyBleHBTdG9yYWdlQXR0cmlidXRlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaWR4XCI+PC9wYXJhbT5cclxuICBSZW1vdmVQcmV2VmFsSW5kZXhBdChpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3ByZXZWYWx1ZXMubGVuZ3RoID4gaWR4KSB7XHJcbiAgICAgIHRoaXMuX3ByZXZWYWx1ZXMuUmVtb3ZlQXQoaWR4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy9cclxuICAvLy8gPC9zdW1tYXJ5PlxyXG4gIC8vLyA8cGFyYW0gbmFtZT1cImlkeFwiPjwvcGFyYW0+XHJcbiAgSW5zZXJ0UHJldlZhbEF0KGlkeDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wcmV2VmFsdWVzLkluc2VydChpZHgsIG51bGwpO1xyXG4gIH1cclxuXHJcbiAgLy8vIDxzdW1tYXJ5PlxyXG4gIC8vL1xyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lPVwiaWR4XCI+PC9wYXJhbT5cclxuICByZXNldFByZXZWYWxBdChpZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGlkeCA+PSAwICYmIGlkeCA8IHRoaXMuX3ByZXZWYWx1ZXMubGVuZ3RoKVxyXG4gICAgICB0aGlzLl9wcmV2VmFsdWVzLnNldF9JdGVtKGlkeCwgbnVsbCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBOU3RyaW5nLkZvcm1hdChcInswfSA9IHsxfSAoZXhwPXsyfSwgc3R1ZGlvIHZhbHVlPXszfSlcIiwgW1xyXG4gICAgICBQcm9wRGVmYXVsdHMuR2V0UHJvcGVydHlOYW1lKHRoaXMuX2lkKSwgKHRoaXMuX3ZhbCA9PT0gbnVsbCkgPyBcImlzIG51bGxcIiA6IHRoaXMuX3ZhbCwgdGhpcy5fZXhwSWQsIHRoaXMuU3R1ZGlvVmFsdWVcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vLyA8c3VtbWFyeT5cclxuICAvLy8gICBnZXREZWZhdWx0UHJvcCgpIHJldHVybnMgYSBwcm9wZXJ0eSB0aGF0IGhhcyBhIHN5c3RlbSBkZWZhdWx0IHZhbHVlLlxyXG4gIC8vLyA8L3N1bW1hcnk+XHJcbiAgLy8vIDxwYXJhbSBuYW1lID0gXCJwcm9wSWRcIj5UaGUgcHJvcGVydHkgaWQ8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicGFyZW50VHlwZVwiPlBBUkVOVF9UWVBFX0NPTlRST0wsIFBBUkVOVF9UWVBFX0ZPUk0sIFBBUkVOVF9UWVBFX1RBU0s8L3BhcmFtPlxyXG4gIC8vLyA8cGFyYW0gbmFtZSA9IFwicHJvcFBhcmVudFwiPjwvcGFyYW0+XHJcbiAgLy8vIDxyZXR1cm5zPiBQcm9wZXJ0eSB0aGF0IGhhcyBhIHN5c3RlbSBkZWZhdWx0IHZhbHVlPC9yZXR1cm5zPlxyXG4gIHN0YXRpYyBnZXREZWZhdWx0UHJvcChwcm9wSWQ6IG51bWJlciwgcGFyZW50VHlwZTogc3RyaW5nLCBwcm9wUGFyZW50OiBQcm9wUGFyZW50SW50ZXJmYWNlKTogUHJvcGVydHkge1xyXG4gICAgbGV0IHByb3A6IFByb3BlcnR5ID0gbnVsbDtcclxuICAgIGxldCBtZ1ZhbDogc3RyaW5nID0gUHJvcERlZmF1bHRzLmdldERlZmF1bHRWYWx1ZShwcm9wSWQsIHBhcmVudFR5cGUsIHByb3BQYXJlbnQpO1xyXG5cclxuICAgIGlmIChtZ1ZhbCAhPT0gbnVsbClcclxuICAgICAgcHJvcCA9IG5ldyBQcm9wZXJ0eShwcm9wSWQsIHByb3BQYXJlbnQsIHBhcmVudFR5cGUsIG1nVmFsKTtcclxuXHJcbiAgICByZXR1cm4gcHJvcDtcclxuICB9XHJcblxyXG4gIEluc2VydFByZXZWYWx1ZUFycmF5KGlkeDogbnVtYmVyLCBjb3VudDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuU2hvdWxkU2tpcFJlZnJlc2goKSlcclxuICAgICAgdGhpcy5fcHJldlZhbHVlcy5JbnNlcnRSYW5nZShpZHgsIG5ldyBBcnJheShjb3VudCkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|