@stemy/backend 3.2.5 → 3.2.6
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/stemy-backend.umd.js.map +1 -1
- package/common-types.d.ts +3 -24
- package/esm2015/common-types.js +1 -1
- package/esm2015/public_api.js +1 -1
- package/esm2015/utils.js +1 -1
- package/fesm2015/stemy-backend.js.map +1 -1
- package/package.json +1 -1
- package/public_api.d.ts +1 -1
- package/stemy-backend.metadata.json +1 -1
- package/utils.d.ts +9 -9
package/esm2015/utils.js
CHANGED
|
@@ -843,4 +843,4 @@ export function replaceSpecialChars(str, to = "-") {
|
|
|
843
843
|
return `${str}`.replace(/[&\/\\#, +()$~%.@'":*?<>{}]/g, to);
|
|
844
844
|
}
|
|
845
845
|
export { ɵ0 };
|
|
846
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNuRixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQStCLEtBQUssRUFBZ0MsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2xHLE9BQU8sRUFBQyxRQUFRLElBQUksYUFBYSxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBa0IsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLE1BQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBUyxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFZN0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBTXJCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBa0I7SUFDdkMsWUFBWSxFQUFFLElBQUk7Q0FDckIsQ0FBQztBQUlGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxL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QUFNLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRixNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRSxNQUFNLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDO1FBRTNFLElBQUksTUFBTSxHQUFHLEdBQUcsWUFBWSxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFVLENBQUM7UUFDOUUsSUFBSTtZQUNBLGdCQUFnQjtZQUNoQixNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDN0YsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFGLGVBQWU7WUFDZixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDeEIsSUFBSSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxxQkFBcUI7WUFDckIsSUFBSSxVQUFVLEVBQUU7Z0JBQ1osS0FBSyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUMzQixHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUNqQztpQkFBTSxJQUFJLElBQUksRUFBRTtnQkFDYixLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFDbkIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3JCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNCO1lBQ0QsZ0JBQWdCO1lBQ2hCLE1BQU0sWUFBWSxHQUFHLENBQUEsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksS0FBSSxDQUFDLENBQUM7WUFDN0MsTUFBTSxZQUFZLEdBQUcsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxLQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssWUFBWSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEtBQUssWUFBWSxFQUFFO2dCQUM5RSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNoRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNsRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFDLENBQUMsQ0FBQzthQUM5RTtZQUNELGVBQWU7WUFDZixJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUM1QyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUM1QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQzthQUMzRTtZQUNELG9CQUFvQjtZQUNwQixJQUFJLFNBQVMsRUFBRTtnQkFDWCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNoQztZQUNELFNBQVM7WUFDVCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixNQUFNLEdBQUcsTUFBTSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzlCLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMvQztZQUNELE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM5QixHQUFHLEdBQUcsR0FBRyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEUsT0FBTyxHQUFHLENBQUM7U0FDZDtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxHQUFHLEdBQUcsR0FBRyxZQUFZLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDaEUsT0FBTyxHQUFHLENBQUM7U0FDZDtJQUNMLENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBYztJQUN6QyxNQUFNLFVBQVUsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ3JDLFVBQVUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkIsT0FBTyxVQUFVLENBQUE7QUFDckIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBZ0I7SUFDM0MsT0FBTyxJQUFJLE9BQU8sQ0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUMzQyxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUU7WUFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLG1CQUFvQixTQUFRLFFBQVE7SUFFdEMsWUFBWSxjQUF3QixFQUFFLElBQXNCO1FBQ3hELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNaLGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFDSCxjQUFjLGFBQWQsY0FBYyx1QkFBZCxjQUFjLENBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUNILGNBQWMsYUFBZCxjQUFjLHVCQUFkLGNBQWMsQ0FBRSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFZO0lBRWxCLENBQUM7Q0FDSjtBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBZ0IsRUFBRSxJQUFzQjtJQUMvRCxPQUFPLElBQUksbUJBQW1CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVksRUFBRSxPQUFlLElBQUk7SUFDNUQsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN6QyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUMsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELElBQUksR0FBRyxFQUFFO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDWixPQUFPO2FBQ1Y7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ25DLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDekMsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksR0FBRyxFQUFFO2dCQUNMLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDWixPQUFPO2FBQ1Y7WUFDRCxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxJQUFZO0lBQ2pDLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDcEMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUMzQixJQUFJLEdBQUcsRUFBRTtnQkFDTCxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ1QsT0FBTzthQUNWO1lBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQWdCLGlCQUFpQixDQUFDLElBQVksRUFBRSxVQUFrQixJQUFJOztRQUN4RSxNQUFNLElBQUksR0FBRyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUU7WUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQUE7QUFFRCxNQUFNLFVBQWdCLFNBQVMsQ0FBQyxJQUFZLEVBQUUsSUFBWTs7UUFDdEQsTUFBTSxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEMsT0FBTyxJQUFJLE9BQU8sQ0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNwQyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNULE9BQU87aUJBQ1Y7Z0JBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FBQTtBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsS0FBVTtJQUNyQyxPQUFPLEtBQUssWUFBWSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxVQUFrQixJQUFJLEVBQUUsUUFBaUIsS0FBSztJQUN6RSxPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3hDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLEtBQUssRUFBRTtnQkFDUCxNQUFNLENBQUMscUJBQXFCLE9BQU8sSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLE9BQU87YUFDVjtZQUNELE9BQU8sQ0FBQyxZQUFZLE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxJQUFlO0lBQzlDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsSUFBYztJQUM1Qyx3Q0FBd0M7SUFDeEMsbUNBQW1DO0lBQ25DLHNDQUFzQztJQUN0QywwQ0FBMEM7SUFDMUMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRTtTQUN0QixPQUFPLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1NBQ2hDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1NBQ3hCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1NBQ3hCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1NBQ2xCLElBQUksRUFBRSxDQUFDO0lBRVosd0NBQXdDO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRW5DLDhDQUE4QztJQUM5QyxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUMzQixNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckQsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBRWxCLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFFckIsNkJBQTZCO1FBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVsRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdCLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxNQUFNLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsSUFBWTtJQUN0QyxPQUFPO1FBQ0gsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25CLE9BQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRSxDQUFDLENBQUE7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFjLEVBQUUsTUFBaUIsRUFBRSxZQUFvQixJQUFJO0lBQ3RGLFNBQVMsR0FBRyxTQUFTLElBQUksT0FBTyxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDckMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLGFBQWEsRUFBRTtZQUM1QyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzlDO1NBQ0o7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDbkIsUUFBUSxFQUFFLE1BQU07S0FDbkIsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQXFCLEtBQWUsRUFBRSxVQUFxRTtJQUNwSSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUMxQyxPQUFPLG9CQUFvQixDQUFDO1FBQ3hCLFFBQVEsRUFBRSxLQUFLO1FBQ2YsS0FBSyxFQUFFLENBQU0sTUFBTSxFQUFDLEVBQUU7WUFDbEIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQW1CLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDakQsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsSUFBSSxDQUFXLENBQUM7WUFDbEQsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDZixNQUFNLElBQUksZUFBZSxDQUFDLEdBQUcsU0FBUyxpQ0FBaUMsQ0FBQyxDQUFDO2FBQzVFO1lBQ0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxLQUFLO2dCQUNoQixDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUMsS0FBSyxFQUFRLENBQUMsQ0FBQztZQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQztZQUN4QixJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNOLE1BQU0sSUFBSSxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSztvQkFDM0IsQ0FBQyxDQUFDLEdBQUcsU0FBUyxnQ0FBZ0MsRUFBRSxFQUFFO29CQUNsRCxDQUFDLENBQUMsR0FBRyxTQUFTLG1DQUFtQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO2FBQ2pFO1lBQ0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3hCLElBQUk7b0JBQ0EsTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFBLE1BQU0sY0FBYyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSSxHQUFHLENBQUM7b0JBQ25GLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDcEM7Z0JBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ1IsTUFBTSxJQUFJLGVBQWUsQ0FBQyxHQUFHLFNBQVMsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDNUU7YUFDSjtZQUNELE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsR0FBRyxDQUFDO1lBQ2hDLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQyxDQUFBO0tBQ0osQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsSUFBWSxFQUFFLGdCQUF5QixLQUFLO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEMsT0FBTyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pFLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVk7SUFDckMsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBVTtJQUNqQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ2hDO0lBQ0QsT0FBTyxLQUFLLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNsRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQTJEO0lBQ3pGLE9BQU8sQ0FBQyxHQUFhLEVBQUUsR0FBUSxFQUFFLE9BQWEsRUFBRSxFQUFFO1FBQzlDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3RDLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNULEdBQUcsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQztTQUM5QjtRQUNELE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQztRQUNmLE9BQU8sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUM3RSxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxZQUFvQixFQUFFLEVBQW1DO0lBQy9FLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEdBQVcsRUFBRSxHQUFXO0lBQ3pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBVyxFQUFFLEdBQVc7SUFDM0MsT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsR0FBRyxhQUE2QjtJQUM5RCxPQUFPLElBQUksWUFBWSxDQUFDLEdBQUcsRUFBRTtRQUN6QixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3RCLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxZQUF1QjtJQUMxRCxJQUFJLE9BQVksQ0FBQztJQUNqQixPQUFPLElBQUksVUFBVSxDQUFNLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDdEMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLElBQUk7Z0JBQ0EsT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO2FBQ2xDO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1YsSUFBSSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3pCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO3FCQUFNO29CQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO2FBQ0o7U0FDSjtRQUNELE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQVUsRUFBRSxRQUFnQixDQUFDLEVBQUUsVUFBa0IsR0FBRztJQUN4RSxPQUFPLEdBQUcsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVLEVBQUUsUUFBZ0IsQ0FBQyxFQUFFLFVBQWtCLEdBQUc7SUFDekUsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUFvQixFQUFFLE1BQWdCO0lBQ25FLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM1QyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLEdBQUcsR0FBRyxLQUFZLENBQUM7WUFDdkIsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLEVBQUU7b0JBQ25ELE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDWixPQUFPO2lCQUNWO2FBQ0o7WUFDRCxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1IsQ0FBQztBQUVELE1BQU0sZ0JBQWdCLEdBQW9CLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQzs7QUFFckQsU0FBUyxhQUFhLENBQUMsTUFBVyxFQUFFLE1BQVcsRUFBRSxTQUEyQjtJQUN4RSxTQUFTLEdBQUcsU0FBUyxJQUFJLGdCQUFnQixDQUFDO0lBQzFDLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxNQUFNLENBQUM7SUFDL0UsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDakIsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ25ELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7Z0JBQUUsT0FBTztZQUNwRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSztnQkFDckIsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDOztnQkFFOUQsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxNQUFNLENBQUM7S0FDakI7SUFDRCxNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUM7SUFDdEYsSUFBSSxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1FBQ25DLElBQUksTUFBTSxDQUFDLFlBQVksS0FBSyxLQUFLO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULElBQUk7Z0JBQ0EsTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2FBQ3JDO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQztnQkFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDakM7U0FDSjtLQUNKO1NBQU07UUFDSCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBQzVDO0lBQ0QsbUJBQW1CO0lBQ25CLElBQUksTUFBTSxZQUFZLEdBQUcsRUFBRTtRQUN2QixJQUFJLE1BQU0sWUFBWSxHQUFHLEVBQUU7WUFDdkIsS0FBSyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7b0JBQUUsU0FBUztnQkFDckQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3ZHO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztLQUNqQjtJQUVELHNCQUFzQjtJQUN0QixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQy9CLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDaEUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMvRyxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFWCx5QkFBeUI7SUFDekIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUNmLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFJLEdBQU0sRUFBRSxTQUEwQjtJQUN4RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRCxNQUFNLFVBQVUsSUFBSSxDQUFJLEdBQU07SUFDMUIsT0FBTyxhQUFhLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFJLE1BQVMsRUFBRSxNQUFXLEVBQUUsU0FBMkI7SUFDekUsT0FBTyxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxJQUFTO0lBQ3pCLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2hCLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQy9CO0lBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUNqQixNQUFNLDJDQUEyQyxDQUFDO0tBQ3JEO0lBQ0QsT0FBTyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxVQUFrQixFQUFFLGVBQXVCLENBQUM7SUFDbkUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNuQyxNQUFNLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDdEQsSUFBSSxLQUFLLElBQUksWUFBWSxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDZCxPQUFPO2FBQ1Y7WUFDRCxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzlCLElBQUksR0FBRyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDdEI7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJO1lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7UUFDSCxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJO1lBQy9CLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLENBQU4sSUFBWSxZQTRCWDtBQTVCRCxXQUFZLFlBQVk7SUFDcEIsbUNBQWlCLENBQUE7SUFDakIsb0NBQWtCLENBQUE7SUFDbEIsaUNBQWUsQ0FBQTtJQUNmLHdDQUFzQixDQUFBO0lBQ3RCLG1DQUFpQixDQUFBO0lBQ2pCLHFDQUFtQixDQUFBO0lBQ25CLG9DQUFrQixDQUFBO0lBRWxCLHNDQUFvQixDQUFBO0lBQ3BCLG9DQUFrQixDQUFBO0lBQ2xCLHNDQUFvQixDQUFBO0lBQ3BCLHVDQUFxQixDQUFBO0lBQ3JCLHFDQUFtQixDQUFBO0lBQ25CLHdDQUFzQixDQUFBO0lBQ3RCLHFDQUFtQixDQUFBO0lBQ25CLHNDQUFvQixDQUFBO0lBQ3BCLHdDQUFzQixDQUFBO0lBRXRCLHNDQUFvQixDQUFBO0lBQ3BCLG9DQUFrQixDQUFBO0lBQ2xCLHNDQUFvQixDQUFBO0lBQ3BCLHVDQUFxQixDQUFBO0lBQ3JCLHFDQUFtQixDQUFBO0lBQ25CLHdDQUFzQixDQUFBO0lBQ3RCLHFDQUFtQixDQUFBO0lBQ25CLHNDQUFvQixDQUFBO0lBQ3BCLHdDQUFzQixDQUFBO0FBQzFCLENBQUMsRUE1QlcsWUFBWSxLQUFaLFlBQVksUUE0QnZCO0FBV0QsTUFBTSxhQUFhLEdBQWdCO0lBQy9CLFFBQVEsRUFBRSxZQUFZLENBQUMsT0FBTztJQUM5QixXQUFXLEVBQUUsWUFBWSxDQUFDLE1BQU07SUFDaEMsV0FBVyxFQUFFLFlBQVksQ0FBQyxRQUFRO0lBQ2xDLFNBQVMsRUFBRSxZQUFZLENBQUMsT0FBTztJQUMvQixVQUFVLEVBQUUsWUFBWSxDQUFDLEtBQUs7SUFDOUIsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTO0NBQ3BDLENBQUE7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVUsRUFBRSxLQUFtQjtJQUNwRCxPQUFPLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBc0IsRUFBRSxZQUEwQjtJQUM1RSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUE7SUFDN0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDaEksT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLHNHQUFzRyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbEksSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQTtRQUM5QixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixLQUFLLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQTthQUMxQjtpQkFBTTtnQkFDSCxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDM0IsS0FBSyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQzthQUN6RDtTQUNKO2FBQU07WUFDSCxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFDbEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNqQixDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVU7b0JBQ25CLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDaEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTO3dCQUNsQixDQUFDLENBQUMsS0FBSyxDQUFBO1NBQ3RCO1FBQ0QsT0FBTyxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2xELENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsS0FBYSxHQUFHO0lBQzdELE9BQU8sR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsOEJBQThCLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7ZXhlYyBhcyBleGVjQ2hpbGRQcm9jZXNzfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xyXG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gXCJjcnlwdG9cIjtcclxuaW1wb3J0IHtJbmplY3Rpb25Ub2tlbiwgRGVwZW5kZW5jeUNvbnRhaW5lcn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2NhblJlcG9ydEVycm9yfSBmcm9tIFwicnhqcy9pbnRlcm5hbC91dGlsL2NhblJlcG9ydEVycm9yXCI7XHJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwic29ja2V0LmlvXCI7XHJcbmltcG9ydCB7bWtkaXIsIHJlYWRGaWxlIGFzIGZzUmVhZEZpbGUsIHVubGluaywgd3JpdGVGaWxlIGFzIGZzV3JpdGVGaWxlfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHtiYXNlbmFtZSwgZGlybmFtZX0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHtHcmlkRlNCdWNrZXR9IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7RG9jdW1lbnQsIEZpbHRlclF1ZXJ5LCBNb2RlbCwgbW9kZWwsIFBpcGVsaW5lU3RhZ2UsIFF1ZXJ5LCBTY2hlbWEsIFR5cGVzfSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtnZXRWYWx1ZSBhcyBnZXRNb25nb1ZhbHVlLCBzZXRWYWx1ZSBhcyBzZXRNb25nb1ZhbHVlfSBmcm9tIFwibW9uZ29vc2UvbGliL3V0aWxzXCI7XHJcbmltcG9ydCB7UGFzc1Rocm91Z2gsIFJlYWRhYmxlLCBSZWFkYWJsZU9wdGlvbnN9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHNoYXJwXywge1JlZ2lvbn0gZnJvbSBcInNoYXJwXCI7XHJcbmltcG9ydCB7QWN0aW9uLCBCYWRSZXF1ZXN0RXJyb3IsIGNyZWF0ZVBhcmFtRGVjb3JhdG9yLCBIdHRwRXJyb3J9IGZyb20gXCJyb3V0aW5nLWNvbnRyb2xsZXJzXCI7XHJcbmltcG9ydCB7XHJcbiAgICBBZ2dyZWdhdGlvblBpcGVsaW5lU3RhZ2UsXHJcbiAgICBJQXNzZXRDcm9wSW5mbywgSUFzc2V0SW1hZ2VQYXJhbXMsXHJcbiAgICBJQXNzZXRNZXRhLFxyXG4gICAgSUNsaWVudFNvY2tldCwgSUxvb2t1cFN0YWdlLCBJTWF0Y2hGaWVsZCwgSU1hdGNoU3RhZ2UsIElNb25nb0V4cHJlc3Npb24sXHJcbiAgICBJUGFnaW5hdGlvbkJhc2UsXHJcbiAgICBJUGFnaW5hdGlvblBhcmFtcywgSVByb2plY3RTdGFnZSxcclxuICAgIElSZXF1ZXN0LCBJVW53aW5kT3B0aW9ucywgSVVud2luZFN0YWdlLFxyXG4gICAgVHlwZVxyXG59IGZyb20gXCIuL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuY29uc3Qgc2hhcnAgPSBzaGFycF87XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElESUNvbnRhaW5lcnMge1xyXG4gICAgYXBwQ29udGFpbmVyOiBEZXBlbmRlbmN5Q29udGFpbmVyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkaUNvbnRhaW5lcnM6IElESUNvbnRhaW5lcnMgPSB7XHJcbiAgICBhcHBDb250YWluZXI6IG51bGxcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEZpbHRlclByZWRpY2F0ZSA9ICh2YWx1ZTogYW55LCBrZXk/OiBhbnksIHRhcmdldD86IGFueSwgc291cmNlPzogYW55KSA9PiBib29sZWFuO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZShvYmo6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCJcXFxccyhbYS16QS1aXSspXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKHJlZ2V4KVsxXS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdldFR5cGUodmFsdWUpID09IFwib2JqZWN0XCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZTogYW55KTogdmFsdWUgaXMgYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRGF0ZSB7XHJcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdICYmICFpc05hTih2YWx1ZSkgJiYgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHZhbHVlLmdldERhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgKHR5cGUgIT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gXCJmdW5jdGlvblwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIEZ1bmN0aW9uIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZS5wcm90b3R5cGUgJiYgdmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yKSA9PT0gdmFsdWUgJiYgdmFsdWUubmFtZSAhPT0gXCJPYmplY3RcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgVHlwZTxhbnk+IHtcclxuICAgIHJldHVybiBpc0NvbnN0cnVjdG9yKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJmYWNlKG9iajogYW55LCBpbnRlckZhY2VPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBib29sZWFuIHtcclxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgaXNBcnJheShvYmopIHx8ICFpc09iamVjdChpbnRlckZhY2VPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW50ZXJGYWNlT2JqZWN0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgICBsZXQgdHlwZSA9IGludGVyRmFjZU9iamVjdFtrZXldIHx8IFwiXCI7XHJcbiAgICAgICAgaWYgKHR5cGUuc3RhcnRzV2l0aChcIipcIikpIHtcclxuICAgICAgICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYgZ2V0VHlwZShvYmpba2V5XSkgIT09IHR5cGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSB8fCBnZXRUeXBlKG9ialtrZXldKSAhPT0gdHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1Y0ZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdmFsdWVbMF0udG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cigxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxjRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiB2YWx1ZVswXS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RJZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiICYmIGlkLmxlbmd0aCA9PSAyNCAmJiAhaXNOYU4oTnVtYmVyKFwiMHhcIiArIGlkKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEl0ZW08VD4odmFsdWU6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGFzdEl0ZW08VD4odmFsdWU6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVncm91cDxUPih2YWx1ZTogVFtdLCBjb21wYXJhdG9yOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbik6IEFycmF5PFRbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxUW10+ID0gW107XHJcbiAgICBpZiAoIWlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PSAwKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgdmFsdWUgPSBBcnJheS5mcm9tKHZhbHVlKTtcclxuICAgIHJlc3VsdC5wdXNoKFt2YWx1ZS5zaGlmdCgpXSk7XHJcbiAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gcmVzdWx0LmZpbmQoZyA9PiBnLnNvbWUoYSA9PiBjb21wYXJhdG9yKGEsIGl0ZW0pKSk7XHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGdyb3VwLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnB1c2goW2l0ZW1dKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUl0ZW1zPFQ+KHZhbHVlOiBUW10pOiBUW10ge1xyXG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcigodiwgaXgpID0+IHZhbHVlLmluZGV4T2YodikgPT09IGl4KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55LCB0cmVlRmFsbGJhY2s6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICBrZXkgPSBrZXkgfHwgXCJcIjtcclxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xyXG4gICAgbGV0IGN1cktleSA9IFwiXCI7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgY3VyS2V5ICs9IGtleXMuc2hpZnQoKTtcclxuICAgICAgICBpZiAoaXNEZWZpbmVkKG9iaikgJiYgaXNEZWZpbmVkKG9ialtjdXJLZXldKSAmJiAodHlwZW9mIG9ialtjdXJLZXldID09PSBcIm9iamVjdFwiIHx8ICFrZXlzLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgb2JqID0gb2JqW2N1cktleV07XHJcbiAgICAgICAgICAgIGN1cktleSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICgha2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PSBcInVuZGVmaW5lZFwiID8ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cChgJHtjdXJLZXl9JGApLCBgeyR7Y3VyS2V5fX1gKSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgb2JqID0gdHJlZUZhbGxiYWNrID8gb2JqIHx8IGRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJLZXkgKz0gXCIuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSB3aGlsZSAoa2V5cy5sZW5ndGgpO1xyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnk8VD4oaXRlbXM6IFRbXSwgY2I6IChpdGVtOiBUKSA9PiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gY2IoaXRlbSk7XHJcbiAgICAgICAgcmVzW2dyb3VwXSA9IHJlc1tncm91cF0gfHwgW107XHJcbiAgICAgICAgcmVzW2dyb3VwXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9LCB7fSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWU6IGFueSwgdHlwZTogc3RyaW5nKTogYW55IHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gXCJub1wiIHx8IHZhbHVlID09IFwiZmFsc2VcIiB8fCB2YWx1ZSA9PSBcIjBcIikgPyBmYWxzZSA6ICEhdmFsdWU7XHJcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHZhbCkgPyAwIDogdmFsO1xyXG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YC5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RTZXJ2aWNlcyhzY2hlbWE6IFNjaGVtYTxhbnk+LCBzZXJ2aWNlczogeyBbcHJvcDogc3RyaW5nXTogSW5qZWN0aW9uVG9rZW48YW55PiB9KSB7XHJcbiAgICBjb25zdCBzZXJ2aWNlTWFwOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG4gICAgT2JqZWN0LmtleXMoc2VydmljZXMpLmZvckVhY2gocHJvcCA9PiB7XHJcbiAgICAgICAgc2NoZW1hXHJcbiAgICAgICAgICAgIC52aXJ0dWFsKHByb3ApXHJcbiAgICAgICAgICAgIC5nZXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlDb250YWluZXIgPSBkaUNvbnRhaW5lcnMuYXBwQ29udGFpbmVyO1xyXG4gICAgICAgICAgICAgICAgc2VydmljZU1hcFtwcm9wXSA9IHNlcnZpY2VNYXBbcHJvcF0gfHwgKCFkaUNvbnRhaW5lciA/IHt9IDogZGlDb250YWluZXIucmVzb2x2ZShzZXJ2aWNlc1twcm9wXSkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZpY2VNYXBbcHJvcF07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYWdpbmF0ZTxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsOiBNb2RlbDxUPiwgd2hlcmU6IEZpbHRlclF1ZXJ5PFQ+LCBwYXJhbXM6IElQYWdpbmF0aW9uUGFyYW1zKTogUHJvbWlzZTxJUGFnaW5hdGlvbkJhc2U8VD4+IHtcclxuICAgIHJldHVybiBtb2RlbC5jb3VudERvY3VtZW50cyh3aGVyZSkudGhlbihjb3VudCA9PiB7XHJcbiAgICAgICAgbGV0IHF1ZXJ5OiBRdWVyeTxhbnksIGFueT4gPSBtb2RlbC5maW5kKHdoZXJlKTtcclxuICAgICAgICBpZiAoaXNTdHJpbmcocGFyYW1zLnNvcnQpKSB7XHJcbiAgICAgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc29ydChwYXJhbXMuc29ydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpc0FycmF5KHBhcmFtcy5wb3B1bGF0ZSkpIHtcclxuICAgICAgICAgICAgcGFyYW1zLnBvcHVsYXRlLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5wb3B1bGF0ZShmaWVsZCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gKHBhcmFtcy5saW1pdCA+IDAgPyBxdWVyeS5za2lwKHBhcmFtcy5wYWdlICogcGFyYW1zLmxpbWl0KS5saW1pdChwYXJhbXMubGltaXQpIDogcXVlcnkpLnRoZW4oaXRlbXMgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0ge3RvdGFsOiBjb3VudH07XHJcbiAgICAgICAgICAgIHJldHVybiB7Y291bnQsIGl0ZW1zLCBtZXRhfTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbG9va3VwU3RhZ2VzKGZyb206IHN0cmluZywgbG9jYWxGaWVsZDogc3RyaW5nLCBhczogc3RyaW5nID0gbnVsbCwgZm9yZWlnbkZpZWxkOiBzdHJpbmcgPSBcIl9pZFwiLCBzaG91bGRVbndpbmQ6IGJvb2xlYW4gPSB0cnVlKTogW0lMb29rdXBTdGFnZSwgSVVud2luZFN0YWdlXSB7XHJcbiAgICBhcyA9IGFzIHx8IGxvY2FsRmllbGQucmVwbGFjZShcIklkXCIsIFwiXCIpO1xyXG4gICAgY29uc3Qgc3RhZ2VzOiBbSUxvb2t1cFN0YWdlLCBJVW53aW5kU3RhZ2VdID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJGxvb2t1cDoge1xyXG4gICAgICAgICAgICAgICAgZnJvbSxcclxuICAgICAgICAgICAgICAgIGxvY2FsRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmb3JlaWduRmllbGQsXHJcbiAgICAgICAgICAgICAgICBhc1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgICR1bndpbmQ6IHtcclxuICAgICAgICAgICAgICAgIHBhdGg6IGAkJHthc31gLFxyXG4gICAgICAgICAgICAgICAgcHJlc2VydmVOdWxsQW5kRW1wdHlBcnJheXM6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF07XHJcbiAgICBpZiAoIXNob3VsZFVud2luZCkge1xyXG4gICAgICAgIHN0YWdlcy5zcGxpY2UoMSwgMSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3RhZ2VzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGV0c0xvb2t1cFN0YWdlKGZyb206IHN0cmluZywgcGlwZWxpbmU6IEFnZ3JlZ2F0aW9uUGlwZWxpbmVTdGFnZVtdLCBhczogc3RyaW5nID0gbnVsbCwgbGV0RmllbGRzOiBhbnkgPSBudWxsKTogSUxvb2t1cFN0YWdlIHtcclxuICAgIGFzID0gYXMgfHwgZnJvbTtcclxuICAgIGxldEZpZWxkcyA9IGxldEZpZWxkcyB8fCB7aWQ6IFwiJF9pZFwifTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgJGxvb2t1cDoge1xyXG4gICAgICAgICAgICBmcm9tLFxyXG4gICAgICAgICAgICBsZXQ6IGxldEZpZWxkcyxcclxuICAgICAgICAgICAgcGlwZWxpbmUsXHJcbiAgICAgICAgICAgIGFzXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoU3RhZ2UobWF0Y2g6IE9iamVjdCk6IElNYXRjaFN0YWdlIHtcclxuICAgIHJldHVybiB7JG1hdGNoOiBtYXRjaH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaEZpZWxkKGZpZWxkOiBzdHJpbmcsIGZpbHRlcjogYW55LCB3aGVuOiBib29sZWFuKTogSU1hdGNoRmllbGQge1xyXG4gICAgcmV0dXJuIHtmaWVsZCwgZmlsdGVyLCB3aGVufTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoRmllbGRTdGFnZXMoLi4uZmllbGRzOiBJTWF0Y2hGaWVsZFtdKTogUmVhZG9ubHlBcnJheTxJTWF0Y2hTdGFnZT4ge1xyXG4gICAgY29uc3QgbWF0Y2ggPSB7fTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICBpZiAoZmllbGQud2hlbikge1xyXG4gICAgICAgICAgICBtYXRjaFtmaWVsZC5maWVsZF0gPSBmaWVsZC5maWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2gpLmxlbmd0aCA+IDAgPyBbbWF0Y2hTdGFnZShtYXRjaCldIDogW107XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0U3RhZ2UoZmllbGRzOiBJTW9uZ29FeHByZXNzaW9uKTogSVByb2plY3RTdGFnZSB7XHJcbiAgICByZXR1cm4geyRwcm9qZWN0OiBmaWVsZHN9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW53aW5kU3RhZ2UoZmllbGRPck9wdHM6IHN0cmluZyB8IElVbndpbmRPcHRpb25zKTogSVVud2luZFN0YWdlIHtcclxuICAgIHJldHVybiB7JHVud2luZDogZmllbGRPck9wdHN9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZVBvcHVsYXRlZDxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsVHlwZTogTW9kZWw8VD4sIGpzb246IGFueSk6IFQge1xyXG4gICAgbGV0IG9iamVjdCA9IG1vZGVsVHlwZS5oeWRyYXRlKGpzb24pO1xyXG5cclxuICAgIGZvciAoY29uc3QgW3BhdGgsIG9ial0gb2YgT2JqZWN0LmVudHJpZXMobW9kZWxUeXBlLnNjaGVtYS5vYmopKSB7XHJcbiAgICAgICAgbGV0IHtyZWYsIHR5cGV9ID0gb2JqIGFzIGFueTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiB0eXBlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmVmID0gdHlwZVswXS5yZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVmKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldE1vbmdvVmFsdWUocGF0aCwganNvbik7XHJcbiAgICAgICAgY29uc3QgaHlkcmF0ZVZhbCA9IHZhbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgaW5zdGFuY2VvZiBUeXBlcy5PYmplY3RJZCkgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgcmV0dXJuIGh5ZHJhdGVQb3B1bGF0ZWQobW9kZWwocmVmKSBhcyBhbnksIHZhbCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgc2V0TW9uZ29WYWx1ZShwYXRoLCB2YWx1ZS5tYXAoaHlkcmF0ZVZhbCksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRNb25nb1ZhbHVlKHBhdGgsIGh5ZHJhdGVWYWwodmFsdWUpLCBvYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3Q7XHJcblxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVBZ2dyZWdhdGlvbnM8VCBleHRlbmRzIERvY3VtZW50Pihtb2RlbDogTW9kZWw8VD4sIGFnZ3JlZ2F0aW9uczogUGlwZWxpbmVTdGFnZVtdLCBwYXJhbXM6IElQYWdpbmF0aW9uUGFyYW1zLCBtZXRhUHJvamVjdGlvbjogYW55ID0ge30pOiBQcm9taXNlPElQYWdpbmF0aW9uQmFzZTxUPj4ge1xyXG4gICAgY29uc3Qgc29ydEZpZWxkID0gIWlzU3RyaW5nKHBhcmFtcy5zb3J0KSB8fCAhcGFyYW1zLnNvcnQgPyBudWxsIDogKHBhcmFtcy5zb3J0LnN0YXJ0c1dpdGgoXCItXCIpID8gcGFyYW1zLnNvcnQuc3Vic3RyKDEpIDogcGFyYW1zLnNvcnQpO1xyXG4gICAgY29uc3Qgc29ydEFnZ3JlZ2F0aW9uOiBQaXBlbGluZVN0YWdlLlNvcnRbXSAgPSAhc29ydEZpZWxkID8gW10gOiBbe1xyXG4gICAgICAgICRzb3J0OiB7W3NvcnRGaWVsZF06IHNvcnRGaWVsZCA9PSBwYXJhbXMuc29ydCA/IDEgOiAtMX1cclxuICAgIH1dO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwuYWdncmVnYXRlKFtcclxuICAgICAgICAuLi5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgICAgLi4uc29ydEFnZ3JlZ2F0aW9uLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJGdyb3VwOiB7XHJcbiAgICAgICAgICAgICAgICBfaWQ6IFwicmVzdWx0c1wiLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7JHB1c2g6IFwiJCRDVVJSRU5UXCJ9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJHByb2plY3Q6IHtcclxuICAgICAgICAgICAgICAgIF9pZDogMCxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBwYXJhbXMubGltaXQgPiAwID8geyRzbGljZTogW1wiJHJlc3VsdFwiLCBwYXJhbXMucGFnZSAqIHBhcmFtcy5saW1pdCwgcGFyYW1zLmxpbWl0XX0gOiBcIiRyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIGNvdW50OiB7JHNpemU6IFwiJHJlc3VsdFwifSxcclxuICAgICAgICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogeyRzaXplOiBcIiRyZXN1bHRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ubWV0YVByb2plY3Rpb25cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF0pO1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHJlc3VsdFswXSBhcyBJUGFnaW5hdGlvbkJhc2U8VD47XHJcbiAgICBpZiAoIXBhZ2luYXRpb24pIHtcclxuICAgICAgICByZXR1cm4ge2l0ZW1zOiBbXSwgY291bnQ6IDAsIG1ldGE6IHt0b3RhbDogMH19O1xyXG4gICAgfVxyXG4gICAgcGFnaW5hdGlvbi5pdGVtcyA9IHBhZ2luYXRpb24uaXRlbXMubWFwKGkgPT4gaHlkcmF0ZVBvcHVsYXRlZChtb2RlbCwgaSkpO1xyXG4gICAgcmV0dXJuIHBhZ2luYXRpb247XHJcbn1cclxuXHJcbmNvbnN0IGNyb3BJbnRlcmZhY2UgPSB7XHJcbiAgICB4OiBcIm51bWJlclwiLFxyXG4gICAgeTogXCJudW1iZXJcIixcclxuICAgIHc6IFwibnVtYmVyXCIsXHJcbiAgICBoOiBcIm51bWJlclwiXHJcbn07XHJcblxyXG5mdW5jdGlvbiB0b0Nyb3BSZWdpb24oY3JvcEluZm86IHN0cmluZyB8IElBc3NldENyb3BJbmZvKTogUmVnaW9uIHtcclxuICAgIGxldCBjcm9wID0gY3JvcEluZm8gYXMgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBpZiAoaXNTdHJpbmcoY3JvcEluZm8pKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY3JvcCA9IEpTT04ucGFyc2UoY3JvcEluZm8gYXMgc3RyaW5nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXNJbnRlcmZhY2UoY3JvcCwgY3JvcEludGVyZmFjZSkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB3aWR0aDogTWF0aC5yb3VuZChjcm9wLncpLFxyXG4gICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChjcm9wLmgpLFxyXG4gICAgICAgIHRvcDogTWF0aC5yb3VuZChjcm9wLnkpLFxyXG4gICAgICAgIGxlZnQ6IE1hdGgucm91bmQoY3JvcC54KVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvSW1hZ2U8VCA9IEJ1ZmZlciB8IFJlYWRhYmxlPihzcmM6IFQsIHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8VD4ge1xyXG5cclxuICAgIC8vIERlZmF1bHQgcGFyYW1zIGFuZCBtZXRhXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XHJcbiAgICBtZXRhID0gbWV0YSB8fCB7fTtcclxuXHJcbiAgICAvLyBHZXQgZGVmYXVsdCBjcm9wIGluZm9cclxuICAgIGNvbnN0IGNyb3AgPSB0b0Nyb3BSZWdpb24obWV0YS5jcm9wKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIHNyYyBpZiB0aGVyZSBhcmUgbm8gcGFyYW1zIGFuZCBubyBkZWZhdWx0IGNyb3AgZXhpc3RzXHJcbiAgICBpZiAobWV0YS5leHRlbnNpb24gPT09IFwic3ZnXCIgfHwgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09IDAgJiYgIWNyb3ApKSB7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYXJzZSBwYXJhbXNcclxuICAgIHBhcmFtcy5yb3RhdGlvbiA9IGlzTmFOKHBhcmFtcy5yb3RhdGlvbikgPyAwIDogTWF0aC5yb3VuZChwYXJhbXMucm90YXRpb24gLyA5MCkgKiA5MDtcclxuICAgIHBhcmFtcy5jYW52YXNTY2FsZVggPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICBwYXJhbXMuY2FudmFzU2NhbGVZID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgcGFyYW1zLnNjYWxlWCA9IGlzTmFOKHBhcmFtcy5zY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVYKTtcclxuICAgIHBhcmFtcy5zY2FsZVkgPSBpc05hTihwYXJhbXMuc2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWSk7XHJcbiAgICBwYXJhbXMuY3JvcCA9IGlzQm9vbGVhbihwYXJhbXMuY3JvcCkgPyBwYXJhbXMuY3JvcCA6IHBhcmFtcy5jcm9wID09IFwidHJ1ZVwiO1xyXG5cclxuICAgIGxldCBidWZmZXIgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHNyYykgOiBzcmMgYXMgYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBHZXQgY3JvcCBpbmZvXHJcbiAgICAgICAgY29uc3QgY3JvcEJlZm9yZSA9IHRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEJlZm9yZSB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BCZWZvcmUgOiBudWxsKSk7XHJcbiAgICAgICAgY29uc3QgY3JvcEFmdGVyID0gdG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQWZ0ZXIgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQWZ0ZXIgOiBudWxsKSk7XHJcbiAgICAgICAgLy8gR2V0IG1ldGFkYXRhXHJcbiAgICAgICAgbGV0IGltZyA9IHNoYXJwKGJ1ZmZlcik7XHJcbiAgICAgICAgbGV0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IGltZy5tZXRhZGF0YSgpO1xyXG4gICAgICAgIC8vIENyb3AgYmVmb3JlIHJlc2l6ZVxyXG4gICAgICAgIGlmIChjcm9wQmVmb3JlKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gY3JvcEJlZm9yZS53aWR0aDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcEJlZm9yZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3BCZWZvcmUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3JvcCkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGNyb3AuaGVpZ2h0O1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVzaXplIGNhbnZhc1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWCA9IG1ldGE/LmNhbnZhc1NjYWxlWCB8fCAxO1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWSA9IG1ldGE/LmNhbnZhc1NjYWxlWSB8fCAxO1xyXG4gICAgICAgIGlmIChwYXJhbXMuY2FudmFzU2NhbGVYICE9PSBjYW52YXNTY2FsZVggfHwgcGFyYW1zLmNhbnZhc1NjYWxlWSAhPT0gY2FudmFzU2NhbGVZKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiY29udGFpblwifSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlc2l6ZSBpbWFnZVxyXG4gICAgICAgIGlmIChwYXJhbXMuc2NhbGVYICE9PSAxIHx8IHBhcmFtcy5zY2FsZVkgIT09IDEpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLnNjYWxlWCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLnNjYWxlWSk7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJmaWxsXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ3JvcCBhZnRlciByZXNpemVcclxuICAgICAgICBpZiAoY3JvcEFmdGVyKSB7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3BBZnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJvdGF0ZVxyXG4gICAgICAgIGlmIChwYXJhbXMucm90YXRpb24gIT09IDApIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgaW1nLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGltZyA9IHNoYXJwKGJ1ZmZlcikucm90YXRlKHBhcmFtcy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1ZmZlciA9IGF3YWl0IGltZy50b0J1ZmZlcigpO1xyXG4gICAgICAgIHNyYyA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSA6IGJ1ZmZlcjtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW1hZ2UgY29udmVyc2lvbiBlcnJvclwiLCBlKTtcclxuICAgICAgICBzcmMgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcikgOiBidWZmZXI7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcjogQnVmZmVyKTogUmVhZGFibGUge1xyXG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xyXG4gICAgcmVhZFN0cmVhbS5lbmQoYnVmZmVyKTtcclxuICAgIHJldHVybiByZWFkU3RyZWFtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW06IFJlYWRhYmxlKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjb25jYXQgPSBbXTtcclxuICAgICAgICBzdHJlYW0ub24oXCJkYXRhXCIsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25jYXQucHVzaChkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY29uY2F0KSkpO1xyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgUmVhZGFibGVTdHJlYW1DbG9uZSBleHRlbmRzIFJlYWRhYmxlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkYWJsZVN0cmVhbTogUmVhZGFibGUsIG9wdHM/OiBSZWFkYWJsZU9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihvcHRzKTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZXJyb3JcIiwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVhZChzaXplOiBudW1iZXIpIHtcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5U3RyZWFtKHN0cmVhbTogUmVhZGFibGUsIG9wdHM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZSB7XHJcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtQ2xvbmUoc3RyZWFtLCBvcHRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1rZGlyUmVjdXJzaXZlKHBhdGg6IHN0cmluZywgbW9kZTogbnVtYmVyID0gbnVsbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBta2RpcihwYXRoLCB7bW9kZTogbW9kZSB8fCAwbzc3NywgcmVjdXJzaXZlOiB0cnVlfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNSZWFkRmlsZShwYXRoLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEFuZERlbGV0ZUZpbGUocGF0aDogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIgPSA1MDAwKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwYXRoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHVubGluayhwYXRoLCAoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCB0aW1lb3V0KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGF3YWl0IG1rZGlyUmVjdXJzaXZlKGRpcm5hbWUocGF0aCkpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNXcml0ZUZpbGUocGF0aCwgZGF0YSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRvUHJvbWlzZSh2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlVGltZW91dCh0aW1lb3V0OiBudW1iZXIgPSAxMDAwLCBlcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoYFRpbWVvdXQgZXhjZWVkZWQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoYFRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodHlwZTogVHlwZTxhbnk+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYzogRnVuY3Rpb24pOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBSZW1vdmUgY29tbWVudHMgb2YgdGhlIGZvcm0gLyogLi4uICovXHJcbiAgICAvLyBSZW1vdmluZyBjb21tZW50cyBvZiB0aGUgZm9ybSAvL1xyXG4gICAgLy8gUmVtb3ZlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIHsgLi4uIH1cclxuICAgIC8vIHJlbW92aW5nIFwiPT5cIiBpZiBmdW5jIGlzIGFycm93IGZ1bmN0aW9uXHJcbiAgICBjb25zdCBzdHIgPSBmdW5jLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXC8oLikqL2csIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL3tbXFxzXFxTXSp9LywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvPT4vZywgXCJcIilcclxuICAgICAgICAudHJpbSgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHBhcmFtZXRlciBuYW1lcyBhZnRlciBmaXJzdCBcIihcIlxyXG4gICAgY29uc3Qgc3RhcnQgPSBzdHIuaW5kZXhPZihcIihcIikgKyAxO1xyXG5cclxuICAgIC8vIEVuZCBwYXJhbWV0ZXIgbmFtZXMgaXMganVzdCBiZWZvcmUgbGFzdCBcIilcIlxyXG4gICAgY29uc3QgZW5kID0gc3RyLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLnNwbGl0KFwiLCBcIik7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcclxuXHJcbiAgICByZXN1bHQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZpbmcgYW55IGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5yZXBsYWNlKC89W1xcc1xcU10qL2csIFwiXCIpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZWxlbWVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJveHlGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5oZWxwZXJbbmFtZV0gYXMgRnVuY3Rpb24pLmFwcGx5KHRoaXMuaGVscGVyLCBhcmdzKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3h5RnVuY3Rpb25zKHNjaGVtYTogU2NoZW1hLCBoZWxwZXI6IFR5cGU8YW55PiwgcGFyYW1OYW1lOiBzdHJpbmcgPSBudWxsKTogdm9pZCB7XHJcbiAgICBwYXJhbU5hbWUgPSBwYXJhbU5hbWUgfHwgbGNGaXJzdChnZXRDb25zdHJ1Y3Rvck5hbWUoaGVscGVyKSkucmVwbGFjZSgvaGVscGVyJC9naSwgXCJcIik7XHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGhlbHBlci5wcm90b3R5cGUpO1xyXG4gICAgT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IGRlc2NyaXB0b3JzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZ1bmMpICYmIG5hbWUgIT09IFwiY29uc3RydWN0b3JcIikge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYyk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbU5hbWVzWzBdID09IHBhcmFtTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hLm1ldGhvZHNbbmFtZV0gPSBwcm94eUZ1bmN0aW9uKG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpbmplY3RTZXJ2aWNlcyhzY2hlbWEsIHtcclxuICAgICAgICBcImhlbHBlclwiOiBoZWxwZXJcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUmVzb2x2ZUVudGl0eTxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsOiBNb2RlbDxUPiwgZXh0cmFDaGVjaz86IChxdWVyeTogUXVlcnk8VCwgYW55PiwgYWN0aW9uOiBBY3Rpb24pID0+IFQgfCBQcm9taXNlPFQ+KTogUGFyYW1ldGVyRGVjb3JhdG9yIHtcclxuICAgIGNvbnN0IG1vZGVsTmFtZSA9IG1vZGVsLm1vZGVsTmFtZTtcclxuICAgIGNvbnN0IHBhcmFtTmFtZSA9IG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVBhcmFtRGVjb3JhdG9yKHtcclxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6IGFzeW5jIGFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGFjdGlvbi5yZXF1ZXN0IGFzIElSZXF1ZXN0O1xyXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXIoYHgtJHtwYXJhbU5hbWV9LXRva2VuYCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVxLnBhcmFtc1tgJHtwYXJhbU5hbWV9SWRgXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmICghaWQgJiYgIXRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGAke21vZGVsTmFtZX0gaWQgb3IgdG9rZW4gc2hvdWxkIGJlIGRlZmluZWQhYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSAhdG9rZW5cclxuICAgICAgICAgICAgICAgID8gbW9kZWwuZmluZEJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICA6IG1vZGVsLmZpbmRPbmUoe3Rva2VufSBhcyBhbnkpO1xyXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBxdWVyeTtcclxuICAgICAgICAgICAgaWYgKCFkb2MpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDA0LCAhdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICA/IGAke21vZGVsTmFtZX0gY291bGQgbm90IGJlIGZvdW5kIHdpdGggaWQ6ICR7aWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogYCR7bW9kZWxOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgd2l0aCB0b2tlbjogJHt0b2tlbn1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihleHRyYUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdID0gYXdhaXQgdmFsdWVUb1Byb21pc2UoZXh0cmFDaGVjayhxdWVyeSwgYWN0aW9uKSkgfHwgZG9jO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYCR7bW9kZWxOYW1lfSBjaGVjayBlcnJvcjogJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdID0gZG9jO1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nLCB3aXRoRXh0ZW5zaW9uOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHBhdGggfHwgXCJcIik7XHJcbiAgICByZXR1cm4gd2l0aEV4dGVuc2lvbiA/IG5hbWUgOiBuYW1lLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAtMSkuam9pbihcIi5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoIHx8IFwiXCIpO1xyXG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaWRUb1N0cmluZyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaWRUb1N0cmluZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBPYmplY3RJZCA/IHZhbHVlLnRvSGV4U3RyaW5nKCkgOiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtZXIodHJhbnNmb3JtPzogKGRvYzogRG9jdW1lbnQsIHJldDogYW55LCBvcHRpb25zPzogYW55KSA9PiBhbnkpIHtcclxuICAgIHJldHVybiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IHtcclxuICAgICAgICByZXQuaWQgPSBpZFRvU3RyaW5nKHJldC5pZCkgfHwgcmV0LmlkO1xyXG4gICAgICAgIGlmIChkb2MuX2lkKSB7XHJcbiAgICAgICAgICAgIHJldC5faWQgPSBpZFRvU3RyaW5nKGRvYy5faWQpO1xyXG4gICAgICAgICAgICByZXQuaWQgPSByZXQuaWQgfHwgcmV0Ll9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHJldC5fX3Y7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odHJhbnNmb3JtKSA/IHRyYW5zZm9ybShkb2MsIHJldCwgb3B0aW9ucykgfHwgcmV0IDogcmV0O1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdChzb2NrZXRTZXJ2ZXI6IFNlcnZlciwgY2I6IChjbGllbnQ6IElDbGllbnRTb2NrZXQpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhzb2NrZXRTZXJ2ZXIuc29ja2V0cy5zb2NrZXRzKSkuZm9yRWFjaChjYik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChyYW5kb20obWluLCBtYXgpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG1pbiArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpU3Vic2NyaXB0aW9uKC4uLnN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdKTogU3Vic2NyaXB0aW9uIHtcclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2YWJsZUZyb21GdW5jdGlvbihjYWxsYmFja0Z1bmM6ICgpID0+IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgc3ViamVjdDogYW55O1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4oKHN1YnNjcmliZXIpID0+IHtcclxuICAgICAgICBpZiAoIXN1YmplY3QpIHtcclxuICAgICAgICAgICAgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gZnJvbShjYWxsYmFja0Z1bmMoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhblJlcG9ydEVycm9yKHN1YmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZExlZnQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZFN0YXJ0KGNvdW50LCBwYWRXaXRoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZFJpZ2h0KHZhbHVlOiBhbnksIGNvdW50OiBudW1iZXIgPSAzLCBwYWRXaXRoOiBzdHJpbmcgPSBcIjBcIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9YC5wYWRFbmQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRnJvbUJ1Y2tldChidWNrZXQ6IEdyaWRGU0J1Y2tldCwgZmlsZUlkOiBPYmplY3RJZCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGJ1Y2tldC5kZWxldGUoZmlsZUlkLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnIgPSBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZXJyb3IubWVzc2FnZSB8fCBlcnJvciB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZyhlcnIpIHx8ICFlcnIuc3RhcnRzV2l0aChcIkZpbGVOb3RGb3VuZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGZpbGVJZC50b0hleFN0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pKTtcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlID0gKCkgPT4gdHJ1ZTtcclxuXHJcbmZ1bmN0aW9uIGNvcHlSZWN1cnNpdmUodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBhbnkge1xyXG4gICAgcHJlZGljYXRlID0gcHJlZGljYXRlIHx8IGRlZmF1bHRQcmVkaWNhdGU7XHJcbiAgICBpZiAoaXNQcmltaXRpdmUoc291cmNlKSB8fCBpc0RhdGUoc291cmNlKSB8fCBpc0Z1bmN0aW9uKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XHJcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gaXNBcnJheSh0YXJnZXQpID8gQXJyYXkuZnJvbSh0YXJnZXQpIDogW107XHJcbiAgICAgICAgc291cmNlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlKGl0ZW0sIGluZGV4LCB0YXJnZXQsIHNvdXJjZSkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiBpbmRleClcclxuICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBjb3B5UmVjdXJzaXZlKHRhcmdldFtpbmRleF0sIGl0ZW0sIHByZWRpY2F0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGNvcHlSZWN1cnNpdmUobnVsbCwgaXRlbSwgcHJlZGljYXRlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNob3VsZENvcHkgPSBpc0Z1bmN0aW9uKHNvdXJjZS5fX3Nob3VsZENvcHkpID8gc291cmNlLl9fc2hvdWxkQ29weSA6ICgpID0+IHRydWU7XHJcbiAgICBpZiAoaXNDb25zdHJ1Y3Rvcihzb3VyY2UuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5fX3Nob3VsZENvcHkgPT09IGZhbHNlKSByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgc291cmNlLmNvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvID0gc291cmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCBzb3VyY2UucHJvdG90eXBlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRhcmdldCA9IE9iamVjdC5hc3NpZ24oe30sIHRhcmdldCB8fCB7fSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb3B5IG1hcCBlbnRyaWVzXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUodmFsdWUsIGtleSwgdGFyZ2V0LCBzb3VyY2UpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCAhc2hvdWxkQ29weShrZXksIHZhbHVlKSA/IHZhbHVlIDogY29weVJlY3Vyc2l2ZSh0YXJnZXQuZ2V0KGtleSksIHZhbHVlLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IG1lbWJlcnNcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuICAgIHRhcmdldCA9IGtleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghcHJlZGljYXRlKHNvdXJjZVtrZXldLCBrZXksIHJlc3VsdCwgc291cmNlKSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICByZXN1bHRba2V5XSA9ICFzaG91bGRDb3B5KGtleSwgc291cmNlW2tleV0pID8gc291cmNlW2tleV0gOiBjb3B5UmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzb3VyY2Vba2V5XSwgcHJlZGljYXRlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgdGFyZ2V0KTtcclxuXHJcbiAgICAvLyBDb3B5IG9iamVjdCBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XHJcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZpbHRlcihrID0+IGtleXMuaW5kZXhPZihrKSA8IDApO1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihvYmo6IFQsIHByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlKTogUGFydGlhbDxUPiB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmosIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5PFQ+KG9iajogVCk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUobnVsbCwgb2JqKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUPih0YXJnZXQ6IFQsIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBUIHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKHRhcmdldCwgc291cmNlLCBwcmVkaWNhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWQ1KGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XHJcbiAgICAgICAgdGhyb3cgYENhbid0IG1kNSBvdGhlciB0aGF0IHJhdyBvYmplY3Qgb3Igc3RyaW5nYDtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShkYXRhKS5kaWdlc3QoXCJoZXhcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBydW5Db21tYW5kKHNjcmlwdFBhdGg6IHN0cmluZywgZXhwZWN0ZWRDb2RlOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3AgPSBleGVjQ2hpbGRQcm9jZXNzKHNjcmlwdFBhdGgsIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBleHBlY3RlZENvZGUgIT09IGVycm9yLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbGluZXMgPSAoc3Rkb3V0IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgICAgICBsZXQgbGluZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICghbGluZSAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZXMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShsaW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRvdXQub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3Auc3RkZXJyLm9uKFwiZGF0YVwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ29uc29sZUNvbG9yIHtcclxuICAgIFJlc2V0ID0gXCJcXHgxYlswbVwiLFxyXG4gICAgQnJpZ2h0ID0gXCJcXHgxYlsxbVwiLFxyXG4gICAgRGltID0gXCJcXHgxYlsybVwiLFxyXG4gICAgVW5kZXJzY29yZSA9IFwiXFx4MWJbNG1cIixcclxuICAgIEJsaW5rID0gXCJcXHgxYls1bVwiLFxyXG4gICAgUmV2ZXJzZSA9IFwiXFx4MWJbN21cIixcclxuICAgIEhpZGRlbiA9IFwiXFx4MWJbOG1cIixcclxuXHJcbiAgICBGZ0JsYWNrID0gXCJcXHgxYlszMG1cIixcclxuICAgIEZnUmVkID0gXCJcXHgxYlszMW1cIixcclxuICAgIEZnR3JlZW4gPSBcIlxceDFiWzMybVwiLFxyXG4gICAgRmdZZWxsb3cgPSBcIlxceDFiWzMzbVwiLFxyXG4gICAgRmdCbHVlID0gXCJcXHgxYlszNG1cIixcclxuICAgIEZnTWFnZW50YSA9IFwiXFx4MWJbMzVtXCIsXHJcbiAgICBGZ0N5YW4gPSBcIlxceDFiWzM2bVwiLFxyXG4gICAgRmdXaGl0ZSA9IFwiXFx4MWJbMzdtXCIsXHJcbiAgICBGZ0RlZmF1bHQgPSBcIlxceDFiWzM4bVwiLFxyXG5cclxuICAgIEJnQmxhY2sgPSBcIlxceDFiWzQwbVwiLFxyXG4gICAgQmdSZWQgPSBcIlxceDFiWzQxbVwiLFxyXG4gICAgQmdHcmVlbiA9IFwiXFx4MWJbNDJtXCIsXHJcbiAgICBCZ1llbGxvdyA9IFwiXFx4MWJbNDNtXCIsXHJcbiAgICBCZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxyXG4gICAgQmdNYWdlbnRhID0gXCJcXHgxYls0NW1cIixcclxuICAgIEJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXHJcbiAgICBCZ1doaXRlID0gXCJcXHgxYls0N21cIixcclxuICAgIEJnRGVmYXVsdCA9IFwiXFx4MWJbNDhtXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSnNvbkNvbG9ycyB7XHJcbiAgICBrZXlDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIG51bWJlckNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgc3RyaW5nQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICB0cnVlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBmYWxzZUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVsbENvbG9yPzogQ29uc29sZUNvbG9yO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0Q29sb3JzOiBJSnNvbkNvbG9ycyA9IHtcclxuICAgIGtleUNvbG9yOiBDb25zb2xlQ29sb3IuRmdXaGl0ZSxcclxuICAgIG51bWJlckNvbG9yOiBDb25zb2xlQ29sb3IuRmdCbHVlLFxyXG4gICAgc3RyaW5nQ29sb3I6IENvbnNvbGVDb2xvci5GZ1llbGxvdyxcclxuICAgIHRydWVDb2xvcjogQ29uc29sZUNvbG9yLkZnR3JlZW4sXHJcbiAgICBmYWxzZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdSZWQsXHJcbiAgICBudWxsQ29sb3I6IENvbnNvbGVDb2xvci5CZ01hZ2VudGFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplKGlucHV0OiBhbnksIGNvbG9yOiBDb25zb2xlQ29sb3IpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2NvbG9yfSR7aW5wdXR9JHtDb25zb2xlQ29sb3IuUmVzZXR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpzb25IaWdobGlnaHQoaW5wdXQ6IHN0cmluZyB8IG9iamVjdCwgY29sb3JPcHRpb25zPzogSUpzb25Db2xvcnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbG9ycywgY29sb3JPcHRpb25zKVxyXG4gICAgY29uc3QganNvbiA9IChpc1N0cmluZyhpbnB1dCkgPyBpbnB1dCA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKSkucmVwbGFjZSgvJi9nLCAnJicpLnJlcGxhY2UoLzwvZywgJzwnKS5yZXBsYWNlKC8+L2csICc+JylcclxuICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytdP1xcZCspPykvZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gY29sb3JzLm51bWJlckNvbG9yXHJcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgIGlmICgvOiQvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5rZXlDb2xvclxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnMuc3RyaW5nQ29sb3I7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9ICdcIicgKyBtYXRjaC5zdWJzdHIoMSwgbWF0Y2gubGVuZ3RoIC0gMikgKyAnXCInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29sb3IgPSAvdHJ1ZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgID8gY29sb3JzLnRydWVDb2xvclxyXG4gICAgICAgICAgICAgICAgOiAvZmFsc2UvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMuZmFsc2VDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgIDogL251bGwvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sb3JzLm51bGxDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbG9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtjb2xvcn0ke21hdGNofSR7Q29uc29sZUNvbG9yLlJlc2V0fWBcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nLCB0bzogc3RyaW5nID0gXCItXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3N0cn1gLnJlcGxhY2UoL1smXFwvXFxcXCMsICsoKSR+JS5AJ1wiOio/PD57fV0vZywgdG8pO1xyXG59XHJcbiJdfQ==
|
|
846
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBQyxLQUFLLEVBQUUsUUFBUSxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUUsU0FBUyxJQUFJLFdBQVcsRUFBQyxNQUFNLElBQUksQ0FBQztBQUNuRixPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQTJDLEtBQUssRUFBZ0MsS0FBSyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzlHLE9BQU8sRUFBQyxRQUFRLElBQUksYUFBYSxFQUFFLFFBQVEsSUFBSSxhQUFhLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBa0IsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLE1BQWdCLE1BQU0sT0FBTyxDQUFDO0FBQ3JDLE9BQU8sRUFBUyxlQUFlLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFlN0YsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBTXJCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBa0I7SUFDdkMsWUFBWSxFQUFFLElBQUk7Q0FDckIsQ0FBQztBQUlGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFVO0lBQ3hDLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxPQUFPLEtBQUssSUFBSSxXQUFXLENBQUM7QUFDeEQsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsS0FBVTtJQUNoQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsR0FBUTtJQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUM3RSxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFVO0lBQy9CLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQztBQUN0QyxDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxLQUFVO0lBQzlCLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxLQUFVO0lBQ2hDLE9BQU8sT0FBTyxLQUFLLEtBQUssU0FBUyxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLEtBQVU7SUFDN0IsT0FBTyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksV0FBVyxLQUFLLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQztBQUN6RyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFVO0lBQ2xDLE1BQU0sSUFBSSxHQUFHLE9BQU8sS0FBSyxDQUFDO0lBQzFCLE9BQU8sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUFFRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQVU7SUFDL0IsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUM7QUFDckMsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBVTtJQUNqQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxLQUFVO0lBQ3BDLE9BQU8sQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUM7QUFDekksQ0FBQztBQUVELE1BQU0sVUFBVSxNQUFNLENBQUMsS0FBVTtJQUM3QixPQUFPLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNoQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBQyxHQUFRLEVBQUUsZUFBMEM7SUFDNUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2hHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDMUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDcEIsSUFBSSxJQUFJLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxJQUFJO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQzNFO2FBQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUMvRCxPQUFPLEtBQUssQ0FBQztTQUNoQjtLQUNKO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYTtJQUNqQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYTtJQUNqQyxJQUFJLENBQUMsS0FBSztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3RCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsRUFBVTtJQUNqQyxPQUFPLE9BQU8sRUFBRSxLQUFLLFFBQVEsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEYsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUksS0FBVTtJQUNuQyxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBSSxLQUFVO0lBQ2xDLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUksS0FBVSxFQUFFLFVBQW1DO0lBQ3RFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBQ3hELEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxJQUFJLEtBQUssRUFBRTtZQUNQLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsT0FBTztTQUNWO1FBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLFdBQVcsQ0FBSSxLQUFVO0lBQ3JDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBUSxFQUFFLEdBQVcsRUFBRSxZQUFrQixFQUFFLGVBQXdCLEtBQUs7SUFDN0YsR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLENBQUM7SUFDaEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsR0FBRztRQUNDLE1BQU0sSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQy9GLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsTUFBTSxHQUFHLEVBQUUsQ0FBQztTQUNmO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsWUFBWSxHQUFHLE9BQU8sWUFBWSxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxHQUFHLE1BQU0sR0FBRyxDQUFDLEVBQUUsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDeEgsR0FBRyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQzNEO2FBQU07WUFDSCxNQUFNLElBQUksR0FBRyxDQUFDO1NBQ2pCO0tBQ0osUUFBUSxJQUFJLENBQUMsTUFBTSxFQUFFO0lBQ3RCLE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQUksS0FBVSxFQUFFLEVBQXVCO0lBQzFELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUM5QixNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQVUsRUFBRSxJQUFZO0lBQ2pELFFBQVEsSUFBSSxFQUFFO1FBQ1YsS0FBSyxTQUFTO1lBQ1YsS0FBSyxHQUFHLE9BQU8sS0FBSyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDL0QsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxJQUFJLE9BQU8sSUFBSSxLQUFLLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUNqRixLQUFLLFFBQVE7WUFDVCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ2hDLEtBQUssT0FBTztZQUNSLElBQUk7Z0JBQ0EsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzVCO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1IsT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNqQztLQUNSO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBbUIsRUFBRSxRQUFpRDtJQUNqRyxNQUFNLFVBQVUsR0FBNEIsRUFBRSxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ2pDLE1BQU07YUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO2FBQ2IsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNOLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDOUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRyxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQXFCLEtBQWUsRUFBRSxLQUFxQixFQUFFLE1BQXlCO0lBQzFHLE9BQU8sS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDNUMsSUFBSSxLQUFLLEdBQW9CLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZCLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNuQztRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUMxQixNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUIsS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEMsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEcsTUFBTSxJQUFJLEdBQUcsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLENBQUM7WUFDNUIsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQVksRUFBRSxVQUFrQixFQUFFLEtBQWEsSUFBSSxFQUFFLGVBQXVCLEtBQUssRUFBRSxlQUF3QixJQUFJO0lBQ3hJLEVBQUUsR0FBRyxFQUFFLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDeEMsTUFBTSxNQUFNLEdBQWlEO1FBQ3pEO1lBQ0ksT0FBTyxFQUFFO2dCQUNMLElBQUk7Z0JBQ0osVUFBVTtnQkFDVixZQUFZO2dCQUNaLEVBQUU7YUFDTDtTQUNKO1FBQ0Q7WUFDSSxPQUFPLEVBQUU7Z0JBQ0wsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFO2dCQUNkLDBCQUEwQixFQUFFLElBQUk7YUFDbkM7U0FDSjtLQUNKLENBQUM7SUFDRixJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDdkI7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxJQUFZLEVBQUUsUUFBa0csRUFBRSxLQUFhLElBQUksRUFBRSxZQUFpQixJQUFJO0lBQ3RMLEVBQUUsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQ2hCLFNBQVMsR0FBRyxTQUFTLElBQUksRUFBQyxFQUFFLEVBQUUsTUFBTSxFQUFDLENBQUM7SUFDdEMsT0FBTztRQUNILE9BQU8sRUFBRTtZQUNMLElBQUk7WUFDSixHQUFHLEVBQUUsU0FBUztZQUNkLFFBQVE7WUFDUixFQUFFO1NBQ0w7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsS0FBOEM7SUFDckUsT0FBTyxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztBQUMzQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxLQUFhLEVBQUUsTUFBVyxFQUFFLElBQWE7SUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxHQUFHLE1BQXFCO0lBQ3JELE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUNqQixNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25CLElBQUksS0FBSyxDQUFDLElBQUksRUFBRTtZQUNaLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNyQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNwRSxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUF1QjtJQUNoRCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLFdBQW9DO0lBQzVELE9BQU8sRUFBQyxPQUFPLEVBQUUsV0FBVyxFQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxnQkFBZ0IsQ0FBcUIsU0FBbUIsRUFBRSxJQUFTO0lBQy9FLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFckMsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM1RCxJQUFJLEVBQUMsR0FBRyxFQUFFLElBQUksRUFBQyxHQUFHLEdBQVUsQ0FBQztRQUM3QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDeEMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7U0FDckI7UUFDRCxJQUFJLENBQUMsR0FBRztZQUFFLFNBQVM7UUFDbkIsTUFBTSxLQUFLLEdBQUcsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNyQixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxZQUFZLEtBQUssQ0FBQyxRQUFRO2dCQUFFLE9BQU8sR0FBRyxDQUFDO1lBQzdELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQztRQUNGLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbkQsU0FBUztTQUNaO1FBQ0QsYUFBYSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7S0FDbEQ7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUVsQixDQUFDO0FBRUQsTUFBTSxVQUFnQixvQkFBb0IsQ0FBcUIsS0FBZSxFQUFFLFlBQTZCLEVBQUUsTUFBeUIsRUFBRSxpQkFBc0IsRUFBRTs7UUFDOUosTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RJLE1BQU0sZUFBZSxHQUEwQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5RCxLQUFLLEVBQUUsRUFBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDO2FBQzFELENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNqQyxHQUFHLFlBQVk7WUFDZixHQUFHLGVBQWU7WUFDbEI7Z0JBQ0ksTUFBTSxFQUFFO29CQUNKLEdBQUcsRUFBRSxTQUFTO29CQUNkLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxXQUFXLEVBQUM7aUJBQy9CO2FBQ0o7WUFDRDtnQkFDSSxRQUFRLEVBQUU7b0JBQ04sR0FBRyxFQUFFLENBQUM7b0JBQ04sS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLE1BQU0sRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7b0JBQ3JHLEtBQUssRUFBRSxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUM7b0JBQ3pCLElBQUksa0JBQ0EsS0FBSyxFQUFFLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBQyxJQUN0QixjQUFjLENBQ3BCO2lCQUNKO2FBQ0o7U0FDSixDQUFDLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUF1QixDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDYixPQUFPLEVBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxDQUFDLEVBQUMsRUFBQyxDQUFDO1NBQ2xEO1FBQ0QsVUFBVSxDQUFDLEtBQUssR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7Q0FBQTtBQUVELE1BQU0sYUFBYSxHQUFHO0lBQ2xCLENBQUMsRUFBRSxRQUFRO0lBQ1gsQ0FBQyxFQUFFLFFBQVE7SUFDWCxDQUFDLEVBQUUsUUFBUTtJQUNYLENBQUMsRUFBRSxRQUFRO0NBQ2QsQ0FBQztBQUVGLFNBQVMsWUFBWSxDQUFDLFFBQWlDO0lBQ25ELElBQUksSUFBSSxHQUFHLFFBQTBCLENBQUM7SUFDdEMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDcEIsSUFBSTtZQUNBLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQWtCLENBQUMsQ0FBQztTQUN6QztRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1IsT0FBTyxJQUFJLENBQUM7U0FDZjtLQUNKO0lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDbkQsT0FBTztRQUNILEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQixHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDM0IsQ0FBQztBQUNOLENBQUM7QUFFRCxNQUFNLFVBQWdCLE9BQU8sQ0FBd0IsR0FBTSxFQUFFLE1BQTBCLEVBQUUsSUFBaUI7O1FBRXRHLDBCQUEwQjtRQUMxQixNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVsQix3QkFBd0I7UUFDeEIsTUFBTSxJQUFJLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyQyxtRUFBbUU7UUFDbkUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hFLE9BQU8sR0FBRyxDQUFDO1NBQ2Q7UUFFRCxlQUFlO1FBQ2YsTUFBTSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDckYsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbkYsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsTUFBTSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUUzRSxJQUFJLE1BQU0sR0FBRyxHQUFHLFlBQVksUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBVSxDQUFDO1FBQzlFLElBQUk7WUFDQSxnQkFBZ0I7WUFDaEIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzdGLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZ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LENBQUM7d0JBQ2hCLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUzt3QkFDbEIsQ0FBQyxDQUFDLEtBQUssQ0FBQTtTQUN0QjtRQUNELE9BQU8sR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNsRCxDQUFDLENBQUMsQ0FBQTtBQUNOLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsR0FBVyxFQUFFLEtBQWEsR0FBRztJQUM3RCxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLDhCQUE4QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2V4ZWMgYXMgZXhlY0NoaWxkUHJvY2Vzc30gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcclxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwiY3J5cHRvXCI7XHJcbmltcG9ydCB7RGVwZW5kZW5jeUNvbnRhaW5lciwgSW5qZWN0aW9uVG9rZW59IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge2Zyb20sIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtjYW5SZXBvcnRFcnJvcn0gZnJvbSBcInJ4anMvaW50ZXJuYWwvdXRpbC9jYW5SZXBvcnRFcnJvclwiO1xyXG5pbXBvcnQge1NlcnZlcn0gZnJvbSBcInNvY2tldC5pb1wiO1xyXG5pbXBvcnQge21rZGlyLCByZWFkRmlsZSBhcyBmc1JlYWRGaWxlLCB1bmxpbmssIHdyaXRlRmlsZSBhcyBmc1dyaXRlRmlsZX0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7YmFzZW5hbWUsIGRpcm5hbWV9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7R3JpZEZTQnVja2V0fSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0RvY3VtZW50LCBFeHByZXNzaW9uLCBGaWx0ZXJRdWVyeSwgTW9kZWwsIG1vZGVsLCBQaXBlbGluZVN0YWdlLCBRdWVyeSwgU2NoZW1hLCBUeXBlc30gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7Z2V0VmFsdWUgYXMgZ2V0TW9uZ29WYWx1ZSwgc2V0VmFsdWUgYXMgc2V0TW9uZ29WYWx1ZX0gZnJvbSBcIm1vbmdvb3NlL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1Bhc3NUaHJvdWdoLCBSZWFkYWJsZSwgUmVhZGFibGVPcHRpb25zfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcbmltcG9ydCBzaGFycF8sIHtSZWdpb259IGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge0FjdGlvbiwgQmFkUmVxdWVzdEVycm9yLCBjcmVhdGVQYXJhbURlY29yYXRvciwgSHR0cEVycm9yfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQge1xyXG4gICAgSUFzc2V0Q3JvcEluZm8sXHJcbiAgICBJQXNzZXRJbWFnZVBhcmFtcyxcclxuICAgIElBc3NldE1ldGEsXHJcbiAgICBJQ2xpZW50U29ja2V0LFxyXG4gICAgSU1hdGNoRmllbGQsXHJcbiAgICBJUGFnaW5hdGlvbkJhc2UsXHJcbiAgICBJUGFnaW5hdGlvblBhcmFtcyxcclxuICAgIElQcm9qZWN0T3B0aW9ucyxcclxuICAgIElSZXF1ZXN0LFxyXG4gICAgSVVud2luZE9wdGlvbnMsXHJcbiAgICBUeXBlXHJcbn0gZnJvbSBcIi4vY29tbW9uLXR5cGVzXCI7XHJcblxyXG5jb25zdCBzaGFycCA9IHNoYXJwXztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSURJQ29udGFpbmVycyB7XHJcbiAgICBhcHBDb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXJcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGRpQ29udGFpbmVyczogSURJQ29udGFpbmVycyA9IHtcclxuICAgIGFwcENvbnRhaW5lcjogbnVsbFxyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyUHJlZGljYXRlID0gKHZhbHVlOiBhbnksIGtleT86IGFueSwgdGFyZ2V0PzogYW55LCBzb3VyY2U/OiBhbnkpID0+IGJvb2xlYW47XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNOdWxsT3JVbmRlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09IFwidW5kZWZpbmVkXCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICFpc051bGxPclVuZGVmaW5lZCh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlKG9iajogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIlxcXFxzKFthLXpBLVpdKylcIik7XHJcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2gocmVnZXgpWzFdLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZ2V0VHlwZSh2YWx1ZSkgPT0gXCJvYmplY3RcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQXJyYXkodmFsdWU6IGFueSk6IHZhbHVlIGlzIEFycmF5PGFueT4ge1xyXG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEYXRlIHtcclxuICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gJiYgIWlzTmFOKHZhbHVlKSAmJiBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgdmFsdWUuZ2V0RGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IGFueSk6IHZhbHVlIGlzIHN0cmluZyB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZTogYW55KTogdmFsdWUgaXMgRnVuY3Rpb24ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlLnByb3RvdHlwZSAmJiB2YWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IpID09PSB2YWx1ZSAmJiB2YWx1ZS5uYW1lICE9PSBcIk9iamVjdFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUeXBlPGFueT4ge1xyXG4gICAgcmV0dXJuIGlzQ29uc3RydWN0b3IodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcmZhY2Uob2JqOiBhbnksIGludGVyRmFjZU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBpc0FycmF5KG9iaikgfHwgIWlzT2JqZWN0KGludGVyRmFjZU9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnRlckZhY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgIGxldCB0eXBlID0gaW50ZXJGYWNlT2JqZWN0W2tleV0gfHwgXCJcIjtcclxuICAgICAgICBpZiAodHlwZS5zdGFydHNXaXRoKFwiKlwiKSkge1xyXG4gICAgICAgICAgICB0eXBlID0gdHlwZS5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBnZXRUeXBlKG9ialtrZXldKSAhPT0gdHlwZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IGdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVjRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiB2YWx1ZVswXS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGNGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBcIlwiO1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdLnRvTG93ZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdElkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgJiYgaWQubGVuZ3RoID09IDI0ICYmICFpc05hTihOdW1iZXIoXCIweFwiICsgaWQpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0SXRlbTxUPih2YWx1ZTogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gdmFsdWVbMF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsYXN0SXRlbTxUPih2YWx1ZTogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdyb3VwPFQ+KHZhbHVlOiBUW10sIGNvbXBhcmF0b3I6IChhOiBULCBiOiBUKSA9PiBib29sZWFuKTogQXJyYXk8VFtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PFRbXT4gPSBbXTtcclxuICAgIGlmICghaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICB2YWx1ZSA9IEFycmF5LmZyb20odmFsdWUpO1xyXG4gICAgcmVzdWx0LnB1c2goW3ZhbHVlLnNoaWZ0KCldKTtcclxuICAgIHZhbHVlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSByZXN1bHQuZmluZChnID0+IGcuc29tZShhID0+IGNvbXBhcmF0b3IoYSwgaXRlbSkpKTtcclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgZ3JvdXAucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQucHVzaChbaXRlbV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSXRlbXM8VD4odmFsdWU6IFRbXSk6IFRbXSB7XHJcbiAgICByZXR1cm4gdmFsdWUuZmlsdGVyKCh2LCBpeCkgPT4gdmFsdWUuaW5kZXhPZih2KSA9PT0gaXgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUob2JqOiBhbnksIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnksIHRyZWVGYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgIGtleSA9IGtleSB8fCBcIlwiO1xyXG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdChcIi5cIik7XHJcbiAgICBsZXQgY3VyS2V5ID0gXCJcIjtcclxuICAgIGRvIHtcclxuICAgICAgICBjdXJLZXkgKz0ga2V5cy5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChpc0RlZmluZWQob2JqKSAmJiBpc0RlZmluZWQob2JqW2N1cktleV0pICYmICh0eXBlb2Ygb2JqW2N1cktleV0gPT09IFwib2JqZWN0XCIgfHwgIWtleXMubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBvYmogPSBvYmpbY3VyS2V5XTtcclxuICAgICAgICAgICAgY3VyS2V5ID0gXCJcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKCFrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0eXBlb2YgZGVmYXVsdFZhbHVlID09IFwidW5kZWZpbmVkXCIgPyBrZXkucmVwbGFjZShuZXcgUmVnRXhwKGAke2N1cktleX0kYCksIGB7JHtjdXJLZXl9fWApIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICBvYmogPSB0cmVlRmFsbGJhY2sgPyBvYmogfHwgZGVmYXVsdFZhbHVlIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cktleSArPSBcIi5cIjtcclxuICAgICAgICB9XHJcbiAgICB9IHdoaWxlIChrZXlzLmxlbmd0aCk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxUPihpdGVtczogVFtdLCBjYjogKGl0ZW06IFQpID0+IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBjYihpdGVtKTtcclxuICAgICAgICByZXNbZ3JvdXBdID0gcmVzW2dyb3VwXSB8fCBbXTtcclxuICAgICAgICByZXNbZ3JvdXBdLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0sIHt9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBcIm5vXCIgfHwgdmFsdWUgPT0gXCJmYWxzZVwiIHx8IHZhbHVlID09IFwiMFwiKSA/IGZhbHNlIDogISF2YWx1ZTtcclxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNOYU4odmFsKSA/IDAgOiB2YWw7XHJcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gLnNwbGl0KFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdFNlcnZpY2VzKHNjaGVtYTogU2NoZW1hPGFueT4sIHNlcnZpY2VzOiB7IFtwcm9wOiBzdHJpbmddOiBJbmplY3Rpb25Ub2tlbjxhbnk+IH0pIHtcclxuICAgIGNvbnN0IHNlcnZpY2VNYXA6IHsgW3Byb3A6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBPYmplY3Qua2V5cyhzZXJ2aWNlcykuZm9yRWFjaChwcm9wID0+IHtcclxuICAgICAgICBzY2hlbWFcclxuICAgICAgICAgICAgLnZpcnR1YWwocHJvcClcclxuICAgICAgICAgICAgLmdldCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaUNvbnRhaW5lciA9IGRpQ29udGFpbmVycy5hcHBDb250YWluZXI7XHJcbiAgICAgICAgICAgICAgICBzZXJ2aWNlTWFwW3Byb3BdID0gc2VydmljZU1hcFtwcm9wXSB8fCAoIWRpQ29udGFpbmVyID8ge30gOiBkaUNvbnRhaW5lci5yZXNvbHZlKHNlcnZpY2VzW3Byb3BdKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZU1hcFtwcm9wXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZ2luYXRlPFQgZXh0ZW5kcyBEb2N1bWVudD4obW9kZWw6IE1vZGVsPFQ+LCB3aGVyZTogRmlsdGVyUXVlcnk8VD4sIHBhcmFtczogSVBhZ2luYXRpb25QYXJhbXMpOiBQcm9taXNlPElQYWdpbmF0aW9uQmFzZTxUPj4ge1xyXG4gICAgcmV0dXJuIG1vZGVsLmNvdW50RG9jdW1lbnRzKHdoZXJlKS50aGVuKGNvdW50ID0+IHtcclxuICAgICAgICBsZXQgcXVlcnk6IFF1ZXJ5PGFueSwgYW55PiA9IG1vZGVsLmZpbmQod2hlcmUpO1xyXG4gICAgICAgIGlmIChpc1N0cmluZyhwYXJhbXMuc29ydCkpIHtcclxuICAgICAgICAgICAgcXVlcnkgPSBxdWVyeS5zb3J0KHBhcmFtcy5zb3J0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlzQXJyYXkocGFyYW1zLnBvcHVsYXRlKSkge1xyXG4gICAgICAgICAgICBwYXJhbXMucG9wdWxhdGUuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBxdWVyeSA9IHF1ZXJ5LnBvcHVsYXRlKGZpZWxkKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAocGFyYW1zLmxpbWl0ID4gMCA/IHF1ZXJ5LnNraXAocGFyYW1zLnBhZ2UgKiBwYXJhbXMubGltaXQpLmxpbWl0KHBhcmFtcy5saW1pdCkgOiBxdWVyeSkudGhlbihpdGVtcyA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSB7dG90YWw6IGNvdW50fTtcclxuICAgICAgICAgICAgcmV0dXJuIHtjb3VudCwgaXRlbXMsIG1ldGF9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsb29rdXBTdGFnZXMoZnJvbTogc3RyaW5nLCBsb2NhbEZpZWxkOiBzdHJpbmcsIGFzOiBzdHJpbmcgPSBudWxsLCBmb3JlaWduRmllbGQ6IHN0cmluZyA9IFwiX2lkXCIsIHNob3VsZFVud2luZDogYm9vbGVhbiA9IHRydWUpOiBbUGlwZWxpbmVTdGFnZS5Mb29rdXAsIFBpcGVsaW5lU3RhZ2UuVW53aW5kXSB7XHJcbiAgICBhcyA9IGFzIHx8IGxvY2FsRmllbGQucmVwbGFjZShcIklkXCIsIFwiXCIpO1xyXG4gICAgY29uc3Qgc3RhZ2VzOiBbUGlwZWxpbmVTdGFnZS5Mb29rdXAsIFBpcGVsaW5lU3RhZ2UuVW53aW5kXSA9IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgICRsb29rdXA6IHtcclxuICAgICAgICAgICAgICAgIGZyb20sXHJcbiAgICAgICAgICAgICAgICBsb2NhbEZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZm9yZWlnbkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgYXNcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICAkdW53aW5kOiB7XHJcbiAgICAgICAgICAgICAgICBwYXRoOiBgJCR7YXN9YCxcclxuICAgICAgICAgICAgICAgIHByZXNlcnZlTnVsbEFuZEVtcHR5QXJyYXlzOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICBdO1xyXG4gICAgaWYgKCFzaG91bGRVbndpbmQpIHtcclxuICAgICAgICBzdGFnZXMuc3BsaWNlKDEsIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHN0YWdlcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxldHNMb29rdXBTdGFnZShmcm9tOiBzdHJpbmcsIHBpcGVsaW5lOiBFeGNsdWRlPFBpcGVsaW5lU3RhZ2UsIFBpcGVsaW5lU3RhZ2UuTWVyZ2UgfCBQaXBlbGluZVN0YWdlLk91dCB8IFBpcGVsaW5lU3RhZ2UuU2VhcmNoPltdLCBhczogc3RyaW5nID0gbnVsbCwgbGV0RmllbGRzOiBhbnkgPSBudWxsKTogUGlwZWxpbmVTdGFnZS5Mb29rdXAge1xyXG4gICAgYXMgPSBhcyB8fCBmcm9tO1xyXG4gICAgbGV0RmllbGRzID0gbGV0RmllbGRzIHx8IHtpZDogXCIkX2lkXCJ9O1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICAkbG9va3VwOiB7XHJcbiAgICAgICAgICAgIGZyb20sXHJcbiAgICAgICAgICAgIGxldDogbGV0RmllbGRzLFxyXG4gICAgICAgICAgICBwaXBlbGluZSxcclxuICAgICAgICAgICAgYXNcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hTdGFnZShtYXRjaDogRXhwcmVzc2lvbiB8IFJlY29yZDxzdHJpbmcsIEV4cHJlc3Npb24+KTogUGlwZWxpbmVTdGFnZS5NYXRjaCB7XHJcbiAgICByZXR1cm4geyRtYXRjaDogbWF0Y2h9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hGaWVsZChmaWVsZDogc3RyaW5nLCBmaWx0ZXI6IGFueSwgd2hlbjogYm9vbGVhbik6IElNYXRjaEZpZWxkIHtcclxuICAgIHJldHVybiB7ZmllbGQsIGZpbHRlciwgd2hlbn07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaEZpZWxkU3RhZ2VzKC4uLmZpZWxkczogSU1hdGNoRmllbGRbXSk6IFJlYWRvbmx5QXJyYXk8UGlwZWxpbmVTdGFnZS5NYXRjaD4ge1xyXG4gICAgY29uc3QgbWF0Y2ggPSB7fTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICBpZiAoZmllbGQud2hlbikge1xyXG4gICAgICAgICAgICBtYXRjaFtmaWVsZC5maWVsZF0gPSBmaWVsZC5maWx0ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2gpLmxlbmd0aCA+IDAgPyBbbWF0Y2hTdGFnZShtYXRjaCldIDogW107XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9qZWN0U3RhZ2UoZmllbGRzOiBJUHJvamVjdE9wdGlvbnMpOiBQaXBlbGluZVN0YWdlLlByb2plY3Qge1xyXG4gICAgcmV0dXJuIHskcHJvamVjdDogZmllbGRzfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVud2luZFN0YWdlKGZpZWxkT3JPcHRzOiBzdHJpbmcgfCBJVW53aW5kT3B0aW9ucyk6IFBpcGVsaW5lU3RhZ2UuVW53aW5kIHtcclxuICAgIHJldHVybiB7JHVud2luZDogZmllbGRPck9wdHN9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaHlkcmF0ZVBvcHVsYXRlZDxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsVHlwZTogTW9kZWw8VD4sIGpzb246IGFueSk6IFQge1xyXG4gICAgbGV0IG9iamVjdCA9IG1vZGVsVHlwZS5oeWRyYXRlKGpzb24pO1xyXG5cclxuICAgIGZvciAoY29uc3QgW3BhdGgsIG9ial0gb2YgT2JqZWN0LmVudHJpZXMobW9kZWxUeXBlLnNjaGVtYS5vYmopKSB7XHJcbiAgICAgICAgbGV0IHtyZWYsIHR5cGV9ID0gb2JqIGFzIGFueTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSAmJiB0eXBlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcmVmID0gdHlwZVswXS5yZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghcmVmKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCB2YWx1ZSA9IGdldE1vbmdvVmFsdWUocGF0aCwganNvbik7XHJcbiAgICAgICAgY29uc3QgaHlkcmF0ZVZhbCA9IHZhbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPT0gbnVsbCB8fCB2YWwgaW5zdGFuY2VvZiBUeXBlcy5PYmplY3RJZCkgcmV0dXJuIHZhbDtcclxuICAgICAgICAgICAgcmV0dXJuIGh5ZHJhdGVQb3B1bGF0ZWQobW9kZWwocmVmKSBhcyBhbnksIHZhbCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgc2V0TW9uZ29WYWx1ZShwYXRoLCB2YWx1ZS5tYXAoaHlkcmF0ZVZhbCksIG9iamVjdCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzZXRNb25nb1ZhbHVlKHBhdGgsIGh5ZHJhdGVWYWwodmFsdWUpLCBvYmplY3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmplY3Q7XHJcblxyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVBZ2dyZWdhdGlvbnM8VCBleHRlbmRzIERvY3VtZW50Pihtb2RlbDogTW9kZWw8VD4sIGFnZ3JlZ2F0aW9uczogUGlwZWxpbmVTdGFnZVtdLCBwYXJhbXM6IElQYWdpbmF0aW9uUGFyYW1zLCBtZXRhUHJvamVjdGlvbjogYW55ID0ge30pOiBQcm9taXNlPElQYWdpbmF0aW9uQmFzZTxUPj4ge1xyXG4gICAgY29uc3Qgc29ydEZpZWxkID0gIWlzU3RyaW5nKHBhcmFtcy5zb3J0KSB8fCAhcGFyYW1zLnNvcnQgPyBudWxsIDogKHBhcmFtcy5zb3J0LnN0YXJ0c1dpdGgoXCItXCIpID8gcGFyYW1zLnNvcnQuc3Vic3RyKDEpIDogcGFyYW1zLnNvcnQpO1xyXG4gICAgY29uc3Qgc29ydEFnZ3JlZ2F0aW9uOiBQaXBlbGluZVN0YWdlLlNvcnRbXSAgPSAhc29ydEZpZWxkID8gW10gOiBbe1xyXG4gICAgICAgICRzb3J0OiB7W3NvcnRGaWVsZF06IHNvcnRGaWVsZCA9PSBwYXJhbXMuc29ydCA/IDEgOiAtMX1cclxuICAgIH1dO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwuYWdncmVnYXRlKFtcclxuICAgICAgICAuLi5hZ2dyZWdhdGlvbnMsXHJcbiAgICAgICAgLi4uc29ydEFnZ3JlZ2F0aW9uLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJGdyb3VwOiB7XHJcbiAgICAgICAgICAgICAgICBfaWQ6IFwicmVzdWx0c1wiLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OiB7JHB1c2g6IFwiJCRDVVJSRU5UXCJ9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgJHByb2plY3Q6IHtcclxuICAgICAgICAgICAgICAgIF9pZDogMCxcclxuICAgICAgICAgICAgICAgIGl0ZW1zOiBwYXJhbXMubGltaXQgPiAwID8geyRzbGljZTogW1wiJHJlc3VsdFwiLCBwYXJhbXMucGFnZSAqIHBhcmFtcy5saW1pdCwgcGFyYW1zLmxpbWl0XX0gOiBcIiRyZXN1bHRcIixcclxuICAgICAgICAgICAgICAgIGNvdW50OiB7JHNpemU6IFwiJHJlc3VsdFwifSxcclxuICAgICAgICAgICAgICAgIG1ldGE6IHtcclxuICAgICAgICAgICAgICAgICAgICB0b3RhbDogeyRzaXplOiBcIiRyZXN1bHRcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4ubWV0YVByb2plY3Rpb25cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIF0pO1xyXG4gICAgY29uc3QgcGFnaW5hdGlvbiA9IHJlc3VsdFswXSBhcyBJUGFnaW5hdGlvbkJhc2U8VD47XHJcbiAgICBpZiAoIXBhZ2luYXRpb24pIHtcclxuICAgICAgICByZXR1cm4ge2l0ZW1zOiBbXSwgY291bnQ6IDAsIG1ldGE6IHt0b3RhbDogMH19O1xyXG4gICAgfVxyXG4gICAgcGFnaW5hdGlvbi5pdGVtcyA9IHBhZ2luYXRpb24uaXRlbXMubWFwKGkgPT4gaHlkcmF0ZVBvcHVsYXRlZChtb2RlbCwgaSkpO1xyXG4gICAgcmV0dXJuIHBhZ2luYXRpb247XHJcbn1cclxuXHJcbmNvbnN0IGNyb3BJbnRlcmZhY2UgPSB7XHJcbiAgICB4OiBcIm51bWJlclwiLFxyXG4gICAgeTogXCJudW1iZXJcIixcclxuICAgIHc6IFwibnVtYmVyXCIsXHJcbiAgICBoOiBcIm51bWJlclwiXHJcbn07XHJcblxyXG5mdW5jdGlvbiB0b0Nyb3BSZWdpb24oY3JvcEluZm86IHN0cmluZyB8IElBc3NldENyb3BJbmZvKTogUmVnaW9uIHtcclxuICAgIGxldCBjcm9wID0gY3JvcEluZm8gYXMgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBpZiAoaXNTdHJpbmcoY3JvcEluZm8pKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY3JvcCA9IEpTT04ucGFyc2UoY3JvcEluZm8gYXMgc3RyaW5nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXNJbnRlcmZhY2UoY3JvcCwgY3JvcEludGVyZmFjZSkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB3aWR0aDogTWF0aC5yb3VuZChjcm9wLncpLFxyXG4gICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChjcm9wLmgpLFxyXG4gICAgICAgIHRvcDogTWF0aC5yb3VuZChjcm9wLnkpLFxyXG4gICAgICAgIGxlZnQ6IE1hdGgucm91bmQoY3JvcC54KVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvSW1hZ2U8VCA9IEJ1ZmZlciB8IFJlYWRhYmxlPihzcmM6IFQsIHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8VD4ge1xyXG5cclxuICAgIC8vIERlZmF1bHQgcGFyYW1zIGFuZCBtZXRhXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XHJcbiAgICBtZXRhID0gbWV0YSB8fCB7fTtcclxuXHJcbiAgICAvLyBHZXQgZGVmYXVsdCBjcm9wIGluZm9cclxuICAgIGNvbnN0IGNyb3AgPSB0b0Nyb3BSZWdpb24obWV0YS5jcm9wKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIHNyYyBpZiB0aGVyZSBhcmUgbm8gcGFyYW1zIGFuZCBubyBkZWZhdWx0IGNyb3AgZXhpc3RzXHJcbiAgICBpZiAobWV0YS5leHRlbnNpb24gPT09IFwic3ZnXCIgfHwgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09IDAgJiYgIWNyb3ApKSB7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYXJzZSBwYXJhbXNcclxuICAgIHBhcmFtcy5yb3RhdGlvbiA9IGlzTmFOKHBhcmFtcy5yb3RhdGlvbikgPyAwIDogTWF0aC5yb3VuZChwYXJhbXMucm90YXRpb24gLyA5MCkgKiA5MDtcclxuICAgIHBhcmFtcy5jYW52YXNTY2FsZVggPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICBwYXJhbXMuY2FudmFzU2NhbGVZID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgcGFyYW1zLnNjYWxlWCA9IGlzTmFOKHBhcmFtcy5zY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVYKTtcclxuICAgIHBhcmFtcy5zY2FsZVkgPSBpc05hTihwYXJhbXMuc2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWSk7XHJcbiAgICBwYXJhbXMuY3JvcCA9IGlzQm9vbGVhbihwYXJhbXMuY3JvcCkgPyBwYXJhbXMuY3JvcCA6IHBhcmFtcy5jcm9wID09IFwidHJ1ZVwiO1xyXG5cclxuICAgIGxldCBidWZmZXIgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHNyYykgOiBzcmMgYXMgYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBHZXQgY3JvcCBpbmZvXHJcbiAgICAgICAgY29uc3QgY3JvcEJlZm9yZSA9IHRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEJlZm9yZSB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BCZWZvcmUgOiBudWxsKSk7XHJcbiAgICAgICAgY29uc3QgY3JvcEFmdGVyID0gdG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQWZ0ZXIgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQWZ0ZXIgOiBudWxsKSk7XHJcbiAgICAgICAgLy8gR2V0IG1ldGFkYXRhXHJcbiAgICAgICAgbGV0IGltZyA9IHNoYXJwKGJ1ZmZlcik7XHJcbiAgICAgICAgbGV0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IGltZy5tZXRhZGF0YSgpO1xyXG4gICAgICAgIC8vIENyb3AgYmVmb3JlIHJlc2l6ZVxyXG4gICAgICAgIGlmIChjcm9wQmVmb3JlKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gY3JvcEJlZm9yZS53aWR0aDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcEJlZm9yZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3BCZWZvcmUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3JvcCkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGNyb3AuaGVpZ2h0O1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVzaXplIGNhbnZhc1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWCA9IG1ldGE/LmNhbnZhc1NjYWxlWCB8fCAxO1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWSA9IG1ldGE/LmNhbnZhc1NjYWxlWSB8fCAxO1xyXG4gICAgICAgIGlmIChwYXJhbXMuY2FudmFzU2NhbGVYICE9PSBjYW52YXNTY2FsZVggfHwgcGFyYW1zLmNhbnZhc1NjYWxlWSAhPT0gY2FudmFzU2NhbGVZKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiY29udGFpblwifSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlc2l6ZSBpbWFnZVxyXG4gICAgICAgIGlmIChwYXJhbXMuc2NhbGVYICE9PSAxIHx8IHBhcmFtcy5zY2FsZVkgIT09IDEpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLnNjYWxlWCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLnNjYWxlWSk7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJmaWxsXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ3JvcCBhZnRlciByZXNpemVcclxuICAgICAgICBpZiAoY3JvcEFmdGVyKSB7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3BBZnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJvdGF0ZVxyXG4gICAgICAgIGlmIChwYXJhbXMucm90YXRpb24gIT09IDApIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgaW1nLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGltZyA9IHNoYXJwKGJ1ZmZlcikucm90YXRlKHBhcmFtcy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1ZmZlciA9IGF3YWl0IGltZy50b0J1ZmZlcigpO1xyXG4gICAgICAgIHNyYyA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSA6IGJ1ZmZlcjtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW1hZ2UgY29udmVyc2lvbiBlcnJvclwiLCBlKTtcclxuICAgICAgICBzcmMgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcikgOiBidWZmZXI7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcjogQnVmZmVyKTogUmVhZGFibGUge1xyXG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xyXG4gICAgcmVhZFN0cmVhbS5lbmQoYnVmZmVyKTtcclxuICAgIHJldHVybiByZWFkU3RyZWFtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW06IFJlYWRhYmxlKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjb25jYXQgPSBbXTtcclxuICAgICAgICBzdHJlYW0ub24oXCJkYXRhXCIsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25jYXQucHVzaChkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY29uY2F0KSkpO1xyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgUmVhZGFibGVTdHJlYW1DbG9uZSBleHRlbmRzIFJlYWRhYmxlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkYWJsZVN0cmVhbTogUmVhZGFibGUsIG9wdHM/OiBSZWFkYWJsZU9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihvcHRzKTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZXJyb3JcIiwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVhZChzaXplOiBudW1iZXIpIHtcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5U3RyZWFtKHN0cmVhbTogUmVhZGFibGUsIG9wdHM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZSB7XHJcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtQ2xvbmUoc3RyZWFtLCBvcHRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1rZGlyUmVjdXJzaXZlKHBhdGg6IHN0cmluZywgbW9kZTogbnVtYmVyID0gbnVsbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBta2RpcihwYXRoLCB7bW9kZTogbW9kZSB8fCAwbzc3NywgcmVjdXJzaXZlOiB0cnVlfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNSZWFkRmlsZShwYXRoLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEFuZERlbGV0ZUZpbGUocGF0aDogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIgPSA1MDAwKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwYXRoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHVubGluayhwYXRoLCAoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCB0aW1lb3V0KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGF3YWl0IG1rZGlyUmVjdXJzaXZlKGRpcm5hbWUocGF0aCkpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNXcml0ZUZpbGUocGF0aCwgZGF0YSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRvUHJvbWlzZSh2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlVGltZW91dCh0aW1lb3V0OiBudW1iZXIgPSAxMDAwLCBlcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoYFRpbWVvdXQgZXhjZWVkZWQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoYFRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodHlwZTogVHlwZTxhbnk+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYzogRnVuY3Rpb24pOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBSZW1vdmUgY29tbWVudHMgb2YgdGhlIGZvcm0gLyogLi4uICovXHJcbiAgICAvLyBSZW1vdmluZyBjb21tZW50cyBvZiB0aGUgZm9ybSAvL1xyXG4gICAgLy8gUmVtb3ZlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIHsgLi4uIH1cclxuICAgIC8vIHJlbW92aW5nIFwiPT5cIiBpZiBmdW5jIGlzIGFycm93IGZ1bmN0aW9uXHJcbiAgICBjb25zdCBzdHIgPSBmdW5jLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXC8oLikqL2csIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL3tbXFxzXFxTXSp9LywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvPT4vZywgXCJcIilcclxuICAgICAgICAudHJpbSgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHBhcmFtZXRlciBuYW1lcyBhZnRlciBmaXJzdCBcIihcIlxyXG4gICAgY29uc3Qgc3RhcnQgPSBzdHIuaW5kZXhPZihcIihcIikgKyAxO1xyXG5cclxuICAgIC8vIEVuZCBwYXJhbWV0ZXIgbmFtZXMgaXMganVzdCBiZWZvcmUgbGFzdCBcIilcIlxyXG4gICAgY29uc3QgZW5kID0gc3RyLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLnNwbGl0KFwiLCBcIik7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcclxuXHJcbiAgICByZXN1bHQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZpbmcgYW55IGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5yZXBsYWNlKC89W1xcc1xcU10qL2csIFwiXCIpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZWxlbWVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJveHlGdW5jdGlvbihuYW1lOiBzdHJpbmcpOiBGdW5jdGlvbiB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyk7XHJcbiAgICAgICAgYXJncy51bnNoaWZ0KHRoaXMpO1xyXG4gICAgICAgIHJldHVybiAodGhpcy5oZWxwZXJbbmFtZV0gYXMgRnVuY3Rpb24pLmFwcGx5KHRoaXMuaGVscGVyLCBhcmdzKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3h5RnVuY3Rpb25zKHNjaGVtYTogU2NoZW1hLCBoZWxwZXI6IFR5cGU8YW55PiwgcGFyYW1OYW1lOiBzdHJpbmcgPSBudWxsKTogdm9pZCB7XHJcbiAgICBwYXJhbU5hbWUgPSBwYXJhbU5hbWUgfHwgbGNGaXJzdChnZXRDb25zdHJ1Y3Rvck5hbWUoaGVscGVyKSkucmVwbGFjZSgvaGVscGVyJC9naSwgXCJcIik7XHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGhlbHBlci5wcm90b3R5cGUpO1xyXG4gICAgT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgY29uc3QgZnVuYyA9IGRlc2NyaXB0b3JzW25hbWVdLnZhbHVlO1xyXG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZ1bmMpICYmIG5hbWUgIT09IFwiY29uc3RydWN0b3JcIikge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbU5hbWVzID0gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYyk7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbU5hbWVzWzBdID09IHBhcmFtTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgc2NoZW1hLm1ldGhvZHNbbmFtZV0gPSBwcm94eUZ1bmN0aW9uKG5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpbmplY3RTZXJ2aWNlcyhzY2hlbWEsIHtcclxuICAgICAgICBcImhlbHBlclwiOiBoZWxwZXJcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUmVzb2x2ZUVudGl0eTxUIGV4dGVuZHMgRG9jdW1lbnQ+KG1vZGVsOiBNb2RlbDxUPiwgZXh0cmFDaGVjaz86IChxdWVyeTogUXVlcnk8VCwgYW55PiwgYWN0aW9uOiBBY3Rpb24pID0+IFQgfCBQcm9taXNlPFQ+KTogUGFyYW1ldGVyRGVjb3JhdG9yIHtcclxuICAgIGNvbnN0IG1vZGVsTmFtZSA9IG1vZGVsLm1vZGVsTmFtZTtcclxuICAgIGNvbnN0IHBhcmFtTmFtZSA9IG1vZGVsTmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIGNyZWF0ZVBhcmFtRGVjb3JhdG9yKHtcclxuICAgICAgICByZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgdmFsdWU6IGFzeW5jIGFjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IGFjdGlvbi5yZXF1ZXN0IGFzIElSZXF1ZXN0O1xyXG4gICAgICAgICAgICBjb25zdCB0b2tlbiA9IHJlcS5oZWFkZXIoYHgtJHtwYXJhbU5hbWV9LXRva2VuYCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlkID0gcmVxLnBhcmFtc1tgJHtwYXJhbU5hbWV9SWRgXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgIGlmICghaWQgJiYgIXRva2VuKSB7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGAke21vZGVsTmFtZX0gaWQgb3IgdG9rZW4gc2hvdWxkIGJlIGRlZmluZWQhYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcXVlcnkgPSAhdG9rZW5cclxuICAgICAgICAgICAgICAgID8gbW9kZWwuZmluZEJ5SWQoaWQpXHJcbiAgICAgICAgICAgICAgICA6IG1vZGVsLmZpbmRPbmUoe3Rva2VufSBhcyBhbnkpO1xyXG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhd2FpdCBxdWVyeTtcclxuICAgICAgICAgICAgaWYgKCFkb2MpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXJyb3IoNDA0LCAhdG9rZW5cclxuICAgICAgICAgICAgICAgICAgICA/IGAke21vZGVsTmFtZX0gY291bGQgbm90IGJlIGZvdW5kIHdpdGggaWQ6ICR7aWR9YFxyXG4gICAgICAgICAgICAgICAgICAgIDogYCR7bW9kZWxOYW1lfSBjb3VsZCBub3QgYmUgZm91bmQgd2l0aCB0b2tlbjogJHt0b2tlbn1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihleHRyYUNoZWNrKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdID0gYXdhaXQgdmFsdWVUb1Byb21pc2UoZXh0cmFDaGVjayhxdWVyeSwgYWN0aW9uKSkgfHwgZG9jO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYCR7bW9kZWxOYW1lfSBjaGVjayBlcnJvcjogJHtlLm1lc3NhZ2UgfHwgZX1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhY3Rpb24ucmVxdWVzdFtwYXJhbU5hbWVdID0gZG9jO1xyXG4gICAgICAgICAgICByZXR1cm4gZG9jO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nLCB3aXRoRXh0ZW5zaW9uOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHBhdGggfHwgXCJcIik7XHJcbiAgICByZXR1cm4gd2l0aEV4dGVuc2lvbiA/IG5hbWUgOiBuYW1lLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAtMSkuam9pbihcIi5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoIHx8IFwiXCIpO1xyXG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaWRUb1N0cmluZyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaWRUb1N0cmluZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBPYmplY3RJZCA/IHZhbHVlLnRvSGV4U3RyaW5nKCkgOiBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNmb3JtZXIodHJhbnNmb3JtPzogKGRvYzogRG9jdW1lbnQsIHJldDogYW55LCBvcHRpb25zPzogYW55KSA9PiBhbnkpIHtcclxuICAgIHJldHVybiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IHtcclxuICAgICAgICByZXQuaWQgPSBpZFRvU3RyaW5nKHJldC5pZCkgfHwgcmV0LmlkO1xyXG4gICAgICAgIGlmIChkb2MuX2lkKSB7XHJcbiAgICAgICAgICAgIHJldC5faWQgPSBpZFRvU3RyaW5nKGRvYy5faWQpO1xyXG4gICAgICAgICAgICByZXQuaWQgPSByZXQuaWQgfHwgcmV0Ll9pZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVsZXRlIHJldC5fX3Y7XHJcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24odHJhbnNmb3JtKSA/IHRyYW5zZm9ybShkb2MsIHJldCwgb3B0aW9ucykgfHwgcmV0IDogcmV0O1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJyb2FkY2FzdChzb2NrZXRTZXJ2ZXI6IFNlcnZlciwgY2I6IChjbGllbnQ6IElDbGllbnRTb2NrZXQpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIEFycmF5LmZyb20oT2JqZWN0LnZhbHVlcyhzb2NrZXRTZXJ2ZXIuc29ja2V0cy5zb2NrZXRzKSkuZm9yRWFjaChjYik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChyYW5kb20obWluLCBtYXgpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbShtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIG1pbiArIE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG11bHRpU3Vic2NyaXB0aW9uKC4uLnN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdKTogU3Vic2NyaXB0aW9uIHtcclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcclxuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICAgIHMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2YWJsZUZyb21GdW5jdGlvbihjYWxsYmFja0Z1bmM6ICgpID0+IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBsZXQgc3ViamVjdDogYW55O1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPGFueT4oKHN1YnNjcmliZXIpID0+IHtcclxuICAgICAgICBpZiAoIXN1YmplY3QpIHtcclxuICAgICAgICAgICAgc3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gZnJvbShjYWxsYmFja0Z1bmMoKSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhblJlcG9ydEVycm9yKHN1YmplY3QpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZExlZnQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZFN0YXJ0KGNvdW50LCBwYWRXaXRoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhZFJpZ2h0KHZhbHVlOiBhbnksIGNvdW50OiBudW1iZXIgPSAzLCBwYWRXaXRoOiBzdHJpbmcgPSBcIjBcIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9YC5wYWRFbmQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRnJvbUJ1Y2tldChidWNrZXQ6IEdyaWRGU0J1Y2tldCwgZmlsZUlkOiBPYmplY3RJZCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGJ1Y2tldC5kZWxldGUoZmlsZUlkLCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBlcnIgPSBlcnJvciBhcyBhbnk7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gZXJyb3IubWVzc2FnZSB8fCBlcnJvciB8fCBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpc1N0cmluZyhlcnIpIHx8ICFlcnIuc3RhcnRzV2l0aChcIkZpbGVOb3RGb3VuZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGZpbGVJZC50b0hleFN0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pKTtcclxufVxyXG5cclxuY29uc3QgZGVmYXVsdFByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlID0gKCkgPT4gdHJ1ZTtcclxuXHJcbmZ1bmN0aW9uIGNvcHlSZWN1cnNpdmUodGFyZ2V0OiBhbnksIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBhbnkge1xyXG4gICAgcHJlZGljYXRlID0gcHJlZGljYXRlIHx8IGRlZmF1bHRQcmVkaWNhdGU7XHJcbiAgICBpZiAoaXNQcmltaXRpdmUoc291cmNlKSB8fCBpc0RhdGUoc291cmNlKSB8fCBpc0Z1bmN0aW9uKHNvdXJjZSkpIHJldHVybiBzb3VyY2U7XHJcbiAgICBpZiAoaXNBcnJheShzb3VyY2UpKSB7XHJcbiAgICAgICAgdGFyZ2V0ID0gaXNBcnJheSh0YXJnZXQpID8gQXJyYXkuZnJvbSh0YXJnZXQpIDogW107XHJcbiAgICAgICAgc291cmNlLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlKGl0ZW0sIGluZGV4LCB0YXJnZXQsIHNvdXJjZSkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPiBpbmRleClcclxuICAgICAgICAgICAgICAgIHRhcmdldFtpbmRleF0gPSBjb3B5UmVjdXJzaXZlKHRhcmdldFtpbmRleF0sIGl0ZW0sIHByZWRpY2F0ZSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGNvcHlSZWN1cnNpdmUobnVsbCwgaXRlbSwgcHJlZGljYXRlKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldDtcclxuICAgIH1cclxuICAgIGNvbnN0IHNob3VsZENvcHkgPSBpc0Z1bmN0aW9uKHNvdXJjZS5fX3Nob3VsZENvcHkpID8gc291cmNlLl9fc2hvdWxkQ29weSA6ICgpID0+IHRydWU7XHJcbiAgICBpZiAoaXNDb25zdHJ1Y3Rvcihzb3VyY2UuY29uc3RydWN0b3IpKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZS5fX3Nob3VsZENvcHkgPT09IGZhbHNlKSByZXR1cm4gc291cmNlO1xyXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSBuZXcgc291cmNlLmNvbnN0cnVjdG9yKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3RvID0gc291cmNlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSB8fCBzb3VyY2UucHJvdG90eXBlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gT2JqZWN0LmNyZWF0ZShwcm90byk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRhcmdldCA9IE9iamVjdC5hc3NpZ24oe30sIHRhcmdldCB8fCB7fSk7XHJcbiAgICB9XHJcbiAgICAvLyBDb3B5IG1hcCBlbnRyaWVzXHJcbiAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgaWYgKHNvdXJjZSBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Ygc291cmNlLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUodmFsdWUsIGtleSwgdGFyZ2V0LCBzb3VyY2UpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCAhc2hvdWxkQ29weShrZXksIHZhbHVlKSA/IHZhbHVlIDogY29weVJlY3Vyc2l2ZSh0YXJnZXQuZ2V0KGtleSksIHZhbHVlLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IG1lbWJlcnNcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuICAgIHRhcmdldCA9IGtleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghcHJlZGljYXRlKHNvdXJjZVtrZXldLCBrZXksIHJlc3VsdCwgc291cmNlKSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICByZXN1bHRba2V5XSA9ICFzaG91bGRDb3B5KGtleSwgc291cmNlW2tleV0pID8gc291cmNlW2tleV0gOiBjb3B5UmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzb3VyY2Vba2V5XSwgcHJlZGljYXRlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgdGFyZ2V0KTtcclxuXHJcbiAgICAvLyBDb3B5IG9iamVjdCBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XHJcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZpbHRlcihrID0+IGtleXMuaW5kZXhPZihrKSA8IDApO1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihvYmo6IFQsIHByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlKTogUGFydGlhbDxUPiB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmosIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5PFQ+KG9iajogVCk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUobnVsbCwgb2JqKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUPih0YXJnZXQ6IFQsIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBUIHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKHRhcmdldCwgc291cmNlLCBwcmVkaWNhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWQ1KGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XHJcbiAgICAgICAgdGhyb3cgYENhbid0IG1kNSBvdGhlciB0aGF0IHJhdyBvYmplY3Qgb3Igc3RyaW5nYDtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShkYXRhKS5kaWdlc3QoXCJoZXhcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBydW5Db21tYW5kKHNjcmlwdFBhdGg6IHN0cmluZywgZXhwZWN0ZWRDb2RlOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3AgPSBleGVjQ2hpbGRQcm9jZXNzKHNjcmlwdFBhdGgsIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBleHBlY3RlZENvZGUgIT09IGVycm9yLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbGluZXMgPSAoc3Rkb3V0IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgICAgICBsZXQgbGluZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICghbGluZSAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZXMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShsaW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRvdXQub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3Auc3RkZXJyLm9uKFwiZGF0YVwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ29uc29sZUNvbG9yIHtcclxuICAgIFJlc2V0ID0gXCJcXHgxYlswbVwiLFxyXG4gICAgQnJpZ2h0ID0gXCJcXHgxYlsxbVwiLFxyXG4gICAgRGltID0gXCJcXHgxYlsybVwiLFxyXG4gICAgVW5kZXJzY29yZSA9IFwiXFx4MWJbNG1cIixcclxuICAgIEJsaW5rID0gXCJcXHgxYls1bVwiLFxyXG4gICAgUmV2ZXJzZSA9IFwiXFx4MWJbN21cIixcclxuICAgIEhpZGRlbiA9IFwiXFx4MWJbOG1cIixcclxuXHJcbiAgICBGZ0JsYWNrID0gXCJcXHgxYlszMG1cIixcclxuICAgIEZnUmVkID0gXCJcXHgxYlszMW1cIixcclxuICAgIEZnR3JlZW4gPSBcIlxceDFiWzMybVwiLFxyXG4gICAgRmdZZWxsb3cgPSBcIlxceDFiWzMzbVwiLFxyXG4gICAgRmdCbHVlID0gXCJcXHgxYlszNG1cIixcclxuICAgIEZnTWFnZW50YSA9IFwiXFx4MWJbMzVtXCIsXHJcbiAgICBGZ0N5YW4gPSBcIlxceDFiWzM2bVwiLFxyXG4gICAgRmdXaGl0ZSA9IFwiXFx4MWJbMzdtXCIsXHJcbiAgICBGZ0RlZmF1bHQgPSBcIlxceDFiWzM4bVwiLFxyXG5cclxuICAgIEJnQmxhY2sgPSBcIlxceDFiWzQwbVwiLFxyXG4gICAgQmdSZWQgPSBcIlxceDFiWzQxbVwiLFxyXG4gICAgQmdHcmVlbiA9IFwiXFx4MWJbNDJtXCIsXHJcbiAgICBCZ1llbGxvdyA9IFwiXFx4MWJbNDNtXCIsXHJcbiAgICBCZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxyXG4gICAgQmdNYWdlbnRhID0gXCJcXHgxYls0NW1cIixcclxuICAgIEJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXHJcbiAgICBCZ1doaXRlID0gXCJcXHgxYls0N21cIixcclxuICAgIEJnRGVmYXVsdCA9IFwiXFx4MWJbNDhtXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSnNvbkNvbG9ycyB7XHJcbiAgICBrZXlDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIG51bWJlckNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgc3RyaW5nQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICB0cnVlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBmYWxzZUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVsbENvbG9yPzogQ29uc29sZUNvbG9yO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0Q29sb3JzOiBJSnNvbkNvbG9ycyA9IHtcclxuICAgIGtleUNvbG9yOiBDb25zb2xlQ29sb3IuRmdXaGl0ZSxcclxuICAgIG51bWJlckNvbG9yOiBDb25zb2xlQ29sb3IuRmdCbHVlLFxyXG4gICAgc3RyaW5nQ29sb3I6IENvbnNvbGVDb2xvci5GZ1llbGxvdyxcclxuICAgIHRydWVDb2xvcjogQ29uc29sZUNvbG9yLkZnR3JlZW4sXHJcbiAgICBmYWxzZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdSZWQsXHJcbiAgICBudWxsQ29sb3I6IENvbnNvbGVDb2xvci5CZ01hZ2VudGFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplKGlucHV0OiBhbnksIGNvbG9yOiBDb25zb2xlQ29sb3IpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2NvbG9yfSR7aW5wdXR9JHtDb25zb2xlQ29sb3IuUmVzZXR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpzb25IaWdobGlnaHQoaW5wdXQ6IHN0cmluZyB8IG9iamVjdCwgY29sb3JPcHRpb25zPzogSUpzb25Db2xvcnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbG9ycywgY29sb3JPcHRpb25zKVxyXG4gICAgY29uc3QganNvbiA9IChpc1N0cmluZyhpbnB1dCkgPyBpbnB1dCA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKSkucmVwbGFjZSgvJi9nLCAnJicpLnJlcGxhY2UoLzwvZywgJzwnKS5yZXBsYWNlKC8+L2csICc+JylcclxuICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytdP1xcZCspPykvZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gY29sb3JzLm51bWJlckNvbG9yXHJcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgIGlmICgvOiQvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5rZXlDb2xvclxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnMuc3RyaW5nQ29sb3I7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9ICdcIicgKyBtYXRjaC5zdWJzdHIoMSwgbWF0Y2gubGVuZ3RoIC0gMikgKyAnXCInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29sb3IgPSAvdHJ1ZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgID8gY29sb3JzLnRydWVDb2xvclxyXG4gICAgICAgICAgICAgICAgOiAvZmFsc2UvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMuZmFsc2VDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgIDogL251bGwvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sb3JzLm51bGxDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbG9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtjb2xvcn0ke21hdGNofSR7Q29uc29sZUNvbG9yLlJlc2V0fWBcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nLCB0bzogc3RyaW5nID0gXCItXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3N0cn1gLnJlcGxhY2UoL1smXFwvXFxcXCMsICsoKSR+JS5AJ1wiOio/PD57fV0vZywgdG8pO1xyXG59XHJcbiJdfQ==
|