dmencu 3.2.19 → 3.2.20
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/dist/client/unlogged/bypass-formulario.js +2 -2
- package/dist/server/server/table-no_rea copy.d.ts +2 -0
- package/dist/server/server/table-no_rea copy.js +38 -0
- package/dist/server/server/table-no_rea_sup copy.d.ts +2 -0
- package/dist/server/server/table-no_rea_sup copy.js +36 -0
- package/dist/server/server/table-rea.d.ts +2 -0
- package/dist/server/server/table-rea.js +34 -0
- package/dist/server/server/table-rea_sup.d.ts +2 -0
- package/dist/server/server/table-rea_sup.js +34 -0
- package/dist/unlogged/unlogged/bypass-formulario.js +2 -2
- package/package.json +1 -1
|
@@ -553,7 +553,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
553
553
|
var { respuestas: respuestasPadre } = respuestasForPk(forPkPadre, true, true);
|
|
554
554
|
respuestasPadre[unidad_analisis].splice(index - 1, 1);
|
|
555
555
|
recalcularTodoElArbol(respuestasRaiz, forPkRaiz);
|
|
556
|
-
recalcularComodinesForPk(
|
|
556
|
+
recalcularComodinesForPk(forPkPadre);
|
|
557
557
|
datosByPass.dirty = datosByPass.dirty || true;
|
|
558
558
|
respuestasRaiz.$dirty = respuestasRaiz.$dirty || true;
|
|
559
559
|
refrescarMarcaDirty();
|
|
@@ -1237,4 +1237,4 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
1237
1237
|
return resultado;
|
|
1238
1238
|
}
|
|
1239
1239
|
});
|
|
1240
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0NBLG9EQUVDO0lBV0QsMERBWUM7SUFFRCw4REFLQztJQUVELDBEQXFCQztJQU1ELG9EQUVDO0lBRUQsNEZBRUM7SUFzQ0QsMERBRUM7SUFFRCxvREFJQztJQXNCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQVVDO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWdGRCxnRUFpQ0M7SUFPRCxrRUF1QkM7SUFFRCxzREFHQztJQUVELHNEQUVDO0lBRUQsMERBRUM7SUFFRCxvREFFQztJQUVELDhEQU9DO0lBRUQsMERBT0M7SUFFRCw0REFnQkM7SUFHRCx3Q0FLQztJQW9KRCxrREFnQkM7SUFFRCxrREEwQkM7SUFzSEQsMENBa0lDO0lBaUNELHNEQUlDO0lBRUQsd0VBZ0ZDO0lBRUQsNERBTUM7SUFNRCxnRUFpQkM7SUFFRCw0REFTQztJQXlGRCwwREFnR0M7SUFoOENELHFDQUF1RDtJQUV2RCxpREFBb0c7SUFFcEcsK0NBQStEO0lBQy9ELDJDQUFzQztJQUV0QyxtQ0FzQmlCO0lBRWpCLG1EQUFrRDtJQUNsRCx5REFBdUQ7SUFFdkQsSUFBSSxTQUFTLEdBQUcsRUFFZixDQUFBO0lBRUQsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQXlDO1FBQzFFLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNuRCxDQUFDO0lBU0QsSUFBSSwyQkFBMkIsR0FBZ0MsRUFBRSxDQUFDO0lBRWxFLFNBQWdCLHVCQUF1QixDQUFDLFFBQWdDLEVBQUUsU0FB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LENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0csSUFBSSxhQUE0QixDQUFDO1FBQ2pDLElBQUksZ0JBQWdCLEdBQWtCLE9BQU8sQ0FBQztRQUM5QyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNsQixnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1lBQ3JELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQXFCO1lBQzlCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRGb3JtUmVuZGVyZXIgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGFkYXB0YXJFc3RydWN0dXJhIH0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5cclxudmFyIGNvbW9kaW5lcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyQ29tb2RpbmVzPzogKGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJDb21vZGluZXMoY2FsY3VsYXJDb21vZGluZXM6IChmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGNvbW9kaW5lcy5jYWxjdWxhckNvbW9kaW5lcyA9IGNhbGN1bGFyQ29tb2RpbmVzXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIExpc3RlbmVyQ2FtYmlvVmFyaWFibGUgPSAodmFyaWFibGU6IHN0cmluZywgdmFsb3I6IGFueSwgZm9yUGs/OiBGb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzKSA9PiB2b2lkO1xyXG5cclxudHlwZSBTdXNjcmlwY2lvbkNhbWJpb1ZhcmlhYmxlID0ge1xyXG4gICAgbGlzdGVuZXI6IExpc3RlbmVyQ2FtYmlvVmFyaWFibGU7XHJcbiAgICB2YXJpYWJsZXM/OiBTZXQ8c3RyaW5nPjtcclxufTtcclxuXHJcbnZhciBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGU6IFN1c2NyaXBjaW9uQ2FtYmlvVmFyaWFibGVbXSA9IFtdO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlLCB2YXJpYWJsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6ICgpID0+IHZvaWQge1xyXG4gICAgY29uc3QgdmFyc1NldCA9IHZhcmlhYmxlc1xyXG4gICAgICAgID8gbmV3IFNldChBcnJheS5pc0FycmF5KHZhcmlhYmxlcykgPyB2YXJpYWJsZXMgOiBbdmFyaWFibGVzXSlcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHN1YjogU3VzY3JpcGNpb25DYW1iaW9WYXJpYWJsZSA9IHsgbGlzdGVuZXIsIHZhcmlhYmxlczogdmFyc1NldCB9O1xyXG4gICAgc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlLnB1c2goc3ViKTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUuaW5kZXhPZihzdWIpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZXN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5maW5kSW5kZXgocyA9PiBzLmxpc3RlbmVyID09PSBsaXN0ZW5lcik7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbm90aWZpY2FyQ2FtYmlvVmFyaWFibGUodmFyaWFibGU6IHN0cmluZywgdmFsb3I6IGFueSwgZm9yUGs/OiBGb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHsgbGlzdGVuZXIsIHZhcmlhYmxlcyB9ID0gc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlW2ldO1xyXG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcclxuICAgICAgICAgICAgbGV0IGFwbGljYSA9IHZhcmlhYmxlcy5oYXModmFyaWFibGUpO1xyXG4gICAgICAgICAgICBpZiAoIWFwbGljYSAmJiByZXNwdWVzdGFzQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2IGluIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwbGljYSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWFwbGljYSkgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKHZhcmlhYmxlLCB2YWxvciwgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gbGlzdGVuZXIgZGUgY2FtYmlvIGRlIHZhcmlhYmxlJywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWRcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8/OiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZCkge1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyA9IGNhbGN1bGFyVmFyaWFibGVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZCkge1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH1cclxuICAgIGRpcnR5OiBib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuZXhwb3J0IGNvbnN0IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MgPSAoKSA9PiBkYXRvc0J5UGFzcyAmJiBPYmplY3Qua2V5cyhkYXRvc0J5UGFzcykubGVuZ3RoID4gMFxyXG5cclxuaW50ZXJmYWNlIFJlY3Qge1xyXG4gICAgdG9wOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFJlY3QoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBSZWN0IHtcclxuICAgIHZhciByZWN0OiBSZWN0ID0geyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IH07XHJcbiAgICB2YXIgY3VycmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICByZWN0LnRvcCArPSBjdXJyZW50Lm9mZnNldFRvcDtcclxuICAgICAgICByZWN0LmxlZnQgKz0gY3VycmVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVjdDtcclxufVxyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOiBFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzogKGRicHA6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiBQcm9taXNlPGFueT4gPSAoKSA9PiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOiB0eXBlb2YgcGVyc2lzdGlyRGF0b3NCeVBhc3MpIHtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpIHtcclxuICAgIGF3YWl0IGdldEZvcm1SZW5kZXJlcigpLnBlcnNpc3RpckRhdG9zKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXJFbmN1ZXN0YSA9IChpZENhcmdhOiBJZENhcmdhLCBjYWxsQmFjazogKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB2b2lkKSA9PiB7XHJcbiAgICBjb25zdCBORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiA9IGdldEZvcm1SZW5kZXJlcigpLmdldFVsdGltb1ZhbG9yUGtSYWl6KCkgfHwgJy0xJztcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRVbHRpbW9WYWxvclBrUmFpeigoTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSAtIDEpLnRvU3RyaW5nKCkpO1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVogYXMgdW5rbm93biBhcyBJZEVuY10gPSB7fSBhcyBSZXNwdWVzdGFzUmFpejtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdID0ge1xyXG4gICAgICAgIC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLFxyXG4gICAgICAgIHRlbTogeyAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50ZW0gfVxyXG4gICAgfTtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdLnRlbS5jYXJnYSA9IGlkQ2FyZ2E7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpLnRoZW4oXHJcbiAgICAgICAgKCkgPT4gY2FsbEJhY2soe1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50YXJlYS5tYWluX2Zvcm0sXHJcbiAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIoTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVopIGFzIFZhbHVlUGtSYWl6XHJcbiAgICAgICAgfSBhcyBGb3JQa1JhaXopXHJcbiAgICApLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWRcclxuKSB7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDogKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvclBrUmFpejogRm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3RhcykgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6IEVzdHJ1Y3R1cmEpIHtcclxuICAgIGVzdHJ1Y3R1cmEgPSBhZGFwdGFyRXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcik7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YSA9PiAhIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGYgPT4gKHsgaGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm8gfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSkgPT4gKHtcclxuICAgICAgICBwazogdWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoXHJcbiAgICBudWV2b1BhcXVldGU6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYgeyBkaXJ0eT86IGJvb2xlYW4gfVxyXG4pIHtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OiBmYWxzZSxcclxuICAgICAgICAuLi5udWV2b1BhcXVldGUsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHt9IGFzIERhdG9zQnlQYXNzW1wiZmVlZGJhY2tSb3dWYWxpZGF0b3JcIl1cclxuICAgIH07XHJcblxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpID0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOiBvYmplY3QpIHtcclxuICAgIGZvciAodmFyIGsgaW4gbykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKSB7XHJcbiAgICBpZiAoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpIHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpIHtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50IHwgSFRNTEJ1dHRvbkVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBlbGVtZW50bzogVCxcclxuICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PixcclxuICAgIHZhcmlhYmxlPzogSWRWYXJpYWJsZSxcclxuICAgIGZvclBrPzogRm9yUGssXHJcbn0gJiAoe1xyXG4gICAgcHJvcDoga2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGxhIHByb3AoZXJ0eSkgZGVsIGVsZW1lbnRvXHJcbn0gfCB7XHJcbiAgICBhdHRyOiBzdHJpbmdcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBhdHRyKGlidXRvKVxyXG59IHwge1xyXG4gICAgc3R5bGU6IGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25cclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59IHwge1xyXG4gICAgZGlyZWN0OiB0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6IHN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7IGVsZW1lbnRvPzogVCB9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjogUmVnaXN0cm9FbGVtZW50bzxUPikge1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOiBSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IFVuaWRhZEFuYWxpc2lzIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM6IHRydWUsIGFncmVnYXJTaUZhbHRhPzogYm9vbGVhbik6IFJlc3B1ZXN0YXNGb3JQa0NvbXVuICYgeyByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcyB9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrLCBjb25BdW1lbnRhZGFzPzogYm9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzPzogUmVzcHVlc3RhcyB9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQaztcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTogW3VuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6IFVuaWRhZEFuYWxpc2lzLCBmb3JQazogRm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlICh1bmlkYWRfYW5hbGlzaXMpIHtcclxuICAgICAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhID0geyAuLi5mb3JQa0FwaWxhZGEgfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcyA9IHVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZSAocGlsYS5sZW5ndGgpIHtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmICh2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yID0gcmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSA/IHZhbG9yUGtPUG9zaWNpb24gLSAxIDogdmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFncmVnYXJTaUZhbHRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZiAoY29uQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsgLi4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06IHZhbG9yUGtPUG9zaWNpb24gfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OiBGb3JQa1JhaXopIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IgKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcykge1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYgKGRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZiAoJ3Byb3AnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJ2F0dHInIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnc3R5bGUnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocm93VmFsaWRhdG9yLmFjdHVhbCkge1xyXG4gICAgICAgIHZhciB7IHRvcCwgYm90dG9tIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYgKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUgPT0gJ2ZpbicgPyBgYm90b24tdm9sdmVyLTJgIDogYHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0ICogMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOiBSZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6IFJlY3R8IG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRvICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ZhcmlhYmxlJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvbmp1bnRvcHJlZ3VudGFzJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b24tdm9sdmVyJylcclxuICAgICAgICAgICAgKSAmJiBlbGVtZW50by5vZmZzZXRIZWlnaHQgPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRvRW50ZXJvID09IG51bGwpIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgLSByZWN0LnRvcCA8IGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50byA9IGVsZW1lbnRvPy5wYXJlbnRFbGVtZW50ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKSB7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDoge1xyXG4gICAgICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT86IEhUTUxFbGVtZW50IHwgbnVsbFxyXG4gICAgICAgIHRvcD86IG51bWJlciB8IG51bGxcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBudWxsXHJcbiAgICAgICAgZW5mb2NhZG8/OiBib29sZWFuIHwgbnVsbFxyXG4gICAgICAgIGRlc2VuZm9xdWU/OiBzdHJpbmcgfCBudWxsXHJcbiAgICB9ID0ge307XHJcbiAgICBpZiAoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3IgPz8gcmVjdEVsZW1lbnRvRW50ZXJvKS50b3AgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgICAgIHJlc3VsdC50b3AgPSB0b3A7XHJcbiAgICAgICAgcmVzdWx0LmJvdHRvbSA9IHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0b3AgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlID0gJ2FycmliYSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYWJham8nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2FkbyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOiB7IHNldEF0dHJpYnV0ZTogKG5hbWU6IE4sIHZhbG9yOiBzdHJpbmcpID0+IHZvaWQsIGdldEF0dHJpYnV0ZTogKG5hbWU6IE4pID0+IHN0cmluZyB8IG51bGwgfSxcclxuICAgIG5hbWU6IE4sXHJcbiAgICB2YWxvcjogc3RyaW5nXHJcbikge1xyXG4gICAgaWYgKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOiBULFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBUW05dXHJcbikge1xyXG4gICAgaWYgKG9iamV0b1tuYW1lXSAhPSB2YWxvcikge1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazogRm9yUGspIHtcclxuICAgIGlmIChlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgdmFyIHsgcmVzcHVlc3RhcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb25maWdCb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3BVQSA9IHJlc3B1ZXN0YXNbZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9baWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BVQSAhPSBudWxsICYmIHJlc3BVQSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdCb3RvbkZvcm11bGFyaW8uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1snJEIuJyArIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25faWRfcHJlZ3VudGEoX3BheWxvYWQ6IHsgcHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpIHtcclxuICAgIHZhciBib3RvbkdyYWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1idXR0b25cIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBpZiAoYm90b25HcmFiYXIpIHtcclxuICAgICAgICBpZiAoYm90b25HcmFiYXIuZGlzYWJsZWQgIT09ICFkYXRvc0J5UGFzcy5kaXJ0eSkge1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwbGljYXJDYW1iaW9VbmFSZXNwdWVzdGEoXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgdmFyaWFibGU6IElkVmFyaWFibGUsXHJcbiAgICByZXNwdWVzdGFJbnB1dDogVmFsb3JcclxuKSB7XHJcbiAgICB2YXIgcmVzcHVlc3RhID0gcmVzcHVlc3RhSW5wdXQ7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHJlc3B1ZXN0YXNbdmFyaWFibGVdO1xyXG4gICAgaWYgKHJlc3B1ZXN0YSA9PT0gJycpIHtcclxuICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgfSBlbHNlIGlmIChlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXT8udGlwbyA9PSAnbnVtZXJvJykge1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhO1xyXG4gICAgaWYgKHJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1t2YXJpYWJsZV0gPSByZXNwdWVzdGEgPz8gbnVsbDsgLy8gY2FtYmlvIHVuZGVmaW5lZCBwb3IgbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVjZW50TW9kaWZpZWQsIHZhbG9yQW50ZXJpb3IsIHJlc3B1ZXN0YVByb2Nlc2FkYTogcmVzcHVlc3RhIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZnJlc2NhcllSZWNhbGN1bGFyQnlwYXNzKFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeixcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgdmFyaWFibGVzTW9kaWZpY2FkYXM6IElkVmFyaWFibGVbXSxcclxuICAgIHJlY2VudE1vZGlmaWVkOiBib29sZWFuXHJcbikge1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgcmVjYWxjdWxhckNvbW9kaW5lc0ZvclBrKGZvclBrKTtcclxuICAgIGlmIChlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJpYWJsZXNNb2RpZmljYWRhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2ZXJpZmljYXJTb3J0ZW8oe1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlbzogZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUFjdHVhbDogdmFyaWFibGVzTW9kaWZpY2FkYXNbaV0sXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YXJpYWJsZXNNb2RpZmljYWRhcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIHZhciB2ID0gdmFyaWFibGVzTW9kaWZpY2FkYXNbal07XHJcbiAgICAgICAgbm90aWZpY2FyQ2FtYmlvVmFyaWFibGUodiBhcyBzdHJpbmcsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3ZdLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpO1xyXG4gICAgfVxyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgcmV0dXJuIGZlZWRiYWNrUm93O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWNhbGN1bGFyQ29tb2RpbmVzRm9yUGsoZm9yUGs6IEZvclBrKSB7XHJcbiAgICBpZiAoY29tb2RpbmVzLmNhbGN1bGFyQ29tb2RpbmVzKSB7XHJcbiAgICAgICAgY29tb2RpbmVzLmNhbGN1bGFyQ29tb2RpbmVzKGZvclBrKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLFxyXG4gICAgcmVzcHVlc3RhOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPXHJcbn0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETyc7XHJcbiAgICBsZXQgeyBmb3JQaywgcmVzcHVlc3RhLCB2YXJpYWJsZSB9ID0gcGF5bG9hZDtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXTtcclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbG9yQW50ZXJpb3IgPSB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA/IHJlc3B1ZXN0YXNbdmFyaWFibGVdIDogbnVsbDtcclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgSWRGaW4gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpIHtcclxuICAgICAgICB2YXIgcmVzQ2FtYmlvID0gYXBsaWNhckNhbWJpb1VuYVJlc3B1ZXN0YShmb3JQaywgcmVzcHVlc3RhcywgdmFyaWFibGUsIHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgcmVjZW50TW9kaWZpZWQgPSByZXNDYW1iaW8ucmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgaWYgKCFyZWNlbnRNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKSB7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSByZWZyZXNjYXJZUmVjYWxjdWxhckJ5cGFzcyhmb3JQaywgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgW3ZhcmlhYmxlXSwgcmVjZW50TW9kaWZpZWQpO1xyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH0gd2hpbGUgKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpO1xyXG4gICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSA9PSBudWxsICYmIGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uZXN0YWRvID09ICd2YWxpZGEnKSB7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbDogZmVlZGJhY2tSb3cuYWN0dWFsIH07XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZ2lzdHJvUmVzcHVlc3RhU2ltcGxlID0ge1xyXG4gICAgdmFyaWFibGU6IElkVmFyaWFibGUsXHJcbiAgICByZXNwdWVzdGE6IFZhbG9yXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGFzKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHJlc3B1ZXN0YXM6IFJlZ2lzdHJvUmVzcHVlc3RhU2ltcGxlW11cclxufSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YXM6IGxpc3RhUmVzcHVlc3RhcyB9ID0gcGF5bG9hZDtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWRBbnkgPSBmYWxzZTtcclxuICAgIHZhciB2YXJpYWJsZXNNb2RpZmljYWRhczogSWRWYXJpYWJsZVtdID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0YVJlc3B1ZXN0YXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGxpc3RhUmVzcHVlc3Rhc1tpXTtcclxuICAgICAgICB2YXIgcmVzQ2FtYmlvID0gYXBsaWNhckNhbWJpb1VuYVJlc3B1ZXN0YShmb3JQaywgcmVzcHVlc3RhcywgaXRlbS52YXJpYWJsZSwgaXRlbS5yZXNwdWVzdGEpO1xyXG4gICAgICAgIGlmIChyZXNDYW1iaW8ucmVjZW50TW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgcmVjZW50TW9kaWZpZWRBbnkgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXJpYWJsZXNNb2RpZmljYWRhcy5wdXNoKGl0ZW0udmFyaWFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50TW9kaWZpZWRBbnkgJiYgdmFyaWFibGVzTW9kaWZpY2FkYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlZnJlc2NhcllSZWNhbGN1bGFyQnlwYXNzKGZvclBrLCByZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB2YXJpYWJsZXNNb2RpZmljYWRhcywgcmVjZW50TW9kaWZpZWRBbnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHJlY2VudE1vZGlmaWVkOiByZWNlbnRNb2RpZmllZEFueSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHRhcmVhOiBJZFRhcmVhLCBub3RhOiBzdHJpbmcgfCBudWxsIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgdGFyZWEsIG5vdGEgfSA9IHBheWxvYWQ7XHJcbiAgICBjb25zb2xlLmxvZyhcIkZBTFRBIC8vIFRPRE9cIilcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzOiBzdHJpbmcgfCBudWxsIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgb2JzZXJ2YWNpb25lcyB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIsIG9wY2lvbjoga2V5b2YgVmlzaXRhLCB2YWxvcjogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yIH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgaW5kZXg6IG51bWJlciB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4IH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7IGZvclBrIH06IHsgZm9yUGs6IEZvclBrIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6KTtcclxuICAgIHJlY2FsY3VsYXJDb21vZGluZXNGb3JQayhmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgcmVjYWxjdWxhckNvbW9kaW5lc0ZvclBrKGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfTogeyBmb3JQazogRm9yUGssIGZvclBrUGFkcmU6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzIHwgdW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOiBVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBpbmRleCA9IGZvclBrW3VhRGVmLnBrX2FncmVnYWRhXSBhcyBudW1iZXI7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzOiByZXNwdWVzdGFzUGFkcmUgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlLCB0cnVlLCB0cnVlKTtcclxuICAgIChyZXNwdWVzdGFzUGFkcmVbdW5pZGFkX2FuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW10pLnNwbGljZShpbmRleCAtIDEsIDEpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgcmVjYWxjdWxhckNvbW9kaW5lc0ZvclBrKGZvclBrKTtcclxuICAgIGRhdG9zQnlQYXNzLmRpcnR5ID0gZGF0b3NCeVBhc3MuZGlydHkgfHwgdHJ1ZTtcclxuICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG4gICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB7IGF1dG9JbmdyZXNvOiB0cnVlIH0pO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGtQYWRyZSk7XHJcbiAgICB2b2xjYWRvSW5pY2lhbEVsZW1lbnRvc1JlZ2lzdHJhZG9zKGZvclBrUGFkcmUpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoQnlQYXNzPFQsIFI+KFxyXG4gICAgZnVuOiAocGF5bG9hZDogVCwgZGF0b3M6IHR5cGVvZiBkYXRvc0J5UGFzcykgPT4gUixcclxuICAgIHBheWxvYWQ6IFRcclxuKSB7XHJcbiAgICByZXR1cm4gZnVuKHBheWxvYWQsIGRhdG9zQnlQYXNzKTtcclxufVxyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuXHJcblxyXG5leHBvcnQgY29uc3QgdWx0aW1hVmFyaWJsZVZpdmllbmRhID0gJ05PX0VTVEFfREVGSU5JREFfQVVOLy9UT0RPJyBhcyBJZFZhcmlhYmxlO1xyXG5cclxuZXhwb3J0IGNvbnN0IE1BWENQID0gMjA7XHJcblxyXG4vKiBSRURVQ0VSUyAqL1xyXG5cclxudmFyIHJlZW1wbGF6b3NIYWJpbGl0YXI6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XHJcbiAgICBmYWxzZTogJ2ZhbHNlJyxcclxuICAgIHRydWU6ICd0cnVlJyxcclxuICAgIFwiPVwiOiAnPT0nLFxyXG4gICAgXCI8PlwiOiAnIT0nLFxyXG4gICAgXCImXCI6ICcmJicsXHJcbiAgICBcInxcIjogJ3x8JyxcclxuICAgIFwiT1JcIjogJ3x8JyxcclxuICAgIFwiQU5EXCI6ICcmJicsXHJcbiAgICBcIm9yXCI6ICd8fCcsXHJcbiAgICBcImFuZFwiOiAnJiYnLFxyXG4gICAgXCJub3RcIjogJyEnLFxyXG4gICAgXCJOT1RcIjogJyEnLFxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IGhlbHBlcnNDYXNpbGxlcm9zID0ge1xyXG4gICAgbnVsbDJ6ZXJvKHBvc2libGVOdWxsOiBhbnkpIHtcclxuICAgICAgICBpZiAocG9zaWJsZU51bGwgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHBvc2libGVOdWxsO1xyXG4gICAgfSxcclxuICAgIGRpdjBlcnIobnVtZXJhZG9yOiBudW1iZXIsIGRlbm9taW5hZG9yOiBudW1iZXIsIHBrOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoZGVub21pbmFkb3IgPT0gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFcnJvciBlbiBcIiArIHBrICsgXCIgZGl2aXNpb24gcG9yIGNlcm8gZGUgXCIgKyBudW1lcmFkb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVtZXJhZG9yIC8gZGVub21pbmFkb3I7XHJcbiAgICB9LFxyXG4gICAgZnVuczoge1xyXG4gICAgICAgIGJsYW5jbyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggIT09IDAgJiYgIXhcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhveSgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGRhdGUudG9kYXkoKS50b0RteSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmZWNoYV92YWxpZGEoeDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbyA9IC9eKFsxLTldfDBbMS05XXxbMTJdXFxkfDNbMDFdKVxcLyhbMS05XXwwWzEtOV18MVswMTJdKVxcLzIwXFxkXFxkJC8udGVzdCh4KVxyXG4gICAgICAgICAgICB2YXIgeERhdGU6IERhdGU7XHJcbiAgICAgICAgICAgIHZhciBjb252ZXJzaW9uT2s6IGJvb2xlYW47XHJcbiAgICAgICAgICAgIGNvbnZlcnNpb25PayA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXRvX3ZhbGlkbykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgW2QsIG0sIHldID0geC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IG5ldyBEYXRlKGAke3l9LyR7bX0vJHtkfWApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udmVyc2lvbk9rID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vZmFsdGFyaWEgdmFsaWRhciBxdWUgbm8gc2VhIHVuYSBmZWNoYSBmdXR1cmEgeSBxdWUgc2VhIHVuYSBmZWNoYSBlbiBlbCByYW5nbyBkZWwgb3BlcmF0aXZvXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkbyAmJiBjb252ZXJzaW9uT2tcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1lc2FuaW9fdmFsaWRvKHg6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgZm9ybWF0b192YWxpZG8gPSAvXihbMS05XXwwWzEtOV18MVswMTJdKVxcLygxOXwyMClcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRvX3ZhbGlkb1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5mb3JtYWRvKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkICYmIHggIT09IG51bGwgJiYgKCEoeCBpbnN0YW5jZW9mIEFycmF5KSB8fCB4Lmxlbmd0aCAhPT0gMClcclxuICAgICAgICAgICAgICAgICYmICghKHggaW5zdGFuY2VvZiBPYmplY3QpIHx8IE9iamVjdC5rZXlzKHgpLmxlbmd0aCAhPT0gMClcclxuICAgICAgICB9LFxyXG4gICAgICAgIG5zbmMoeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ID09IC05XHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYXIoeDogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICUgMiA9PSAwXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlZGFkX21lc19hbm5pb192YWxpZG8oZWRhZDogbnVtYmVyLCBtZXNBbm5pbzogc3RyaW5nLCBmZWNoYVJlYWxpemFjaW9uRERNTVlZWVk6IHN0cmluZykge1xyXG4gICAgICAgICAgICB2YXIgbWVzZXNEaWZlcmVuY2lhID0gKGQxOiBEYXRlLCBkMjogRGF0ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIG1vbnRocztcclxuICAgICAgICAgICAgICAgIG1vbnRocyA9IChkMi5nZXRGdWxsWWVhcigpIC0gZDEuZ2V0RnVsbFllYXIoKSkgKiAxMjtcclxuICAgICAgICAgICAgICAgIG1vbnRocyAtPSBkMS5nZXRNb250aCgpO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzICs9IGQyLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIDw9IDAgPyAwIDogbW9udGhzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNSZWFsaXphY2lvbiA9IGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWS5zcGxpdChcIi9cIik7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcGFydGVzIGNvcnJlc3BvbmRlbiBhIHVuYSBmZWNoYSB2w6FsaWRhXHJcbiAgICAgICAgICAgIHZhciB0b2RheSA9IGRhdGUueW1kKE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblsyXSksIE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblsxXSksIE51bWJlcihwYXJ0ZXNSZWFsaXphY2lvblswXSkpXHJcbiAgICAgICAgICAgIHZhciBwYXJ0ZXNNZXNBbm5pbyA9IG1lc0FubmlvLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBsYXMgcGFydGVzIGNvcnJlc3BvbmRlbiBhIHVuYSBmZWNoYSB2w6FsaWRhXHJcbiAgICAgICAgICAgIHZhciBuYWNpbWllbnRvID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc01lc0FubmlvWzFdKSwgTnVtYmVyKHBhcnRlc01lc0FubmlvWzBdKSwgMSlcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIFJlYWxEYXRlIGVzIERhdGUgeSBzZSBwdWVkZSByZXN0YXJcclxuICAgICAgICAgICAgdmFyIGRpZmVyZW5jaWFNZXNlcyA9IG1lc2VzRGlmZXJlbmNpYShuYWNpbWllbnRvLCB0b2RheSk7XHJcbiAgICAgICAgICAgIHZhciBlZGFkRGVjaW1hbGVzID0gZGlmZXJlbmNpYU1lc2VzIC8gMTI7IC8vZWogMzYuNVxyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgTWF0aC5mbG9vcihlZGFkRGVjaW1hbGVzKSA9PSBlZGFkIHx8IC8vbWlzbWEgZWRhZFxyXG4gICAgICAgICAgICAgICAgZWRhZERlY2ltYWxlcyA9PSBlZGFkICsgMSAvL21lcyBkZSB0b2xlcmFuY2lhXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vY29waWFyX2NhbXBvX3VhX3JhbWEocmVzcHVlc3Rhc09yaWdlbjpSZXNwdWVzdGFzW10sIHBvc2ljaW9uOm51bWJlciwgdmFyaWFibGVPcmlnZW46IElkVmFyaWFibGUsIGNhbWlubzpzdHJpbmcsIGNvbmRpY2lvbjpib29sZWFuKXtcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uPyhyZXNwdWVzdGFzT3JpZ2VuICYmIHJlc3B1ZXN0YXNPcmlnZW5bcG9zaWNpb24tMV0gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXVtgJHtjYW1pbm99YF1bdmFyaWFibGVPcmlnZW5dKTpudWxsXHJcbiAgICAgICAgLy8gICAgcmV0dXJuIGNvbmRpY2lvbj9ldmFsKGByZXNwdWVzdGFzT3JpZ2VuWyR7cG9zaWNpb24tMX1dLmArY2FtaW5vKycuJyt2YXJpYWJsZU9yaWdlbik6bnVsbDtcclxuICAgICAgICAvL31cclxuICAgICAgICAvKlxyXG4gICAgICAgIGRibzp7XHJcbiAgICAgICAgICAgIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsIGRhdG86c3RyaW5nKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgaW5mb3JtYWRvKHhwZXJzb25hcykgJiYgcGVyPD0geHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTEgJiYgISF4cGVyc29uYXNbcGVyLTFdW2RhdG9dPyB4cGVyc29uYXNbcGVyLTFdW2RhdG9dOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZWRhZGZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ2VkYWQnKVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVpbmRpdmlkdWFsKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXBlcnNvbmFzW3Blci0xXVsnZW50cmVhaW5kJ11cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXhpc3RlbWllbWJybyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXBlcnNvbmFzICYmIHBlcjw9IHBlcnNvbmFzLmxlbmd0aCAmJiBwZXI+PTFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgbnJvY29ueXVnZXMoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzXHJcbiAgICAgICAgICAgICAgICByZXR1cm4geHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTIpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9qZWZlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBlcnNvbmFzLmZpbHRlciggcGVyLT5wZXIucDQ9PTEpLmxlbmd0aFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJlbnRlc2NvZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyLCdwNCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNleG9mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiAhIXhwZXJzb25hcyAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV0uc2V4bz8geHBlcnNvbmFzW3Blci0xXVsnc2V4byddOm51bGxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2l0Y29ueWplZmUoZW5jdTpzdHJpbmcsaG9nOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIsMSwncDUnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSAqL1xyXG4gICAgfVxyXG59O1xyXG5cclxudHlwZSBGdW5jaW9uSGFiaWxpdGFyID0gKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IGJvb2xlYW47XHJcbnR5cGUgRnVuY2lvblZhbG9yYXIgPSAodmFsb3JlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gYW55O1xyXG52YXIgZnVuY2lvbmVzSGFiaWxpdGFyOiB7IFtrZXk6IHN0cmluZ106IEZ1bmNpb25IYWJpbGl0YXIgfSA9IHtcclxufVxyXG52YXIgZnVuY2lvbmVzVmFsb3JhcjogeyBba2V5OiBzdHJpbmddOiBGdW5jaW9uVmFsb3JhciB9ID0ge1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWluaUNvbXBpbGFkb3JTUWxKcyhleHByZXNpb25DYXNpU1FMOiBzdHJpbmcpIHtcclxuICAgIHZhciBleHByZXNpb24gPSBleHByZXNpb25DYXNpU1FMLnJlcGxhY2UoL1xcdTAwQTAvZywgJyAnKTtcclxuICAgIHZhciBjdWVycG8gPSBleHByZXNpb24ucmVwbGFjZSgvXFxiaXMgZGlzdGluY3QgZnJvbVxcYi9naSwgJyE9JykucmVwbGFjZSgvXFxiLis/XFxiL2csIGZ1bmN0aW9uIChlbFRva2VuKSB7XHJcbiAgICAgICAgdmFyIGVsVG9rZW5UcmltZWFkbyA9IGVsVG9rZW4udHJpbSgpO1xyXG4gICAgICAgIGlmIChlbFRva2VuVHJpbWVhZG8gaW4gcmVlbXBsYXpvc0hhYmlsaXRhcikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVlbXBsYXpvc0hhYmlsaXRhcltlbFRva2VuVHJpbWVhZG9dO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoL15cXGQrXFwuP1xcZCokLy50ZXN0KGVsVG9rZW5UcmltZWFkbykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGVsVG9rZW5cclxuICAgICAgICB9IGVsc2UgaWYgKC9eXFxXKyQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH0gZWxzZSBpZiAoL15cXHMrJC8udGVzdChlbFRva2VuKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ2hlbHBlcnMubnVsbDJ6ZXJvKHZhbG9yZXMuJyArIGVsVG9rZW4gKyAnKSc7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjdWVycG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRGdW5jaW9uQ29tcGlsYWRhPFQ+KGNvbmp1bnRvRGVGdW5jaW9uZXM6IHsgW2tleTogc3RyaW5nXTogKHZhbG9yZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0pID0+IFQgfSkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIWNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc10pIHtcclxuICAgICAgICAgICAgdmFyIGN1ZXJwbyA9IG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAvLyB2YXIgY3VlcnBvID0gbWluaUNvbXBpbGFkb3JTUWxKcyhub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzKTtcclxuICAgICAgICAgICAgICAgIHZhciBpbnRlcm5hbEZ1biA9IG5ldyBGdW5jdGlvbigndmFsb3JlcycsICdoZWxwZXJzJywgJ3JldHVybiAnICsgY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc10gPSBmdW5jdGlvbiAodmFsb3Jlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcm5hbEZ1bih2YWxvcmVzLCBoZWxwZXJzQ2FzaWxsZXJvcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFUlJPUiBFSkVDVUNDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsIG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMsIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbG9yZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIENPTVBJTEFDSU9OIEVYUFJFU0lPTiBFWFRFUk5BICcsIG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMsIGV4cGVjdGVkKGVycikpXHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjb25qdW50b0RlRnVuY2lvbmVzW25vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnNdO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvbkhhYmlsaXRhciA9IGdldEZ1bmNpb25Db21waWxhZGEoZnVuY2lvbmVzSGFiaWxpdGFyKTtcclxuZXhwb3J0IGNvbnN0IGdldEZ1bmNpb25WYWxvcmFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNWYWxvcmFyKTtcclxuXHJcblxyXG52YXIgcm93VmFsaWRhdG9yID0gZ2V0Um93VmFsaWRhdG9yPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4oeyBnZXRGdW5jaW9uSGFiaWxpdGFyLCBnZXRGdW5jaW9uVmFsb3JhciB9KVxyXG5leHBvcnQgdmFyIGJ1c2Nhck5vUmVhRW5SZXNwdWVzdGFzID0gKHVuaWRhZGVzQVJlY29ycmVyUHJtOiBJZFVuaWRhZEFuYWxpc2lzW10sIHVuaWRhZEFuYWxpc2lzOiBVbmlkYWRBbmFsaXNpcywgcmVzcHVlc3RhczogUmVzcHVlc3Rhcywgbm9SZWFzVGFyZWE6IGFueVtdLCBub21iTm9SZWE6IHN0cmluZylcclxuICAgIDogeyBucmNvZGlnbzogc3RyaW5nIHwgbnVsbCwgZXN2YWxvcjogYm9vbGVhbiB9ID0+IHtcclxuICAgIHZhciBucmNvZGlnbzogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZXN2YWxvciA9IGZhbHNlO1xyXG4gICAgdmFyIHJ2YWxvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgcnZhcmlhYmxlOiBzdHJpbmc7XHJcbiAgICB2YXIgcm5vcmVhOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIC8vIHZhciByZXN1bHQ9e25yY29kOlN0cmluZywgZXN2YWw6Qm9vbGVhbn07XHJcbiAgICBpZiAodW5pZGFkZXNBUmVjb3JyZXJQcm0uaW5jbHVkZXModW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzKSkge1xyXG4gICAgICAgIGZvciAobGV0IG5vUmVhIG9mIG5vUmVhc1RhcmVhKSB7IC8vZXN0cnVjdHVyYS5ub1JlYXMsIGVzdHJ1Y3R1cmEubm9SZWFzU3VwXHJcbiAgICAgICAgICAgIGlmIChub21iTm9SZWEgPT0gJ25vX3JlYScpIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHZhcmlhYmxlLCB2YWxvciwgbm9fcmVhIH0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYSA9IG5vX3JlYTtcclxuICAgICAgICAgICAgICAgIHJ2YWxvciA9IHZhbG9yO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgeyB2YXJpYWJsZV9zdXAsIHZhbG9yX3N1cCwgbm9fcmVhX3N1cCB9ID0gbm9SZWE7XHJcbiAgICAgICAgICAgICAgICBybm9yZWEgPSBub19yZWFfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yID0gdmFsb3Jfc3VwO1xyXG4gICAgICAgICAgICAgICAgcnZhcmlhYmxlID0gdmFyaWFibGVfc3VwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW3J2YXJpYWJsZSBhcyBJZFZhcmlhYmxlXSA9PSBydmFsb3IpIHtcclxuICAgICAgICAgICAgICAgIG5yY29kaWdvID0gcm5vcmVhOyAgLy9ub19yZWEsIG5vX3JlYV9zdXBcclxuICAgICAgICAgICAgICAgIGVzdmFsb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgbnJjb2RpZ28sIGVzdmFsb3IgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgdWEgb2YgKGxpa2VBcih1bmlkYWRBbmFsaXNpcz8uaGlqYXMpLmFycmF5KCkpKSB7XHJcbiAgICAgICAgaWYgKHVhPy51bmlkYWRfYW5hbGlzaXMgJiYgcmVzcHVlc3Rhc1t1YS51bmlkYWRfYW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcmVzcHVlc3Rhc0hpamFzIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNbdWE/LnVuaWRhZF9hbmFsaXNpc10gPz8gW10pKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXModW5pZGFkZXNBUmVjb3JyZXJQcm0sIHVhLCByZXNwdWVzdGFzSGlqYXMsIG5vUmVhc1RhcmVhLCBub21iTm9SZWEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lc3ZhbG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ28gPSByZXN1bHQubnJjb2RpZ287XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvciA9IHJlc3VsdC5lc3ZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG5yY29kaWdvLCBlc3ZhbG9yIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnJjb2RpZ28gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGVzdmFsb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4ge25yY29kaWdvLCBlc3ZhbG9yfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgbnJjb2RpZ28sIGVzdmFsb3IgfVxyXG59XHJcblxyXG5cclxuXHJcbmV4cG9ydCB2YXIgZGVmT3BlcmF0aXZvOiBEZWZPcGVyYXRpdm8gPSB7XHJcbiAgICBlc05vUmVhOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc05vUmVhID0gZmFsc2U7XHJcbiAgICAgICAgdmFyIGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2ROb1JlYSwgZXNOb1JlYSB9O1xyXG4gICAgfSxcclxuICAgIGVzTm9SZWFTdXA6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZE5vUmVhU3VwLCBlc05vUmVhU3VwIH1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYTogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2RSZWEsIGVzUmVhIH1cclxuICAgIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNSZWFTdXAgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kUmVhU3VwOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICByZXR1cm4geyBjb2RSZWFTdXAsIGVzUmVhU3VwIH1cclxuICAgIH0sXHJcbiAgICBVQXByaW5jaXBhbDogJycgYXMgSWRVbmlkYWRBbmFsaXNpcyxcclxuICAgIGRlZlVBOiB7fSBhcyB7IFtpIGluIElkVW5pZGFkQW5hbGlzaXNdOiB7IHBrOiBJZFZhcmlhYmxlLCBpbmNsdWlkYXM6IElkVW5pZGFkQW5hbGlzaXNbXSwgaWRzRm9yOiBJZEZvcm11bGFyaW9bXSB9IH0sXHJcbiAgICBkZWZGb3I6IHt9IGFzIHsgW2YgaW4gSWRGb3JtdWxhcmlvXTogey8qYXJib2xVQTpJZFVuaWRhZEFuYWxpc2lzW10sICovIGhlcm1hbm8/OiB0cnVlIH0gfVxyXG59XHJcbi8vLy8vIEFCQUpPIGRlIGVzdGEgbMOtbmVhIG5vIHB1ZWRlIGhhYmVyIG90cm9zIG5vbWJyZXMgZGUgdmFyaWFibGVzIG8gZm9ybXVsYXJpb3MgbyBjYXNpbGxlcm9zIGVuIGdlbmVyYWxcclxuXHJcbmV4cG9ydCB2YXIgc2V0Q2FsY3Vsb1JlYU5vUmVhID0gKFxyXG4gICAgZXNOb1JlYTogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHsgY29kTm9SZWE6IHN0cmluZyB8IG51bGwsIGVzTm9SZWE6IGJvb2xlYW4gfSxcclxuICAgIGVzTm9SZWFTdXA6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZE5vUmVhU3VwOiBzdHJpbmcgfCBudWxsLCBlc05vUmVhU3VwOiBib29sZWFuIH0sXHJcbiAgICBlc1JlYWxpemFkYTogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHsgY29kUmVhOiBudW1iZXIgfCBudWxsLCBlc1JlYTogYm9vbGVhbiB9LFxyXG4gICAgZXNSZWFsaXphZGFTdXA6IChyZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7IGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbCwgZXNSZWFTdXA6IGJvb2xlYW4gfVxyXG4pID0+IHtcclxuICAgIGRlZk9wZXJhdGl2byA9IHtcclxuICAgICAgICAuLi5kZWZPcGVyYXRpdm8sXHJcbiAgICAgICAgZXNOb1JlYSxcclxuICAgICAgICBlc05vUmVhU3VwLFxyXG4gICAgICAgIGVzUmVhbGl6YWRhLFxyXG4gICAgICAgIGVzUmVhbGl6YWRhU3VwXHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFRPRE86IEdFTkVSQUxJWkFSXHJcbnR5cGUgUGVyc29uYSA9IHsgcDE6IHN0cmluZywgcDI6IG51bWJlciwgcDM6IG51bWJlciwgcDQ6IG51bWJlciB8IG51bGwsIHA1OiAxIHwgbnVsbCwgcDY6IDEgfCBudWxsIH1cclxuXHJcbmZ1bmN0aW9uIG51bShudW06IG51bWJlciB8IHN0cmluZyB8IG51bGwpOiBudW1iZXIge1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgaWYgKGlzTmFOKG51bSAtIDApKSByZXR1cm4gMDtcclxuICAgIC8vQHRzLWlnbm9yZSBsYSBncmFjaWEgZXMgbWV0ZXIgbnVtIGN1YW5kbyBlcyBzdHJpbmdcclxuICAgIHJldHVybiBudW0gLSAwO1xyXG59XHJcblxyXG52YXIgZnVuY2lvbmVzQ29ub2NpZGFzOiB7IFtrIGluIHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZpY2FyU29ydGVvKG9wdHM6IHtcclxuICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpelxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgdmFyaWFibGVBY3R1YWw6IElkVmFyaWFibGVcclxuXHJcbn0pIHtcclxuICAgIGNvbnN0IHJlc2V0ZWFyU29ydGVvID0gKG9wdHM6IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcyB9KSA9PiB7XHJcbiAgICAgICAgdmFyIHsgcmVzcHVlc3RhcyB9ID0gb3B0cztcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSA9IG51bGw7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdID0gbnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPSBudWxsO1xyXG4gICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcikgPT4gcmVzcHVlc3Rhc1ttb3N0cmFyLnRhcmdldF0gPSBudWxsKTtcclxuICAgICAgICBpZiAoJ3Zhcl9sZXRyYScgaW4gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8pIHtcclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICYmIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGZvciAodmFyIHBlciBvZiBpdGVyYXRvcihyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBwZXJbY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2xldHJhXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdmFyIHsgY29uZmlndXJhY2lvblNvcnRlbywgdmFyaWFibGVBY3R1YWwsIHJlc3B1ZXN0YXMsIGZvclBrLCByZXNwdWVzdGFzUmFpeiB9ID0gb3B0cztcclxuICAgIHZhciBpZEVuYyA9IGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF07XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSk7XHJcbiAgICB2YXIgZXhwcl9pbmNvbXBsZXRpdHVkX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5leHByX2luY29tcGxldGl0dWRfanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW8gYXMgdW5rbm93biBhcyBudW1iZXJdLmV4cHIpO1xyXG4gICAgdmFyIGZpbHRyb19mdW4gPSBnZXRGdW5jaW9uSGFiaWxpdGFyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8uZmlsdHJvX2pzW3Jlc3B1ZXN0YXNBdW1lbnRhZGFzLnZkb21pbmlvIGFzIHVua25vd24gYXMgbnVtYmVyXS5leHByKTtcclxuICAgIHZhciB1bmlkYWRBbmFsaXNpcyA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8udW5pZGFkX2FuYWxpc2lzO1xyXG5cclxuICAgIGlmIChjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3MuaW5jbHVkZXModmFyaWFibGVBY3R1YWwpKSB7XHJcbiAgICAgICAgdmFyIHVhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpID0+IHVhLnVuaWRhZF9hbmFsaXNpcyA9PSB1bmlkYWRBbmFsaXNpcyk/LnBhZHJlO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhUGFkcmUgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEpID0+IHVhLnVuaWRhZF9hbmFsaXNpcyA9PSB1YVBhZHJlKT8ucGtfYWdyZWdhZGFcclxuICAgICAgICBpZiAoZXN0cnVjdHVyYS5jb25SZWFIb2dhcikge1xyXG4gICAgICAgICAgICBpZiAodWFQYWRyZSAmJiByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXSkge1xyXG4gICAgICAgICAgICAgICAgLy9AdHMtaWdub3JlIHBrQWdyZWdhZGFQYWRyZSBleGlzdGUgZSBpbmRpY2EgbGEgcG9zaWNpb24gZGVsIHBhZHJlXHJcbiAgICAgICAgICAgICAgICB2YXIgcGFkcmUgPSByZXNwdWVzdGFzQXVtZW50YWRhc1t1YVBhZHJlXVtOdW1iZXIocmVzcHVlc3Rhc0F1bWVudGFkYXNbcGtBZ3JlZ2FkYVBhZHJlXSkgLSAxXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjdHVhbCAhPSBjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFkcmVbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSBsaWtlQXIocGFkcmVbdW5pZGFkQW5hbGlzaXNdIHx8IFtdKS5hcnJheSgpLmxlbmd0aDsgLy9zaSBhZ3JlZ2EgZGVzZGUgYm90b24gYWdyZWdhclxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzZXRlYXJTb3J0ZW8oeyByZXNwdWVzdGFzOiBwYWRyZSB9KTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXMgPSBwYWRyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlICYmIHJlc3B1ZXN0YXNSYWl6KSB7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNSYWl6O1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWRyZVtjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IGxpa2VBcihwYWRyZVt1bmlkYWRBbmFsaXNpc10gfHwgW10pLmFycmF5KCkubGVuZ3RoOyAvL3NpIGFncmVnYSBkZXNkZSBib3RvbiBhZ3JlZ2FyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNldGVhclNvcnRlbyh7IHJlc3B1ZXN0YXM6IHBhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHBhZHJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdICE9IG51bGwpIHtcclxuICAgICAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICB2YXIgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gYXMgUmVzcHVlc3Rhc1tdXHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gIT0gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IHJlc3B1ZXN0YXNVQS5sZW5ndGggKyAxXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNldGVhclNvcnRlbyh7IHJlc3B1ZXN0YXMgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGNhbnRpZGFkVG90YWwgPSBOdW1iZXIocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSk7XHJcbiAgICAgICAgICAgIGlmIChjYW50aWRhZFRvdGFsIDwgcmVzcHVlc3Rhc1VBLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgLy8gZG9ibGUgYXNpZ25hY2nDs24gcGFyYSBxdWUgbG8gY2FyZ3VlIGVuIHJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQSA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIoKHAsIGkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbWV0cm9zLnNvbWUoKHBhcmFtKSA9PiBwW3BhcmFtXSB8fCBpIDw9IGNhbnRpZGFkVG90YWwgLSAxKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdID0gcmVzcHVlc3Rhc1VBXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgd2hpbGUgKGNhbnRpZGFkVG90YWwgPiByZXNwdWVzdGFzVUEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEucHVzaCh7fSBhcyBSZXNwdWVzdGFzKVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID0gcmVzcHVlc3Rhc1VBLmZpbHRlcihwID0+IGV4cHJfaW5jb21wbGV0aXR1ZF9mdW4ocCkpLmxlbmd0aDtcclxuICAgICAgICAgICAgdmFyIHZhciRwMCA9IFwiJHAwXCIgYXMgSWRWYXJpYWJsZVxyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID09IDEgJiZcclxuICAgICAgICAgICAgICAgICFyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSAmJlxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmluY29tcGxldGFzXSA9PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNvcnRlYXIgPSByZXNwdWVzdGFzVUEuZmlsdGVyKHAgPT4gZmlsdHJvX2Z1bihwKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc29ydGVhci5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZm9yRWFjaCgocGVyLCBpKSA9PiBwZXJbdmFyJHAwXSA9IGkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLm9yZGVuLnB1c2goeyB2YXJpYWJsZTogdmFyJHAwLCBvcmRlbjogMSB9KTtcclxuICAgICAgICAgICAgICAgICAgICBzb3J0ZWFyLnNvcnQoY29tcGFyZUZvck9yZGVyKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ubWFwKGVsZW0gPT4gKHsgY29sdW1uOiBlbGVtLnZhcmlhYmxlLCBvcmRlcjogZWxlbS5vcmRlbiB9KSkpKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaWNpb25Tb3J0ZWFkYSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ubWV0b2RvID09ICdoYXNoJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05PIElNUExFTUVOVEFETycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKnBvc2ljaW9uU29ydGVhZGE9KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udmFyX2NvZWYucmVkdWNlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoc3VtLCBwYWlyKT0+c3VtICsgZGF0b3NWaXZpZW5kYS50ZW1bcGFpci52YXJdICogcGFpci5jb2VmKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApICUgY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8uZGl2aXNvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICApICUgc29ydGVhci5sZW5ndGgqL1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsZXRyYSA9ICdBJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFyTGV0cmE6IElkVmFyaWFibGUgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHBlcnNvbmEgb2Ygc29ydGVhcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBLmZpbmQoKF9wZXIsIGkpID0+IGkgPT0gcGVyc29uYVt2YXIkcDBdIGFzIG51bWJlciAtIDEpIVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFbdmFyTGV0cmFdID0gbGV0cmE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXRyYSA9IFN0cmluZy5mcm9tQ2hhckNvZGUobGV0cmEuY2hhckNvZGVBdCgwKSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB0YWJsYUFsZWF0b3JpYU1pZW1icm9zID0gY29uZmlndXJhY2lvblNvcnRlby5wYXJhbV9tZXRvZG8udGFibGEubWFwKChsaXN0YSkgPT4gbGlzdGEuc3BsaXQoJycpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3RvID0gaWRFbmMgJSAxMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbHVtbmFUYWJsYUFsZWF0b3JpYSA9IHJlc3RvID8gcmVzdG8gLSAxIDogOTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvcnRlYXIubGVuZ3RoID4gdGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc3BsaWNlKHRhYmxhQWxlYXRvcmlhTWllbWJyb3MubGVuZ3RoKSAvL2Rlc2NhcnRvIGNhbmRpZGF0b3Mgc2kgc29uIG3DoXMgcXVlIGxvIHF1ZSBwZXJtaXRlIGxhIHRhYmxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbGFUYWJsYUFsZWF0b3JpYSA9IHNvcnRlYXIubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhU2VsZWNjaW9uYWRhID0gdGFibGFBbGVhdG9yaWFNaWVtYnJvc1tmaWxhVGFibGFBbGVhdG9yaWFdW2NvbHVtbmFUYWJsYUFsZWF0b3JpYV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2ljaW9uU29ydGVhZGEgPSByZXNwdWVzdGFzVUEuZmluZEluZGV4KChwOiBSZXNwdWVzdGFzKSA9PiBwW3ZhckxldHJhXSA9PSBsZXRyYVNlbGVjY2lvbmFkYSkgKyAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSA9IHBvc2ljaW9uU29ydGVhZGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF9zb3J0ZWFibGVzXSA9IHNvcnRlYXIubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnNvcnRlYWRvX21vc3RyYXI/LmZvckVhY2goKG1vc3RyYXIpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XSA9IHJlc3B1ZXN0YXNVQVtyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8ucmVzdWx0YWRvXSBhcyBudW1iZXIgLSAxXVttb3N0cmFyLnNvdXJjZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gcmVzcHVlc3Rhc1VBLmxlbmd0aCB8fCBudWxsOyAvL25vIHF1ZXJlbW9zIGVsIHZhbG9yIDBcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFdID0gJ29rJztcclxuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbF0gPSAnb2snO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIG5vZG9BY3R1YWw6IFJlc3B1ZXN0YXMgfCBSZXNwdWVzdGFzW10sIHVuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcywgZm9yUGtBY3VtdWxhZG86IEZvclBrKSB7XHJcbiAgICB2YXIgdWFEZWYgPSBlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW3VuaWRhZF9hbmFsaXNpc107XHJcbiAgICB2YXIgZXNBcnJheSA9IG5vZG9BY3R1YWwgaW5zdGFuY2VvZiBBcnJheTtcclxuICAgIHZhciBjb25qdW50bzogUmVzcHVlc3Rhc1tdID0gZXNBcnJheSA/IG5vZG9BY3R1YWwgYXMgUmVzcHVlc3Rhc1tdIDogW25vZG9BY3R1YWwgYXMgUmVzcHVlc3Rhc107XHJcbiAgICBcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29uanVudG8ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgcmVzcCA9IGNvbmp1bnRvW2ldO1xyXG4gICAgICAgIGlmICghcmVzcCkgY29udGludWU7XHJcblxyXG4gICAgICAgIHZhciBudW0gPSBlc0FycmF5ID8gaSArIDEgOiAoZm9yUGtBY3VtdWxhZG9bdWFEZWYucGtfYWdyZWdhZGFdIHx8IDEpO1xyXG4gICAgICAgIHZhciBpZEZvcm11bGFyaW9zID0gT2JqZWN0LmtleXMoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGtleSA9PiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2tleSBhcyBJZEZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzID09PSB1bmlkYWRfYW5hbGlzaXMpO1xyXG4gICAgICAgIGZvciAoY29uc3QgaWRGb3JtdWxhcmlvIG9mIGlkRm9ybXVsYXJpb3MpIHtcclxuICAgICAgICAgICAgdmFyIG1pRm9yUGs6IEZvclBrID0geyAuLi5mb3JQa0FjdW11bGFkbywgW3VhRGVmLnBrX2FncmVnYWRhXTogbnVtLCBmb3JtdWxhcmlvOiBpZEZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvIHx8IGZvclBrQWN1bXVsYWRvLmZvcm11bGFyaW8gfTtcclxuICAgICAgICAgICAgaWYgKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMpIHtcclxuICAgICAgICAgICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXMocmVzcHVlc3Rhc1JhaXosIG1pRm9yUGspO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlc3BlY2lhbGVzLmNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8pIHtcclxuICAgICAgICAgICAgICAgIGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2byhyZXNwdWVzdGFzUmFpeiwgbWlGb3JQayk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBoaWphcyA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodSA9PiB1LnBhZHJlID09PSB1bmlkYWRfYW5hbGlzaXMpLmtleXMoKTtcclxuICAgICAgICAgICAgZm9yICh2YXIgdWFIaWphIG9mIGhpamFzKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaGlqYXNSZXNwID0gcmVzcFt1YUhpamEgYXMgSWRVbmlkYWRBbmFsaXNpc107XHJcbiAgICAgICAgICAgICAgICBpZiAoaGlqYXNSZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXosIGhpamFzUmVzcCBhcyBSZXNwdWVzdGFzW10sIHVhSGlqYSBhcyBJZFVuaWRhZEFuYWxpc2lzLCBtaUZvclBrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpejogRm9yUGspIHtcclxuICAgIHZhciB1YVBwYWwgPSBPYmplY3Qua2V5cyhlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKGtleSA9PiAhZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1trZXkgYXMgSWRVbmlkYWRBbmFsaXNpc10ucGFkcmUpIGFzIElkVW5pZGFkQW5hbGlzaXM7XHJcbiAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgcmVzcHVlc3Rhc1JhaXosIHVhUHBhbCwgZm9yUGtSYWl6KTtcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICBmb3JtdWxhcmlvczogeyBbbm9tYnJlRm9ybXVsYXJpbyBpbiBJZEZvcm11bGFyaW9dOiBJbmZvRm9ybXVsYXJpbyB9LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIFVBOiBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3Rhc0F1bWVudGFkYXM6IFJlc3B1ZXN0YXMsIC8vIGluY2x1eWVuIGxhIGRlIHRvZG9zIGxvcyBwYWRyZXMgeSBhbnNlc3Ryb3MsXHJcbiAgICByZXNwdWVzdGFzUGFkcmU6IFJlc3B1ZXN0YXMgfCBudWxsLFxyXG4gICAgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IsXHJcbikge1xyXG4gICAgLy8gcmVjb3JyaWVuZCBVQSBwZXJzb25hcyB5IG1hc2NvdGFzXHJcbiAgICBmb3IgKHZhciBVQWluY2x1aWRhIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaW5jbHVpZGFzKSB7XHJcbiAgICAgICAgdmFyIHBrTnVldmEgPSBkZWZPcGVyYXRpdm8uZGVmVUFbVUFpbmNsdWlkYV0ucGs7XHJcbiAgICAgICAgdmFyIGNvbmp1bnRvUmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1tVQWluY2x1aWRhXTtcclxuICAgICAgICBsaWtlQXIoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXNIaWpvLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKFxyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3IsXHJcbiAgICAgICAgICAgICAgICBmb3JtdWxhcmlvcyxcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNIaWpvLFxyXG4gICAgICAgICAgICAgICAgVUFpbmNsdWlkYSxcclxuICAgICAgICAgICAgICAgIHsgLi4uZm9yUGssIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgeyAuLi5yZXNwdWVzdGFzQXVtZW50YWRhcywgLi4ucmVzcHVlc3Rhc0hpam8sIFtwa051ZXZhXTogdmFsb3JQayB9LFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyxcclxuICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgLy8gUzEgLCBBMVxyXG4gICAgZm9yICh2YXIgZXNIZXJtYW5vIG9mIFt0cnVlLCBmYWxzZV0pIHtcclxuICAgICAgICBmb3IgKHZhciBmb3JtdWxhcmlvIG9mIGRlZk9wZXJhdGl2by5kZWZVQVtVQV0uaWRzRm9yKSBpZiAoISFlc0hlcm1hbm8gPT0gISFkZWZPcGVyYXRpdm8uZGVmRm9yW2Zvcm11bGFyaW9dLmhlcm1hbm8pIHtcclxuICAgICAgICAgICAgdmFyIHBsYWluRm9yUGs6IFBsYWluRm9yUGsgPSB0b1BsYWluRm9yUGsoeyAuLi5mb3JQaywgZm9ybXVsYXJpbyB9KVxyXG4gICAgICAgICAgICB2YXIgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcyA9IDEwO1xyXG4gICAgICAgICAgICB2YXIgdmFyQXV0b0luZ3Jlc2FkYXMgPSBbXTtcclxuICAgICAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGh1Ym9BdXRvaW5ncmVzb3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdID1cclxuICAgICAgICAgICAgICAgICAgICByb3dWYWxpZGF0b3IoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgbWFyY2FGaW46ICdmaW4nLCAuLi5mb3JtdWxhcmlvc1tmb3JtdWxhcmlvXS5lc3RydWN0dXJhUm93VmFsaWRhdG9yIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgdmFyIHsgcmVzdW1lbiwgYXV0b0luZ3Jlc2FkYXMgfSA9IGZlZWRiYWNrUm93VmFsaWRhdG9yW3BsYWluRm9yUGtdO1xyXG4gICAgICAgICAgICAgICAgdmFyIHZhck5hbWU6IElkVmFyaWFibGU7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXV0b0luZ3Jlc2FkYXMgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyTmFtZSBpbiBhdXRvSW5ncmVzYWRhcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY2FtYmlvID0gcmVzcHVlc3Rhc1t2YXJOYW1lXSAhPT0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW1iaW8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3Zhck5hbWVdID0gYXV0b0luZ3Jlc2FkYXNbdmFyTmFtZV0gYXMgVmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJBdXRvSW5ncmVzYWRhcy5wdXNoKHZhck5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHVib0F1dG9pbmdyZXNvcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKGh1Ym9BdXRvaW5ncmVzb3MgJiYgbWF4UGFzb3NBdXRvaW5ncmVzYWRhcy0tID4gMCk7XHJcbiAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLmZvckVhY2goX3Zhcm5hbWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10uZXN0YWRvc1tfdmFybmFtZSBhcyBJZFZhcmlhYmxlXSA9ICdhY3R1YWwnO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB2YXIgQkZfdmFybmFtZSA9ICckQi4nICsgZm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIHZhciBmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGEgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgICAgICAgICBpZiAoZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgIWVzdHJ1Y3R1cmEuY29uZmlnU29ydGVvW2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYV0pIHtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gaGF5IGNvbmZpZ3VyYWNpb24gZGUgc29ydGVvIHBhcmEgZWwgZm9ybXVsYXJpbyAke2Zvcm1QcmluY2lwYWxGb3JWaXZpZW5kYX1gKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZhciBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXTtcclxuICAgICAgICAgICAgdmFyIHJlc3VtZW5Pck51bGwgPVxyXG4gICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgJiZcclxuICAgICAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsID09IEJGX3Zhcm5hbWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICdvaydcclxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW4gPT0gJ3ZhY2lvJyA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgOiByZXN1bWVuXHJcbiAgICAgICAgICAgIGlmIChlc0hlcm1hbm8pIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsID09ICdvaycgPyAnb2snIDogbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwdWVzdGFzUGFkcmUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgLy9yZXNwdWVzdGFzUGFkcmVbQkZfdmFybmFtZV0gPSByZXN1bWVuT3JOdWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KG51bWJlck9yU3RyaW5nOiBudW1iZXIgfCBzdHJpbmcsIG9iamVjdDogb2JqZWN0IHwgYW55W10pOiAobnVtYmVyIHwgc3RyaW5nKSB7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGVzdG95IHVzYW5kbyBpc05hTiBwYXJhIHZlciBzaSBlcyBvIG5vIHVuIG7Dum1lcm8gc3VtYWJsZVxyXG4gICAgaWYgKGlzTmFOKG51bWJlck9yU3RyaW5nKSkge1xyXG4gICAgICAgIHJldHVybiBudW1iZXJPclN0cmluZztcclxuICAgIH1cclxuICAgIHJldHVybiBOdW1iZXIobnVtYmVyT3JTdHJpbmcpICsgKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5ID8gMSA6IDApO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldE1haW5Gb3JtRm9yVml2aWVuZGEgPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KTogSWRGb3JtdWxhcmlvID0+IHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkclt2YWx1ZVBrUmFpel0udGFyZWEubWFpbl9mb3JtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpIHtcclxuICAgIGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maWx0ZXIodWFEZWYgPT4gIXVhRGVmLnBhZHJlKS5mb3JFYWNoKHVhRGVmID0+IHtcclxuICAgICAgICB2YXIgZXNQcmluY2lwYWwgPSAoZjogRm9ybXVsYXJpbywgZW5jOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm11bGFyaW9QcmluY2lwYWwgPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKGVuYyk7XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtdWxhcmlvUHJpbmNpcGFsID8gZm9ybXVsYXJpb1ByaW5jaXBhbCA9PSBmLmlkX2Nhc2lsbGVybyA6IGYuZm9ybXVsYXJpb19wcmluY2lwYWxcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vYWPDoSBoYXkgcXVlIHNhbml0aXphciBwb3JxdWUgZXZpZGVudGVtZW50ZSBwdWVkZSB2ZW5pciBjb24gaGFzaHMgZGUgZW5jdWVzdGFzIHNpbiBpbmZvIGVsIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSBkYXRvc0J5UGFzcy5yZXNwdWVzdGFzW3VhRGVmLnVuaWRhZF9hbmFsaXNpc11cclxuICAgICAgICBiZWluZ0FycmF5KGNvbmp1bnRvUmVzcHVlc3Rhc1VBKS5mb3JFYWNoKChyZXNwdWVzdGFzLCB2YWxvclBrT1Bvc2ljaW9uKSA9PiB7XHJcbiAgICAgICAgICAgIHZhciB2YWxvclBrID0gbnVtYmVyT3JTdHJpbmdJbmNJZkFycmF5KHZhbG9yUGtPUG9zaWNpb24sIGNvbmp1bnRvUmVzcHVlc3Rhc1VBKTtcclxuICAgICAgICAgICAgbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWFEZWYudW5pZGFkX2FuYWxpc2lzICYmIGVzUHJpbmNpcGFsKGYuY2FzaWxsZXJvcywgdmFsb3JQayBhcyBudW1iZXIpKS5mb3JFYWNoKChfZGVmRiwgZm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvclBrUmFpeiA9IHsgZm9ybXVsYXJpbywgW3VhRGVmLnBrX2FncmVnYWRhXTogdmFsb3JQayB9IGFzIEZvclBrUmFpelxyXG4gICAgICAgICAgICAgICAgY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzLCBmb3JQa1JhaXosIHt9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICBmb3JQa1JhaXo6IEZvclBrUmFpeixcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvclxyXG4pIHtcclxuICAgIHZhciBmb3JQazogRm9yUGsgPSB7IC4uLmZvclBrUmFpeiB9O1xyXG4gICAgY2FsY3VsYXJGZWVkYmFja1VuaWRhZEFuYWxpc2lzKGZlZWRiYWNrUm93VmFsaWRhdG9yLCBmb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgZGVmT3BlcmF0aXZvLlVBcHJpbmNpcGFsLCBmb3JQaywgcmVzcHVlc3RhcywgbnVsbCwgb3B0cyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3RhczogUmVzcHVlc3RhcywgZm9yUGtSYWl6OiBGb3JQa1JhaXosIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yKSB7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIC8vIEB0cy1pZ25vcmUgUGFydGlhbFxyXG4gICAgdmFyIG51ZXZvc1Jvd3M6IHsgW3ggaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBJZEZpbj4gfSA9IHt9XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrRW5jdWVzdGEobnVldm9zUm93cywgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgZm9yUGtSYWl6LCByZXNwdWVzdGFzLCBvcHRzKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0gbGlrZUFyKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9mZWVkYmFjazogYW55LCBwbGFpblBrOiBQbGFpbkZvclBrKSA9PiBKU09OLnBhcnNlKHBsYWluUGspW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gIT0gZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pLnBsYWluKCk7XHJcbiAgICBkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciA9IHsgLi4uZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIC4uLm51ZXZvc1Jvd3MgfTtcclxuICAgIGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSA9IHtcclxuICAgICAgICAuLi5kYXRvc0J5UGFzcy5yZXNwdWVzdGFzW2VzdHJ1Y3R1cmEudWFQcGFsXVtmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXV0sXHJcbiAgICAgICAgLi4uY2FsY3VsYXJSZXN1bWVuVml2aWVuZGEoXHJcbiAgICAgICAgICAgIGZvclBrUmFpeixcclxuICAgICAgICAgICAgbnVldm9zUm93cyxcclxuICAgICAgICAgICAgcmVzcHVlc3Rhc1xyXG4gICAgICAgIClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyA9IChpZEZvcm11bGFyaW86IElkRm9ybXVsYXJpbyB8IHVuZGVmaW5lZCwgZm9ybXNGZWVkYmFjazogSWRGb3JtdWxhcmlvW10gPSBbXSkgPT4ge1xyXG4gICAgaWYgKGlkRm9ybXVsYXJpbykge1xyXG4gICAgICAgIGZvciAobGV0IGNhc2lsbGVybyBvZiBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2lkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy5jYXNpbGxlcm9zKSB7XHJcbiAgICAgICAgICAgIGlmIChjYXNpbGxlcm8udGlwb2MgPT0gJ0JGJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZvcm1IaWpvID0gKGNhc2lsbGVyby5zYWx0bz8uc3RhcnRzV2l0aCgnRjonKSA/IGNhc2lsbGVyby5zYWx0byA6ICdGOicgKyBjYXNpbGxlcm8uc2FsdG8pIGFzIElkRm9ybXVsYXJpbztcclxuICAgICAgICAgICAgICAgIGlmIChmb3JtSGlqbykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1zRmVlZGJhY2sucHVzaChmb3JtSGlqbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhmb3JtSGlqbywgZm9ybXNGZWVkYmFjayk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybXNGZWVkYmFjaztcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXRGb3JtdWxhcmlvc0ZvclZhbHVlUGtSYWl6ID0gKHZhbHVlUGtSYWl6OiBWYWx1ZVBrUmFpeikgPT4ge1xyXG4gICAgdmFyIG1haW5Gb3JtRm9yVmFsdWVQa1JhaXogPSBnZXRNYWluRm9ybUZvclZpdmllbmRhKHZhbHVlUGtSYWl6KTtcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gW21haW5Gb3JtRm9yVmFsdWVQa1JhaXpdO1xyXG4gICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhtYWluRm9ybUZvclZhbHVlUGtSYWl6LCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyQWN0dWFsQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBudW1FbGVtZW50b1VBOiBudW1iZXIsIG51bUFjdHVhbDogbnVtYmVyIHwgbnVsbCwgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLCByOiBSZXNwdWVzdGFzKSA9PlxyXG4gICAgISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpb1xyXG4gICAgICAgID9cclxuICAgICAgICBudW1FbGVtZW50b1VBID09IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICByW2NvbmZpZ1NvcnRlb0Zvcm11bGFyaW8ucmVzdWx0YWRvX21hbnVhbF0sXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgKVxyXG4gICAgICAgIDpcclxuICAgICAgICBudW1BY3R1YWwgPT0gbnVtRWxlbWVudG9VQVxyXG4gICAgKVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhckRpc2FibGVkQkYgPSAoXHJcbiAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW86IENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8gfCBudWxsLFxyXG4gICAgbnVtRWxlbWVudG9VQTogbnVtYmVyLFxyXG4gICAgZm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvLFxyXG4gICAgcjogUmVzcHVlc3Rhc1xyXG4pID0+IHtcclxuICAgIGlmIChoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dKSB7XHJcbiAgICAgICAgdmFyIGV4cHJfaGFiaWxpdGFyX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLmV4cHJfaGFiaWxpdGFyX2JvdG9uX2pzKTtcclxuICAgICAgICByZXR1cm4gIWV4cHJfaGFiaWxpdGFyX2Z1bihyW2hhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tmb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdW251bUVsZW1lbnRvVUEgLSAxXSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICEhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICAgICAgKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8gfHxcclxuICAgICAgICAgICAgICAgIGJ1c2NhckZvcm11bGFyaW9zSGlqb3MoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwpLmluY2x1ZGVzKGZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgICkgJiZcclxuICAgICAgICAgICAgbnVtRWxlbWVudG9VQSAhPSBjb2FsZXNjZShcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9dXHJcbiAgICAgICAgICAgICkpXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJQZXJtaXRlQm9ycmFyQkYgPSAoY29uZmlnU29ydGVvRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8pID0+XHJcbiAgICAhKGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvKVxyXG5cclxudHlwZSBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbyxcclxuICAgIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8sXHJcbiAgICBjb2RSZWE6IG51bWJlciB8IG51bGwsXHJcbiAgICBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCxcclxuICAgIGNvZFJlYVN1cDogbnVtYmVyIHwgbnVsbFxyXG4gICAgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwsXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHsgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzXHJcbik6IFJlc3VsdGFkb1Jlc3VtZW4ge1xyXG4gICAgdmFyIHsgY29kUmVhLCBlc1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYSwgZXNOb1JlYSB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZFJlYVN1cCwgZXNSZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc1JlYWxpemFkYVN1cChyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kTm9SZWFTdXAsIGVzTm9SZWFTdXAgfSA9IGRlZk9wZXJhdGl2by5lc05vUmVhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgZm9ybXNGZWVkYmFjayA9IGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXooZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0pO1xyXG4gICAgdmFyIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5jb25maWdTb3J0ZW8gJiYgZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSldXHJcbiAgICB2YXIgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvID0gZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW87XHJcbiAgICB2YXIgZmVlZEJhY2tWaXZpZW5kYSA9IGxpa2VBcihmZWVkYmFja1Jvd1ZhbGlkYXRvcikuZmlsdGVyKChfcm93LCBwbGFpblBrKSA9PiB7XHJcbiAgICAgICAgdmFyIHRpZW5lSW5kaXZpZHVhbCA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvICYmICEhKGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCAmJiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlKVxyXG4gICAgICAgIHZhciB0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUgPSBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gJiYgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dO1xyXG4gICAgICAgIHZhciBwa0FncmVnYWRhID0gbnVsbDtcclxuICAgICAgICBpZiAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHBrQWdyZWdhZGEgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCgodWEsIF9pZFVBKSA9PlxyXG4gICAgICAgICAgICAgICAgdWEudW5pZGFkX2FuYWxpc2lzID09IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpb1tKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8gYXMgSWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXMpPy5wa19hZ3JlZ2FkYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSA9PSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAmJlxyXG4gICAgICAgICAgICBmb3Jtc0ZlZWRiYWNrLmluY2x1ZGVzKEpTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbykgJiZcclxuICAgICAgICAgICAgKHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA/XHJcbiAgICAgICAgICAgICAgICAhY2FsY3VsYXJEaXNhYmxlZEJGKFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspW3BrQWdyZWdhZGEgYXMgQ2FtcG9Qa10sXHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayhKU09OLnBhcnNlKHBsYWluUGspLCB0cnVlKS5yZXNwdWVzdGFzQXVtZW50YWRhc1xyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgOiB0aWVuZUluZGl2aWR1YWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykucGVyc29uYSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlc3RydWN0dXJhLmNvblJlYUhvZ2FyID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaykuaG9nYXIgPyByZXNwdWVzdGFzRm9yUGsoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtdWxhcmlvOiBjb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX3BhZHJlISxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob2dhcjogSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3RhcyA6IHt9IGFzIFJlc3B1ZXN0YXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBhcyBGb3JQaykucmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICA6IHRydWUpXHJcbiAgICB9KS5hcnJheSgpO1xyXG4gICAgdmFyIHByaW9yaWRhZGVzOiB7IFtrZXkgaW4gUmVzdW1lbkVzdGFkb106IHsgcHJpb3JpZGFkOiBudW1iZXIsIGNhbnRpZGFkOiBudW1iZXIgfSB9ID0ge1xyXG4gICAgICAgICdubyByZWEnOiB7IHByaW9yaWRhZDogMSwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY29uIHByb2JsZW1hcyc6IHsgcHJpb3JpZGFkOiAyLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdpbmNvbXBsZXRvJzogeyBwcmlvcmlkYWQ6IDMsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ3ZhY2lvJzogeyBwcmlvcmlkYWQ6IDQsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2NpdGEgcGFjdGFkYSc6IHsgcHJpb3JpZGFkOiA1LCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdvayc6IHsgcHJpb3JpZGFkOiA2LCBjYW50aWRhZDogMCB9XHJcbiAgICB9XHJcbiAgICB2YXIgbWluID0gNjtcclxuICAgIHZhciBtaW5SZXN1bWVuOiBSZXN1bWVuRXN0YWRvID0gJ29rJztcclxuICAgIGZvciAodmFyIGZlZWRiYWNrIG9mIGZlZWRCYWNrVml2aWVuZGEpIHtcclxuICAgICAgICB2YXIgcmVzdW1lbiA9IGZlZWRiYWNrLnJlc3VtZW47XHJcbiAgICAgICAgcHJpb3JpZGFkZXNbcmVzdW1lbl0uY2FudGlkYWQrKztcclxuICAgICAgICBpZiAocHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkIDwgbWluKSB7XHJcbiAgICAgICAgICAgIG1pbiA9IHByaW9yaWRhZGVzW3Jlc3VtZW5dLnByaW9yaWRhZDtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9IHJlc3VtZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKG1pblJlc3VtZW4gPT0gJ3ZhY2lvJyAmJiBwcmlvcmlkYWRlc1snb2snXS5jYW50aWRhZCB8fCBtaW5SZXN1bWVuID09ICdpbmNvbXBsZXRvJykge1xyXG4gICAgICAgIGlmIChmYWxzZSAvKnJlc3B1ZXN0YXNbc3AxXT09MiAmJiByZXNwdWVzdGFzW3NwNl09PW51bGwqLykge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2NpdGEgcGFjdGFkYSc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWluUmVzdW1lbiA9ICdpbmNvbXBsZXRvJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy9UT0RPIEFSUkVHTEFSIEVTVEUgSE9SUk9SLCBHRU5FUkFMSVpBUlxyXG4gICAgdmFyIHRhcmVhID0gZGF0b3NCeVBhc3MuaW5mb3JtYWNpb25IZHJbZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0gYXMgdW5rbm93biBhcyBJZEVuY10udGFyZWEudGFyZWE7XHJcbiAgICB2YXIgcmVzdW1lbkVzdGFkbzogUmVzdW1lbkVzdGFkbztcclxuICAgIHZhciByZXN1bWVuRXN0YWRvU3VwOiBSZXN1bWVuRXN0YWRvID0gJ3ZhY2lvJztcclxuICAgIGlmICh0YXJlYSA9PSAnc3VwZScpIHtcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwID0gZXNOb1JlYVN1cCA/ICdubyByZWEnIDogbWluUmVzdW1lblxyXG4gICAgICAgIC8vcGFyYSBxdWUgY29sb3JlZSBiaWVuIGVuIGxhIGhkciBkZWwgRE0gKGx1ZWdvIGVuIGJiZGQgbm8gc2UgZ3VhcmRhKVxyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSByZXN1bWVuRXN0YWRvU3VwXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8gPSBlc05vUmVhID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICB9XHJcbiAgICB2YXIgcmVzdWx0YWRvOiBSZXN1bHRhZG9SZXN1bWVuID0ge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG8sXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkb1N1cCxcclxuICAgICAgICBjb2RSZWEsXHJcbiAgICAgICAgY29kTm9SZWEsXHJcbiAgICAgICAgY29kUmVhU3VwLFxyXG4gICAgICAgIGNvZE5vUmVhU3VwXHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0YWRvXHJcbn1cclxuIl19
|
|
1240
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnlwYXNzLWZvcm11bGFyaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdW5sb2dnZWQvYnlwYXNzLWZvcm11bGFyaW8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBc0NBLG9EQUVDO0lBV0QsMERBWUM7SUFFRCw4REFLQztJQUVELDBEQXFCQztJQU1ELG9EQUVDO0lBRUQsNEZBRUM7SUFzQ0QsMERBRUM7SUFFRCxvREFJQztJQXNCRCw0Q0FJQztJQWdCRCxzQ0FVQztJQUVELHdDQVVDO0lBV0QsMERBS0M7SUFFRCw0QkFFQztJQUVELHNDQUVDO0lBa0NELDhDQUlDO0lBTUQsMENBaURDO0lBRUQsZ0ZBdUNDO0lBRUQsNERBb0VDO0lBRUQsMENBUUM7SUFFRCw0Q0FRQztJQWtCRCxnREFDQztJQWdGRCxnRUFpQ0M7SUFPRCxrRUF1QkM7SUFFRCxzREFHQztJQUVELHNEQUVDO0lBRUQsMERBRUM7SUFFRCxvREFFQztJQUVELDhEQU9DO0lBRUQsMERBT0M7SUFFRCw0REFnQkM7SUFHRCx3Q0FLQztJQW9KRCxrREFnQkM7SUFFRCxrREEwQkM7SUFzSEQsMENBa0lDO0lBaUNELHNEQUlDO0lBRUQsd0VBZ0ZDO0lBRUQsNERBTUM7SUFNRCxnRUFpQkM7SUFFRCw0REFTQztJQXlGRCwwREFnR0M7SUFoOENELHFDQUF1RDtJQUV2RCxpREFBb0c7SUFFcEcsK0NBQStEO0lBQy9ELDJDQUFzQztJQUV0QyxtQ0FzQmlCO0lBRWpCLG1EQUFrRDtJQUNsRCx5REFBdUQ7SUFFdkQsSUFBSSxTQUFTLEdBQUcsRUFFZixDQUFBO0lBRUQsU0FBZ0Isb0JBQW9CLENBQUMsaUJBQXlDO1FBQzFFLFNBQVMsQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtJQUNuRCxDQUFDO0lBU0QsSUFBSSwyQkFBMkIsR0FBZ0MsRUFBRSxDQUFDO0lBRWxFLFNBQWdCLHVCQUF1QixDQUFDLFFBQWdDLEVBQUUsU0FB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LENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBcUIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDL0csSUFBSSxhQUE0QixDQUFDO1FBQ2pDLElBQUksZ0JBQWdCLEdBQWtCLE9BQU8sQ0FBQztRQUM5QyxJQUFJLEtBQUssSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNsQixnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFBO1lBQ3JELHFFQUFxRTtZQUNyRSxhQUFhLEdBQUcsZ0JBQWdCLENBQUE7UUFDcEMsQ0FBQzthQUFNLENBQUM7WUFDSixhQUFhLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQTtRQUNuRCxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQXFCO1lBQzlCLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsTUFBTTtZQUNOLFFBQVE7WUFDUixTQUFTO1lBQ1QsV0FBVztTQUNkLENBQUE7UUFDRCxPQUFPLFNBQVMsQ0FBQTtJQUNwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc3RyaWN0IGFzIGxpa2VBciwgYmVpbmdBcnJheSB9IGZyb20gXCJsaWtlLWFyXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRSb3dWYWxpZGF0b3IsIEZvcm1TdHJ1Y3R1cmVTdGF0ZSwgT3BjaW9uZXNSb3dWYWxpZGF0b3IsIEZlZWRiYWNrIH0gZnJvbSBcInJvdy12YWxpZGF0b3JcIjtcclxuXHJcbmltcG9ydCB7IGRhdGUsIGNvbXBhcmVGb3JPcmRlciwgY29hbGVzY2UgfSBmcm9tIFwiYmVzdC1nbG9iYWxzXCI7XHJcbmltcG9ydCB7IGV4cGVjdGVkIH0gZnJvbSBcImNhc3QtZXJyb3JcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgICBFc3RydWN0dXJhLFxyXG4gICAgRm9yUGssIEZvclBrUmFpeixcclxuICAgIElkRmluLCBJZEZvcm11bGFyaW8sIElkUHJlZ3VudGEsIElkVGFyZWEsIElkVmFyaWFibGUsXHJcbiAgICBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgSW5mb0Zvcm11bGFyaW8sXHJcbiAgICBQbGFpbkZvclBrLCBSZXNwdWVzdGFzLCBSZXNwdWVzdGFzUmFpeiwgUmVzdW1lbkVzdGFkbyxcclxuICAgIFZhbG9yLCBWaXNpdGEsXHJcbiAgICB0b1BsYWluRm9yUGssXHJcbiAgICBVbmlkYWRBbmFsaXNpcyxcclxuICAgIEZvcm11bGFyaW8sXHJcbiAgICBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyxcclxuICAgIERhdG9zQnlQYXNzUGVyc2lzdGlibGVzLFxyXG4gICAgSWRFbmMsXHJcbiAgICBEZWZPcGVyYXRpdm8sXHJcbiAgICBpdGVyYXRvcixcclxuICAgIENvbmZpZ3VyYWNpb25IYWJpbGl0YXJCb3RvbkZvcm11bGFyaW8sXHJcbiAgICBDYW1wb1BrLFxyXG4gICAgSWRDYXJnYSxcclxuICAgIENhcmdhLFxyXG4gICAgQ2FtcG9Qa1JhaXosXHJcbiAgICBWYWx1ZVBrUmFpelxyXG59IGZyb20gXCIuL3RpcG9zXCI7XHJcblxyXG5pbXBvcnQgeyBnZXRGb3JtUmVuZGVyZXIgfSBmcm9tIFwiLi9yZW5kZXItY29uZmlnXCI7XHJcbmltcG9ydCB7IGFkYXB0YXJFc3RydWN0dXJhIH0gZnJvbSBcIi4vcmVkdXgtZm9ybXVsYXJpb1wiO1xyXG5cclxudmFyIGNvbW9kaW5lcyA9IHt9IGFzIHtcclxuICAgIGNhbGN1bGFyQ29tb2RpbmVzPzogKGZvclBrOiBGb3JQaykgPT4gdm9pZFxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJDb21vZGluZXMoY2FsY3VsYXJDb21vZGluZXM6IChmb3JQazogRm9yUGspID0+IHZvaWQpIHtcclxuICAgIGNvbW9kaW5lcy5jYWxjdWxhckNvbW9kaW5lcyA9IGNhbGN1bGFyQ29tb2RpbmVzXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIExpc3RlbmVyQ2FtYmlvVmFyaWFibGUgPSAodmFyaWFibGU6IHN0cmluZywgdmFsb3I6IGFueSwgZm9yUGs/OiBGb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzKSA9PiB2b2lkO1xyXG5cclxudHlwZSBTdXNjcmlwY2lvbkNhbWJpb1ZhcmlhYmxlID0ge1xyXG4gICAgbGlzdGVuZXI6IExpc3RlbmVyQ2FtYmlvVmFyaWFibGU7XHJcbiAgICB2YXJpYWJsZXM/OiBTZXQ8c3RyaW5nPjtcclxufTtcclxuXHJcbnZhciBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGU6IFN1c2NyaXBjaW9uQ2FtYmlvVmFyaWFibGVbXSA9IFtdO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlLCB2YXJpYWJsZXM/OiBzdHJpbmcgfCBzdHJpbmdbXSk6ICgpID0+IHZvaWQge1xyXG4gICAgY29uc3QgdmFyc1NldCA9IHZhcmlhYmxlc1xyXG4gICAgICAgID8gbmV3IFNldChBcnJheS5pc0FycmF5KHZhcmlhYmxlcykgPyB2YXJpYWJsZXMgOiBbdmFyaWFibGVzXSlcclxuICAgICAgICA6IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IHN1YjogU3VzY3JpcGNpb25DYW1iaW9WYXJpYWJsZSA9IHsgbGlzdGVuZXIsIHZhcmlhYmxlczogdmFyc1NldCB9O1xyXG4gICAgc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlLnB1c2goc3ViKTtcclxuICAgIHJldHVybiAoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBzdXNjcmlwY2lvbmVzQ2FtYmlvVmFyaWFibGUuaW5kZXhPZihzdWIpO1xyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZXN1c2NyaWJpckNhbWJpb1ZhcmlhYmxlKGxpc3RlbmVyOiBMaXN0ZW5lckNhbWJpb1ZhcmlhYmxlKSB7XHJcbiAgICBjb25zdCBpbmRleCA9IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5maW5kSW5kZXgocyA9PiBzLmxpc3RlbmVyID09PSBsaXN0ZW5lcik7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbm90aWZpY2FyQ2FtYmlvVmFyaWFibGUodmFyaWFibGU6IHN0cmluZywgdmFsb3I6IGFueSwgZm9yUGs/OiBGb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXM/OiBSZXNwdWVzdGFzKSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1c2NyaXBjaW9uZXNDYW1iaW9WYXJpYWJsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IHsgbGlzdGVuZXIsIHZhcmlhYmxlcyB9ID0gc3VzY3JpcGNpb25lc0NhbWJpb1ZhcmlhYmxlW2ldO1xyXG4gICAgICAgIGlmICh2YXJpYWJsZXMpIHtcclxuICAgICAgICAgICAgbGV0IGFwbGljYSA9IHZhcmlhYmxlcy5oYXModmFyaWFibGUpO1xyXG4gICAgICAgICAgICBpZiAoIWFwbGljYSAmJiByZXNwdWVzdGFzQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2IG9mIHZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2IGluIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwbGljYSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWFwbGljYSkgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVyKHZhcmlhYmxlLCB2YWxvciwgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzKTtcclxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZW4gbGlzdGVuZXIgZGUgY2FtYmlvIGRlIHZhcmlhYmxlJywgZXJyKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbnZhciBlc3BlY2lhbGVzID0ge30gYXMge1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXM/OiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWRcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm8/OiAocmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQazogRm9yUGspID0+IHZvaWRcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2V0Q2FsY3VsYXJWYXJpYWJsZXMoY2FsY3VsYXJWYXJpYWJsZXM6IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZCkge1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyA9IGNhbGN1bGFyVmFyaWFibGVzXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRDYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKGNhbGN1bGFyVmFyaWFibGVzRXNwZWNpZmljYXNPcGVyYXRpdm86IChyZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXosIGZvclBrOiBGb3JQaykgPT4gdm9pZCkge1xyXG4gICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvID0gY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2b1xyXG59XHJcblxyXG50eXBlIERhdG9zQnlQYXNzID0gRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMgJiB7XHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyAgLy8gbm8gc2UgcGVyc2lzdGVcclxuICAgICAgICBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gLy8gcmVzdWx0YWRvIGRlbCByb3dWYWxpZGF0b3IgcGFyYSBlc3RhZG8uZm9yUGtcclxuICAgIH1cclxuICAgIGRpcnR5OiBib29sZWFuXHJcbn07XHJcblxyXG52YXIgZGF0b3NCeVBhc3MgPSB7fSBhcyBEYXRvc0J5UGFzc1xyXG5cclxuZXhwb3J0IGNvbnN0IGhheURhdG9zQnlQYXNzQWxtYWNlbmFkb3MgPSAoKSA9PiBkYXRvc0J5UGFzcyAmJiBPYmplY3Qua2V5cyhkYXRvc0J5UGFzcykubGVuZ3RoID4gMFxyXG5cclxuaW50ZXJmYWNlIFJlY3Qge1xyXG4gICAgdG9wOiBudW1iZXI7XHJcbiAgICBsZWZ0OiBudW1iZXI7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFJlY3QoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBSZWN0IHtcclxuICAgIHZhciByZWN0OiBSZWN0ID0geyB0b3A6IDAsIGxlZnQ6IDAsIHdpZHRoOiBlbGVtZW50Lm9mZnNldFdpZHRoLCBoZWlnaHQ6IGVsZW1lbnQub2Zmc2V0SGVpZ2h0IH07XHJcbiAgICB2YXIgY3VycmVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gZWxlbWVudDtcclxuICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHtcclxuICAgICAgICByZWN0LnRvcCArPSBjdXJyZW50Lm9mZnNldFRvcDtcclxuICAgICAgICByZWN0LmxlZnQgKz0gY3VycmVudC5vZmZzZXRMZWZ0O1xyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm9mZnNldFBhcmVudCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVjdDtcclxufVxyXG5cclxuLy9AdHMtaWdub3JlIGFycmFuY2EgZW4gYmxhbmNvXHJcbnZhciBlc3RydWN0dXJhOiBFc3RydWN0dXJhID0gbnVsbCBhcyBFc3RydWN0dXJhO1xyXG5cclxubGV0IHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubzogKGRicHA6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzKSA9PiBQcm9taXNlPGFueT4gPSAoKSA9PiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3BlcnNpc3RpckRhdG9zQnlQYXNzIFNJTiBERUZJTklSJylcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldFBlcnNpc3RpckRhdG9zQnlQYXNzKHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuOiB0eXBlb2YgcGVyc2lzdGlyRGF0b3NCeVBhc3MpIHtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzSW50ZXJubyA9IHBlcnNpc3RpckRhdG9zQnlQYXNzRnVuO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGJwcDogRGF0b3NCeVBhc3NQZXJzaXN0aWJsZXMpIHtcclxuICAgIGF3YWl0IGdldEZvcm1SZW5kZXJlcigpLnBlcnNpc3RpckRhdG9zKGRicHApO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBmYWxzZVxyXG4gICAgcmVmcmVzY2FyTWFyY2FEaXJ0eSgpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXJFbmN1ZXN0YSA9IChpZENhcmdhOiBJZENhcmdhLCBjYWxsQmFjazogKGZvclBrUmFpejogRm9yUGtSYWl6KSA9PiB2b2lkKSA9PiB7XHJcbiAgICBjb25zdCBORVhUX0FVVE9fVkFMVUVfUEtfUkFJWiA9IGdldEZvcm1SZW5kZXJlcigpLmdldFVsdGltb1ZhbG9yUGtSYWl6KCkgfHwgJy0xJztcclxuICAgIGNvbnN0IGVzdHJ1Y3R1cmEgPSBnZXRFc3RydWN0dXJhKCk7XHJcbiAgICBnZXRGb3JtUmVuZGVyZXIoKS5zZXRVbHRpbW9WYWxvclBrUmFpeigoTnVtYmVyKE5FWFRfQVVUT19WQUxVRV9QS19SQUlaKSAtIDEpLnRvU3RyaW5nKCkpO1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVogYXMgdW5rbm93biBhcyBJZEVuY10gPSB7fSBhcyBSZXNwdWVzdGFzUmFpejtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdID0ge1xyXG4gICAgICAgIC4uLmVzdHJ1Y3R1cmEuZGVmYXVsdEluZm9ybWFjaW9uSGRyLFxyXG4gICAgICAgIHRlbTogeyAuLi5lc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50ZW0gfVxyXG4gICAgfTtcclxuICAgIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW05FWFRfQVVUT19WQUxVRV9QS19SQUlaIGFzIHVua25vd24gYXMgSWRFbmNdLnRlbS5jYXJnYSA9IGlkQ2FyZ2E7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrSG9qYURlUnV0YSgpO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpLnRoZW4oXHJcbiAgICAgICAgKCkgPT4gY2FsbEJhY2soe1xyXG4gICAgICAgICAgICBmb3JtdWxhcmlvOiBlc3RydWN0dXJhLmRlZmF1bHRJbmZvcm1hY2lvbkhkci50YXJlYS5tYWluX2Zvcm0sXHJcbiAgICAgICAgICAgIFtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdOiBOdW1iZXIoTkVYVF9BVVRPX1ZBTFVFX1BLX1JBSVopIGFzIFZhbHVlUGtSYWl6XHJcbiAgICAgICAgfSBhcyBGb3JQa1JhaXopXHJcbiAgICApLy9ubyBxdWl0YXIgZWwgY2FzdGVvIHBvcnF1ZSB2aWVuZSBjb21vIHRleHRvIHkgbmVjZXNpdG8gcXVlIHNlYSBuw7ptZXJvXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RW5jb2xhckJhY2t1cChcclxuICAgIGVuY29sYXJCYWNrdXBGdW46ICh0b2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXMpID0+IHZvaWRcclxuKSB7XHJcbiAgICBlbmNvbGFyQmFja3VwID0gZW5jb2xhckJhY2t1cEZ1blxyXG59XHJcblxyXG5sZXQgZW5jb2xhckJhY2t1cDogKHRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQsIGZvclBrUmFpejogRm9yUGtSYWl6LCByZXNwdWVzdGFzUmFpejogUmVzcHVlc3RhcykgPT4gdm9pZCA9ICgpID0+IHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIlNJTiBFU1BFQ0lGSUNBUiBlbmNvbGFyQmFja3VwXCIpXHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgaW50ZW50YXJCYWNrdXAgPSAoZm9yUGs6IEZvclBrKSA9PiB7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpXHJcbiAgICB2YXIgdG9rZW4gPSBkYXRvc0J5UGFzcy50b2tlbjtcclxuICAgIGlmICh0b2tlbikge1xyXG4gICAgICAgIGVuY29sYXJCYWNrdXAodG9rZW4sIGZvclBrUmFpeiwgcmVzcHVlc3Rhc1JhaXopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIm5vIGhheSB0b2tlbiwgbm8gc2UgcHVkbyBoYWNlciBlbCBiYWNrdXBcIilcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHNldEVzdHJ1Y3R1cmEoZXN0cnVjdHVyYUFDYXJnYXI6IEVzdHJ1Y3R1cmEpIHtcclxuICAgIGVzdHJ1Y3R1cmEgPSBhZGFwdGFyRXN0cnVjdHVyYShlc3RydWN0dXJhQUNhcmdhcik7XHJcbiAgICBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwgPSBsaWtlQXIoZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpcykuZmluZCh1YSA9PiAhIXVhLnByaW5jaXBhbCk/LnVuaWRhZF9hbmFsaXNpcyFcclxuICAgIGRlZk9wZXJhdGl2by5kZWZGb3IgPSBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykubWFwKGYgPT4gKHsgaGVybWFubzogZi5jYXNpbGxlcm9zLmhlcm1hbm8gfSkpLnBsYWluKClcclxuICAgIGRlZk9wZXJhdGl2by5kZWZVQSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5tYXAoKHVhRGVmLCB1YSkgPT4gKHtcclxuICAgICAgICBwazogdWFEZWYucGtfYWdyZWdhZGEgYXMgSWRWYXJpYWJsZSxcclxuICAgICAgICBpbmNsdWlkYXM6IGxpa2VBcih1YURlZi5oaWphcykua2V5cygpLFxyXG4gICAgICAgIGlkc0ZvcjogbGlrZUFyKGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MpLmZpbHRlcihmID0+IGYuY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT0gdWEpLmtleXMoKVxyXG4gICAgfSkpLnBsYWluKClcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0RGF0b3NCeVBhc3MoXHJcbiAgICBudWV2b1BhcXVldGU6IERhdG9zQnlQYXNzUGVyc2lzdGlibGVzICYgeyBkaXJ0eT86IGJvb2xlYW4gfVxyXG4pIHtcclxuICAgIGRhdG9zQnlQYXNzID0ge1xyXG4gICAgICAgIGRpcnR5OiBmYWxzZSxcclxuICAgICAgICAuLi5udWV2b1BhcXVldGUsXHJcbiAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3I6IHt9IGFzIERhdG9zQnlQYXNzW1wiZmVlZGJhY2tSb3dWYWxpZGF0b3JcIl1cclxuICAgIH07XHJcblxyXG4gICAgY2FsY3VsYXJGZWVkYmFja0hvamFEZVJ1dGEoKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBnZXREYXRvc0J5UGFzcyA9ICgpID0+IGRhdG9zQnlQYXNzXHJcblxyXG5mdW5jdGlvbiBvYmpldG9WYWNpbyhvOiBvYmplY3QpIHtcclxuICAgIGZvciAodmFyIGsgaW4gbykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVlZGJhY2tSb3dWYWxpZGF0b3IoKSB7XHJcbiAgICBpZiAoIWRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yIHx8IG9iamV0b1ZhY2lvKGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yKSkge1xyXG4gICAgICAgIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3I7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREaXJ0eSgpIHtcclxuICAgIHJldHVybiBkYXRvc0J5UGFzcy5kaXJ0eVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXN0cnVjdHVyYSgpIHtcclxuICAgIHJldHVybiBlc3RydWN0dXJhO1xyXG59XHJcblxyXG50eXBlIEVsZW1lbnRvc1JlZ2lzdHJhYmxlcyA9IEhUTUxEaXZFbGVtZW50IHwgSFRNTEJ1dHRvbkVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxudHlwZSBEaXJlY3RGdW5jdGlvbjxULCBSZXN1bHQ+ID0gKHJlc3B1ZXN0YXNBdW1lbnRhZGFzOiBSZXNwdWVzdGFzLCBmZWVkYmFja0Zvcm06IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+LCBlbGVtZW50bzogVCxcclxuICAgIGZlZWRiYWNrQWxsOiB7XHJcbiAgICAgICAgW2Zvcm11bGFyaW8gaW4gUGxhaW5Gb3JQa106IEZvcm1TdHJ1Y3R1cmVTdGF0ZTxJZFZhcmlhYmxlLCBWYWxvciwgSWRGaW4+IC8vIHJlc3VsdGFkbyBkZWwgcm93VmFsaWRhdG9yIHBhcmEgZXN0YWRvLmZvclBrXHJcbiAgICB9LFxyXG4gICAgZXN0cnVjdHVyYTogRXN0cnVjdHVyYVxyXG4pID0+IFJlc3VsdFxyXG5cclxudHlwZSBSZWdpc3Ryb0VsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0ge1xyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgYW55PixcclxuICAgIHZhcmlhYmxlPzogSWRWYXJpYWJsZSxcclxuICAgIGZvclBrPzogRm9yUGssXHJcbn0gJiAoe1xyXG4gICAgcHJvcDoga2V5b2YgVFxyXG4gICAgZnVuOiBEaXJlY3RGdW5jdGlvbjxULCBUW2tleW9mIFRdPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGxhIHByb3AoZXJ0eSkgZGVsIGVsZW1lbnRvXHJcbn0gfCB7XHJcbiAgICBhdHRyOiBzdHJpbmdcclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBhdHRyKGlidXRvKVxyXG59IHwge1xyXG4gICAgc3R5bGU6IGtleW9mIENTU1N0eWxlRGVjbGFyYXRpb25cclxuICAgIGZ1bjogRGlyZWN0RnVuY3Rpb248VCwgc3RyaW5nPiAvLyBMbyBxdWUgcmV0b3JuYSBsYSBmdW4oY2nDs24pIHNlIHVzYSBwYXJhIGVsIHZhbG9yIGRlbCBzdHlsZVxyXG59IHwge1xyXG4gICAgZGlyZWN0OiB0cnVlXHJcbiAgICBmdW46IERpcmVjdEZ1bmN0aW9uPFQsIHZvaWQ+IC8vIExhIGZ1bmNpw7NuIHZhIGEgdG9jYXIgZGlyZWN0YW1lbnRlIGVsIGVsZW1lbnRvIHkgaGFjZXIgdG9kbyBsbyBxdWUgdGVuZ2EgcXVlIGhhY2VyXHJcbn0pXHJcblxyXG50eXBlIFJlZ2lzdHJvRWxlbWVudG9zPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+ID0geyBbaWQ6IHN0cmluZ106IFJlZ2lzdHJvRWxlbWVudG88VD4gJiB7IGVsZW1lbnRvPzogVCB9IH07XHJcblxyXG52YXIgcmVnaXN0cm9FbGVtZW50b3NHbG9iYWwgPSB7fSBhcyBSZWdpc3Ryb0VsZW1lbnRvczxFbGVtZW50b3NSZWdpc3RyYWJsZXM+O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdHJhckVsZW1lbnRvPFQgZXh0ZW5kcyBFbGVtZW50b3NSZWdpc3RyYWJsZXM+KGRlZjogUmVnaXN0cm9FbGVtZW50bzxUPikge1xyXG4gICAgLy8gQHRzLWlnbm9yZSBTw60sIHBvZHLDrWEgc2VyIHF1ZSBsb3MgdGlwb3MgZGUgVCBzZWFuIGRpc3RpbnRvcywgcGVybyB2YW4gYSBzZXIgY29oZXJlbnRlc1xyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zOiBSZWdpc3Ryb0VsZW1lbnRvczxUPiA9IHJlZ2lzdHJvRWxlbWVudG9zR2xvYmFsO1xyXG4gICAgcmVnaXN0cm9FbGVtZW50b3NbZGVmLmlkXSA9IGRlZjtcclxufVxyXG5cclxudHlwZSBSZXNwdWVzdGFzRm9yUGtDb211biA9IHsgcmVzcHVlc3RhczogUmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgdW5pZGFkQW5hbGlzaXM6IFVuaWRhZEFuYWxpc2lzIH1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlc3B1ZXN0YXNGb3JQayhmb3JQazogRm9yUGssIGNvbkF1bWVudGFkYXM6IHRydWUsIGFncmVnYXJTaUZhbHRhPzogYm9vbGVhbik6IFJlc3B1ZXN0YXNGb3JQa0NvbXVuICYgeyByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcyB9XHJcbmV4cG9ydCBmdW5jdGlvbiByZXNwdWVzdGFzRm9yUGsoZm9yUGs6IEZvclBrLCBjb25BdW1lbnRhZGFzPzogYm9vbGVhbiwgYWdyZWdhclNpRmFsdGE/OiBib29sZWFuKTogUmVzcHVlc3Rhc0ZvclBrQ29tdW4gJiB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzPzogUmVzcHVlc3RhcyB9IHtcclxuICAgIHZhciByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHt9IGFzIFJlc3B1ZXN0YXM7XHJcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGxvIHF1ZSBzb2JyYXIgZGUgcmVzcHVlc3RhcyBubyBtZSBpbXBvcnRhLi4uXHJcbiAgICB2YXIgcmVzcHVlc3RhcyA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXMgYXMgUmVzcHVlc3RhcztcclxuICAgIHZhciByZXNwdWVzdGFzUmFpejogUmVzcHVlc3Rhc1JhaXo7XHJcbiAgICB2YXIgZm9yUGtSYWl6OiBGb3JQaztcclxuICAgIHZhciB1bmlkYWRfYW5hbGlzaXM6IElkVW5pZGFkQW5hbGlzaXMgfCB1bmRlZmluZWQgPSBlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmNhc2lsbGVyb3MudW5pZGFkX2FuYWxpc2lzXHJcbiAgICB2YXIgZm9yUGtBcGlsYWRhID0gZm9yUGs7XHJcbiAgICB2YXIgcGlsYTogW3VuaWRhZF9hbmFsaXNpczogSWRVbmlkYWRBbmFsaXNpcywgdWFEZWY6IFVuaWRhZEFuYWxpc2lzLCBmb3JQazogRm9yUGtdW10gPSBbXTtcclxuICAgIHdoaWxlICh1bmlkYWRfYW5hbGlzaXMpIHtcclxuICAgICAgICB2YXIgdWFEZWY6IFVuaWRhZEFuYWxpc2lzID0gZXN0cnVjdHVyYS51bmlkYWRlc19hbmFsaXNpc1t1bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgIHBpbGEucHVzaChbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSk7XHJcbiAgICAgICAgZm9yUGtBcGlsYWRhID0geyAuLi5mb3JQa0FwaWxhZGEgfTtcclxuICAgICAgICBkZWxldGUgZm9yUGtBcGlsYWRhW3VhRGVmLnBrX2FncmVnYWRhXVxyXG4gICAgICAgIHVuaWRhZF9hbmFsaXNpcyA9IHVhRGVmLnBhZHJlXHJcbiAgICB9XHJcbiAgICB3aGlsZSAocGlsYS5sZW5ndGgpIHtcclxuICAgICAgICBbdW5pZGFkX2FuYWxpc2lzLCB1YURlZiwgZm9yUGtBcGlsYWRhXSA9IHBpbGEucG9wKCkhXHJcbiAgICAgICAgdmFyIHZhbG9yUGtPUG9zaWNpb24gPSBmb3JQa0FwaWxhZGFbdWFEZWYucGtfYWdyZWdhZGFdO1xyXG4gICAgICAgIGlmICh2YWxvclBrT1Bvc2ljaW9uID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGZhbHRhIHVuIHZhbG9yIHBhcmEgJHtKU09OLnN0cmluZ2lmeSh1YURlZi5wa19hZ3JlZ2FkYSl9YClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbdW5pZGFkX2FuYWxpc2lzXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgcmVzcHVlc3Rhc0FudGVyaW9yID0gcmVzcHVlc3RhcztcclxuICAgICAgICBsZXQgcG9zaWNpb24gPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSA/IHZhbG9yUGtPUG9zaWNpb24gLSAxIDogdmFsb3JQa09Qb3NpY2lvblxyXG4gICAgICAgIHJlc3B1ZXN0YXMgPSByZXNwdWVzdGFzW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dO1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzID09IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGFncmVnYXJTaUZhbHRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0ge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0FudGVyaW9yW3VuaWRhZF9hbmFsaXNpc11bcG9zaWNpb25dID0gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBleGlzdGUgZWwgZWxlbWVudG8gJyR7cG9zaWNpb259JyBlbiBsYSB1bmlkYWRfYW5hbGlzaXMgJyR7dW5pZGFkX2FuYWxpc2lzfSdgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JQa1JhaXogfHw9IGZvclBrQXBpbGFkYTtcclxuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFPDqSBxdWUgZXMgcmHDrXogcG9yIGPDs21vIGVzdG95IHJldm9sdmllbmRvIGxhIHBpbGFcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiB8fD0gcmVzcHVlc3RhcztcclxuICAgICAgICBpZiAoY29uQXVtZW50YWRhcykge1xyXG4gICAgICAgICAgICByZXNwdWVzdGFzQXVtZW50YWRhcyA9IHsgLi4ucmVzcHVlc3Rhc0F1bWVudGFkYXMsIC4uLnJlc3B1ZXN0YXMsIFt1YURlZi5wa19hZ3JlZ2FkYV06IHZhbG9yUGtPUG9zaWNpb24gfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZSBTw6kgcXVlIGxhIHBpbGEgdGllbmUgYWwgbWVub3MgdW4gZWxlbWVudG8gcG9yIGxvIHRhbnRvIGVzdG8gZXN0w6EgbGxlbm8gc2VndXJvLiBcclxuICAgICAgICByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB1bmlkYWRBbmFsaXNpczogdWFEZWZcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtSYWl6OiBGb3JQa1JhaXopIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGtSYWl6LCB0cnVlKVxyXG4gICAgdmFyIHJlZ2lzdHJvRWxlbWVudG9zID0gcmVnaXN0cm9FbGVtZW50b3NHbG9iYWw7XHJcbiAgICB2YXIgcGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayhmb3JQa1JhaXopXHJcbiAgICB2YXIgcm93VmFsaWRhdG9yID0gZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICBmb3IgKHZhciBpZCBpbiByZWdpc3Ryb0VsZW1lbnRvcykge1xyXG4gICAgICAgIHZhciBkZWYgPSByZWdpc3Ryb0VsZW1lbnRvc1tpZF07XHJcbiAgICAgICAgaWYgKGRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZGVmLmVsZW1lbnRvKSkge1xyXG4gICAgICAgICAgICAgICAgZGVmLmVsZW1lbnRvID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGVmLmVsZW1lbnRvKSB7XHJcbiAgICAgICAgICAgIGRlZi5lbGVtZW50byA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGRlZi5pZCkgYXMgRWxlbWVudG9zUmVnaXN0cmFibGVzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRlZi5lbGVtZW50bykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnQlVTQ0FORE8gZWwgZWxlbWVudG8gcmVnaXN0cmFkbyAnLGlkLCdubyBlc3TDoSBlbiBlbCBET00nKVxyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIHZhbHVlID0gZGVmLmZ1bihyZXNwdWVzdGFzQXVtZW50YWRhcywgcm93VmFsaWRhdG9yLCBkZWYuZWxlbWVudG8sIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yLCBlc3RydWN0dXJhKTtcclxuICAgICAgICBpZiAoJ3Byb3AnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50bywgZGVmLnByb3AsIHZhbHVlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoJ2F0dHInIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRBdHRyRGlzdGludG8oZGVmLmVsZW1lbnRvLCBkZWYuYXR0ciwgdmFsdWUpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICgnc3R5bGUnIGluIGRlZikge1xyXG4gICAgICAgICAgICBzZXRWYWxvckRpc3RpbnRvKGRlZi5lbGVtZW50by5zdHlsZSwgZGVmLnN0eWxlLCB2YWx1ZSlcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocm93VmFsaWRhdG9yLmFjdHVhbCkge1xyXG4gICAgICAgIHZhciB7IHRvcCwgYm90dG9tIH0gPSBjYWxjdWxhckVsZW1lbnRvRW5mb2NhZG8ocm93VmFsaWRhdG9yLmFjdHVhbCk7XHJcbiAgICAgICAgaWYgKHRvcCAhPSBudWxsICYmIGJvdHRvbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZhYi1hY3Rpdm8tYXJyaWJhJykuZWxUb3BWaXNpYmlsaXphciA9IHRvcDtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmFiLWFjdGl2by1hYmFqbycpLmVsQm90dG9tVmlzaWJpbGl6YXIgPSBib3R0b207XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2FsY3VsYXJFbGVtZW50b0VuZm9jYWRvKGlkVmFyaWFibGU6IElkVmFyaWFibGUgfCBJZEZpbikge1xyXG4gICAgdmFyIGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkVmFyaWFibGUgPT0gJ2ZpbicgPyBgYm90b24tdm9sdmVyLTJgIDogYHZhci0ke2lkVmFyaWFibGV9YClcclxuICAgICAgICB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFZhcmlhYmxlKTtcclxuICAgIHZhciBlbGVtZW50byA9IGVsZW1lbnRvVmFyaWFibGVBRW5mb2NhcjtcclxuICAgIHZhciBNQVJHRU5fU0NST0xMID0gNjQ7XHJcbiAgICB2YXIgYWx0b1BhbnRhbGxhID0gd2luZG93LmlubmVySGVpZ2h0ICogMC43IC0gTUFSR0VOX1NDUk9MTDtcclxuICAgIHZhciBlbGVtZW50b0VudGVybzogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgZW50YXIgZW50ZXJvIGVuIHBhbnRhbGxhLCBkZWZpbmUgZWwgYm90dG9tXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvRW50ZXJvOiBSZWN0IHwgbnVsbCA9IG51bGw7XHJcbiAgICB2YXIgZWxlbWVudG9TdXBlcmlvcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDsgLy8gZXMgZWwgZWxlbWVudG8gcXVlIHZhIGEgbW9zdHJhcnNlIGRlc2RlIGFycmliYSBhdW5xdWUgbm8gZW50cmUgZW50ZXJvLCBkZWZpbmUgZWwgdG9wXHJcbiAgICB2YXIgcmVjdEVsZW1lbnRvU3VwZXJpb3I6IFJlY3R8IG51bGwgPSBudWxsO1xyXG4gICAgd2hpbGUgKGVsZW1lbnRvICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIChlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ3ZhcmlhYmxlJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnbXVsdGlwbGUnKVxyXG4gICAgICAgICAgICAgICAgfHwgZWxlbWVudG8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmVndW50YScpXHJcbiAgICAgICAgICAgICAgICB8fCBlbGVtZW50by5jbGFzc0xpc3QuY29udGFpbnMoJ2Nvbmp1bnRvcHJlZ3VudGFzJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnc2VjY2lvbi1ib3Rvbi1mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b25mb3JtdWxhcmlvJylcclxuICAgICAgICAgICAgICAgIHx8IGVsZW1lbnRvLmNsYXNzTGlzdC5jb250YWlucygnYm90b24tdm9sdmVyJylcclxuICAgICAgICAgICAgKSAmJiBlbGVtZW50by5vZmZzZXRIZWlnaHQgPiAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50b1N1cGVyaW9yID09IG51bGwgJiYgZWxlbWVudG8uY2xpZW50SGVpZ2h0IDwgYWx0b1BhbnRhbGxhKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50b0VudGVybyA9IGVsZW1lbnRvO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnRvRW50ZXJvID09IG51bGwpIGVsZW1lbnRvRW50ZXJvID0gZWxlbWVudG87XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50b1N1cGVyaW9yID0gZWxlbWVudG9FbnRlcm9cclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvISlcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3RFbGVtZW50b0VudGVybztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHZhciByZWN0ID0gZ2V0UmVjdChlbGVtZW50byk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVjdEVsZW1lbnRvRW50ZXJvLnRvcCArIHJlY3RFbGVtZW50b0VudGVyby5oZWlnaHQgLSByZWN0LnRvcCA8IGFsdG9QYW50YWxsYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvU3VwZXJpb3IgPSBlbGVtZW50bztcclxuICAgICAgICAgICAgICAgICAgICByZWN0RWxlbWVudG9TdXBlcmlvciA9IHJlY3Q7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnRvID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbGVtZW50byA9IGVsZW1lbnRvPy5wYXJlbnRFbGVtZW50ID8/IG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAoZWxlbWVudG9TdXBlcmlvciA9PSBudWxsKSB7XHJcbiAgICAgICAgZWxlbWVudG9TdXBlcmlvciA9IGVsZW1lbnRvRW50ZXJvO1xyXG4gICAgfVxyXG4gICAgdmFyIHJlc3VsdDoge1xyXG4gICAgICAgIGVsZW1lbnRvSW5wdXRWYXJpYWJsZT86IEhUTUxFbGVtZW50IHwgbnVsbFxyXG4gICAgICAgIHRvcD86IG51bWJlciB8IG51bGxcclxuICAgICAgICBib3R0b20/OiBudW1iZXIgfCBudWxsXHJcbiAgICAgICAgZW5mb2NhZG8/OiBib29sZWFuIHwgbnVsbFxyXG4gICAgICAgIGRlc2VuZm9xdWU/OiBzdHJpbmcgfCBudWxsXHJcbiAgICB9ID0ge307XHJcbiAgICBpZiAoZWxlbWVudG9FbnRlcm8gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZWN0RWxlbWVudG9FbnRlcm8gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZWN0RWxlbWVudG9FbnRlcm8gPSBnZXRSZWN0KGVsZW1lbnRvRW50ZXJvKVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQuZWxlbWVudG9JbnB1dFZhcmlhYmxlID0gZWxlbWVudG9WYXJpYWJsZUFFbmZvY2FyO1xyXG4gICAgICAgIHZhciB0b3AgPSAocmVjdEVsZW1lbnRvU3VwZXJpb3IgPz8gcmVjdEVsZW1lbnRvRW50ZXJvKS50b3AgLSBNQVJHRU5fU0NST0xMO1xyXG4gICAgICAgIHJlc3VsdC50b3AgPSB0b3A7XHJcbiAgICAgICAgcmVzdWx0LmJvdHRvbSA9IHJlY3RFbGVtZW50b0VudGVyby50b3AgKyByZWN0RWxlbWVudG9FbnRlcm8uaGVpZ2h0O1xyXG4gICAgICAgIGlmICh0b3AgPCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5kZXNlbmZvcXVlID0gJ2FycmliYSc7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZWN0RWxlbWVudG9FbnRlcm8udG9wICsgcmVjdEVsZW1lbnRvRW50ZXJvLmhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgKyBhbHRvUGFudGFsbGEpIHtcclxuICAgICAgICAgICAgcmVzdWx0LmRlc2VuZm9xdWUgPSAnYWJham8nO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5lbmZvY2FkbyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0ckRpc3RpbnRvPE4gZXh0ZW5kcyBzdHJpbmc+KFxyXG4gICAgb2JqZXRvOiB7IHNldEF0dHJpYnV0ZTogKG5hbWU6IE4sIHZhbG9yOiBzdHJpbmcpID0+IHZvaWQsIGdldEF0dHJpYnV0ZTogKG5hbWU6IE4pID0+IHN0cmluZyB8IG51bGwgfSxcclxuICAgIG5hbWU6IE4sXHJcbiAgICB2YWxvcjogc3RyaW5nXHJcbikge1xyXG4gICAgaWYgKG9iamV0byAmJiBvYmpldG8uZ2V0QXR0cmlidXRlKG5hbWUpICE9IHZhbG9yKSB7XHJcbiAgICAgICAgb2JqZXRvLnNldEF0dHJpYnV0ZShuYW1lLCB2YWxvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzZXRWYWxvckRpc3RpbnRvPFQgZXh0ZW5kcyB7fSwgTiBleHRlbmRzIGtleW9mIFQ+KFxyXG4gICAgb2JqZXRvOiBULFxyXG4gICAgbmFtZTogTixcclxuICAgIHZhbG9yOiBUW05dXHJcbikge1xyXG4gICAgaWYgKG9iamV0b1tuYW1lXSAhPSB2YWxvcikge1xyXG4gICAgICAgIG9iamV0b1tuYW1lXSA9IHZhbG9yO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQazogRm9yUGspIHtcclxuICAgIGlmIChlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgdmFyIHsgcmVzcHVlc3RhcyB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrKTtcclxuICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8pXHJcbiAgICAgICAgICAgIC5mb3JFYWNoKChjb25maWdCb3RvbkZvcm11bGFyaW8sIGlkRm9ybXVsYXJpbykgPT4ge1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlc3BVQSA9IHJlc3B1ZXN0YXNbZXN0cnVjdHVyYS5oYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9baWRGb3JtdWxhcmlvXS51bmlkYWRfYW5hbGlzaXNdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BVQSAhPSBudWxsICYmIHJlc3BVQSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb25maWdCb3RvbkZvcm11bGFyaW8uaGFiaWxpdGFyX2FncmVnYXJfbGlzdG8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1snJEIuJyArIGlkRm9ybXVsYXJpbyBhcyBJZFZhcmlhYmxlXSA9ICdvayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgfVxyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhY2Npb25faWRfcHJlZ3VudGEoX3BheWxvYWQ6IHsgcHJlZ3VudGE6IElkUHJlZ3VudGEsIGZvclBrOiBGb3JQayB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA9IFN5bWJvbCgnTk9fQ0FNQklBUl9TT0xPX1RSQUVSX1NUQVRVUycpXHJcbmV4cG9ydCBjb25zdCBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPID0gU3ltYm9sKCdOT19DQU1CSUFSX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8nKVxyXG5cclxuZnVuY3Rpb24gcmVmcmVzY2FyTWFyY2FEaXJ0eSgpIHtcclxuICAgIHZhciBib3RvbkdyYWJhciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2F2ZS1idXR0b25cIikgYXMgSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgICBpZiAoYm90b25HcmFiYXIpIHtcclxuICAgICAgICBpZiAoYm90b25HcmFiYXIuZGlzYWJsZWQgIT09ICFkYXRvc0J5UGFzcy5kaXJ0eSkge1xyXG4gICAgICAgICAgICBib3RvbkdyYWJhci5kaXNhYmxlZCA9ICFkYXRvc0J5UGFzcy5kaXJ0eTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFwbGljYXJDYW1iaW9VbmFSZXNwdWVzdGEoXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgdmFyaWFibGU6IElkVmFyaWFibGUsXHJcbiAgICByZXNwdWVzdGFJbnB1dDogVmFsb3JcclxuKSB7XHJcbiAgICB2YXIgcmVzcHVlc3RhID0gcmVzcHVlc3RhSW5wdXQ7XHJcbiAgICB2YXIgdmFsb3JBbnRlcmlvciA9IHJlc3B1ZXN0YXNbdmFyaWFibGVdO1xyXG4gICAgaWYgKHJlc3B1ZXN0YSA9PT0gJycpIHtcclxuICAgICAgICByZXNwdWVzdGEgPSBudWxsO1xyXG4gICAgfSBlbHNlIGlmIChlc3RydWN0dXJhLmZvcm11bGFyaW9zW2ZvclBrLmZvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IudmFyaWFibGVzW3ZhcmlhYmxlXT8udGlwbyA9PSAnbnVtZXJvJykge1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGEgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXNwdWVzdGEgPSBOdW1iZXIocmVzcHVlc3RhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBzaSBlcyB1biBmYWxzeSAoMCA9PSBmYWxzZSkgdGVuZ28gcXVlIGNvbXBhcmFyIGNvbiAhPT1cclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IHJlc3B1ZXN0YSA/IHZhbG9yQW50ZXJpb3IgIT0gcmVzcHVlc3RhIDogdmFsb3JBbnRlcmlvciAhPT0gcmVzcHVlc3RhO1xyXG4gICAgaWYgKHJlY2VudE1vZGlmaWVkKSB7XHJcbiAgICAgICAgcmVzcHVlc3Rhc1t2YXJpYWJsZV0gPSByZXNwdWVzdGEgPz8gbnVsbDsgLy8gY2FtYmlvIHVuZGVmaW5lZCBwb3IgbnVsbFxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVjZW50TW9kaWZpZWQsIHZhbG9yQW50ZXJpb3IsIHJlc3B1ZXN0YVByb2Nlc2FkYTogcmVzcHVlc3RhIH07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlZnJlc2NhcllSZWNhbGN1bGFyQnlwYXNzKFxyXG4gICAgZm9yUGs6IEZvclBrLFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeixcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgdmFyaWFibGVzTW9kaWZpY2FkYXM6IElkVmFyaWFibGVbXSxcclxuICAgIHJlY2VudE1vZGlmaWVkOiBib29sZWFuXHJcbikge1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgcmVjYWxjdWxhckNvbW9kaW5lc0ZvclBrKGZvclBrKTtcclxuICAgIGlmIChlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZGF0b3NCeVBhc3M/LnNvbG9MZWN0dXJhKSB7XHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YXJpYWJsZXNNb2RpZmljYWRhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB2ZXJpZmljYXJTb3J0ZW8oe1xyXG4gICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlbzogZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYShmb3JQa1tlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV0sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1JhaXosXHJcbiAgICAgICAgICAgICAgICB2YXJpYWJsZUFjdHVhbDogdmFyaWFibGVzTW9kaWZpY2FkYXNbaV0sXHJcbiAgICAgICAgICAgICAgICBmb3JQazogZm9yUGtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgIHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSA9IHJlc3B1ZXN0YXNSYWl6LiRkaXJ0eSB8fCByZWNlbnRNb2RpZmllZDtcclxuICAgIHJlZnJlc2Nhck1hcmNhRGlydHkoKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2socmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgeyBhdXRvSW5ncmVzbzogdHJ1ZSB9KTtcclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgdm9sY2Fkb0luaWNpYWxFbGVtZW50b3NSZWdpc3RyYWRvcyhmb3JQayk7XHJcbiAgICBjb25zdCB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzIH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUpO1xyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YXJpYWJsZXNNb2RpZmljYWRhcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIHZhciB2ID0gdmFyaWFibGVzTW9kaWZpY2FkYXNbal07XHJcbiAgICAgICAgbm90aWZpY2FyQ2FtYmlvVmFyaWFibGUodiBhcyBzdHJpbmcsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3ZdLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMpO1xyXG4gICAgfVxyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG4gICAgcmV0dXJuIGZlZWRiYWNrUm93O1xyXG59XHJcblxyXG5mdW5jdGlvbiByZWNhbGN1bGFyQ29tb2RpbmVzRm9yUGsoZm9yUGs6IEZvclBrKSB7XHJcbiAgICBpZiAoY29tb2RpbmVzLmNhbGN1bGFyQ29tb2RpbmVzKSB7XHJcbiAgICAgICAgY29tb2RpbmVzLmNhbGN1bGFyQ29tb2RpbmVzKGZvclBrKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9yZWdpc3RyYXJfcmVzcHVlc3RhKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgdHlwZW9mIE5PX0NBTUJJQVJfX1NPTE9fVFJBRVJfU1RBVFVTLFxyXG4gICAgcmVzcHVlc3RhOiBWYWxvciB8IHR5cGVvZiBOT19DQU1CSUFSX19WRVJJRklDQVJfU0lfRVNfTkVDRVNBUklPXHJcbn0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB0b2tlbiA9ICdBVkVSSUdVQVIgVE9ETyc7XHJcbiAgICBsZXQgeyBmb3JQaywgcmVzcHVlc3RhLCB2YXJpYWJsZSB9ID0gcGF5bG9hZDtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXTtcclxuICAgIHZhciByZWNlbnRNb2RpZmllZCA9IGZhbHNlO1xyXG4gICAgdmFyIHZhbG9yQW50ZXJpb3IgPSB2YXJpYWJsZSAhPSBOT19DQU1CSUFSX19TT0xPX1RSQUVSX1NUQVRVUyA/IHJlc3B1ZXN0YXNbdmFyaWFibGVdIDogbnVsbDtcclxuICAgIHZhciBmZWVkYmFja1JvdyA9IGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yW3RvUGxhaW5Gb3JQayhmb3JQayldO1xyXG4gICAgdmFyIHNpZ3VpZW50ZVZhcmlhYmxlOiBJZFZhcmlhYmxlIHwgSWRGaW4gfCBudWxsIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGlmIChyZXNwdWVzdGEgIT09IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgdmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMpIHtcclxuICAgICAgICB2YXIgcmVzQ2FtYmlvID0gYXBsaWNhckNhbWJpb1VuYVJlc3B1ZXN0YShmb3JQaywgcmVzcHVlc3RhcywgdmFyaWFibGUsIHJlc3B1ZXN0YSk7XHJcbiAgICAgICAgcmVjZW50TW9kaWZpZWQgPSByZXNDYW1iaW8ucmVjZW50TW9kaWZpZWQ7XHJcbiAgICAgICAgaWYgKCFyZWNlbnRNb2RpZmllZCkge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodmFyaWFibGUgIT0gTk9fQ0FNQklBUl9fU09MT19UUkFFUl9TVEFUVVMgJiYgKHJlY2VudE1vZGlmaWVkIHx8IE5PX0NBTUJJQVJfX1ZFUklGSUNBUl9TSV9FU19ORUNFU0FSSU8gJiYgZmVlZGJhY2tSb3cuYXV0b0luZ3Jlc2FkYXM/Llt2YXJpYWJsZV0pKSB7XHJcbiAgICAgICAgZmVlZGJhY2tSb3cgPSByZWZyZXNjYXJZUmVjYWxjdWxhckJ5cGFzcyhmb3JQaywgcmVzcHVlc3RhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiwgW3ZhcmlhYmxlXSwgcmVjZW50TW9kaWZpZWQpO1xyXG4gICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gdmFyaWFibGU7XHJcbiAgICAgICAgZG8ge1xyXG4gICAgICAgICAgICBzaWd1aWVudGVWYXJpYWJsZSA9IGZlZWRiYWNrUm93LmZlZWRiYWNrW3NpZ3VpZW50ZVZhcmlhYmxlXT8uc2lndWllbnRlO1xyXG4gICAgICAgIH0gd2hpbGUgKHZhbG9yQW50ZXJpb3IgPT0gbnVsbCAmJiByZWNlbnRNb2RpZmllZCAmJiBzaWd1aWVudGVWYXJpYWJsZSAhPSBudWxsICYmIHNpZ3VpZW50ZVZhcmlhYmxlICE9ICdmaW4nICYmIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbZm9yUGsuZm9ybXVsYXJpb10uZXN0cnVjdHVyYVJvd1ZhbGlkYXRvci52YXJpYWJsZXNbc2lndWllbnRlVmFyaWFibGVdLmZ1bmNpb25BdXRvSW5ncmVzYXIpO1xyXG4gICAgICAgIGlmIChzaWd1aWVudGVWYXJpYWJsZSA9PSBudWxsICYmIGZlZWRiYWNrUm93LmZlZWRiYWNrW3ZhcmlhYmxlXT8uZXN0YWRvID09ICd2YWxpZGEnKSB7XHJcbiAgICAgICAgICAgIHNpZ3VpZW50ZVZhcmlhYmxlID0gJ2Zpbic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgcmVjZW50TW9kaWZpZWQsIHNpZ3VpZW50ZVZhcmlhYmxlLCB2YXJpYWJsZUFjdHVhbDogZmVlZGJhY2tSb3cuYWN0dWFsIH07XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFJlZ2lzdHJvUmVzcHVlc3RhU2ltcGxlID0ge1xyXG4gICAgdmFyaWFibGU6IElkVmFyaWFibGUsXHJcbiAgICByZXNwdWVzdGE6IFZhbG9yXHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9yZXNwdWVzdGFzKHBheWxvYWQ6IHtcclxuICAgIGZvclBrOiBGb3JQayxcclxuICAgIHJlc3B1ZXN0YXM6IFJlZ2lzdHJvUmVzcHVlc3RhU2ltcGxlW11cclxufSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgbGV0IHsgZm9yUGssIHJlc3B1ZXN0YXM6IGxpc3RhUmVzcHVlc3RhcyB9ID0gcGF5bG9hZDtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQayk7XHJcbiAgICB2YXIgcmVjZW50TW9kaWZpZWRBbnkgPSBmYWxzZTtcclxuICAgIHZhciB2YXJpYWJsZXNNb2RpZmljYWRhczogSWRWYXJpYWJsZVtdID0gW107XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0YVJlc3B1ZXN0YXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YXIgaXRlbSA9IGxpc3RhUmVzcHVlc3Rhc1tpXTtcclxuICAgICAgICB2YXIgcmVzQ2FtYmlvID0gYXBsaWNhckNhbWJpb1VuYVJlc3B1ZXN0YShmb3JQaywgcmVzcHVlc3RhcywgaXRlbS52YXJpYWJsZSwgaXRlbS5yZXNwdWVzdGEpO1xyXG4gICAgICAgIGlmIChyZXNDYW1iaW8ucmVjZW50TW9kaWZpZWQpIHtcclxuICAgICAgICAgICAgcmVjZW50TW9kaWZpZWRBbnkgPSB0cnVlO1xyXG4gICAgICAgICAgICB2YXJpYWJsZXNNb2RpZmljYWRhcy5wdXNoKGl0ZW0udmFyaWFibGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVjZW50TW9kaWZpZWRBbnkgJiYgdmFyaWFibGVzTW9kaWZpY2FkYXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHJlZnJlc2NhcllSZWNhbGN1bGFyQnlwYXNzKGZvclBrLCByZXNwdWVzdGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6LCB2YXJpYWJsZXNNb2RpZmljYWRhcywgcmVjZW50TW9kaWZpZWRBbnkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7IHJlY2VudE1vZGlmaWVkOiByZWNlbnRNb2RpZmllZEFueSB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX3JlZ2lzdHJhcl9ub3RhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIHRhcmVhOiBJZFRhcmVhLCBub3RhOiBzdHJpbmcgfCBudWxsIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgdGFyZWEsIG5vdGEgfSA9IHBheWxvYWQ7XHJcbiAgICBjb25zb2xlLmxvZyhcIkZBTFRBIC8vIFRPRE9cIilcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hZ3JlZ2FyX3Zpc2l0YShwYXlsb2FkOiB7IGZvclBrUmFpejogRm9yUGtSYWl6LCBvYnNlcnZhY2lvbmVzOiBzdHJpbmcgfCBudWxsIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIGxldCB7IGZvclBrUmFpeiwgb2JzZXJ2YWNpb25lcyB9ID0gcGF5bG9hZDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9tb2RpZmljYXJfdmlzaXRhKHBheWxvYWQ6IHsgZm9yUGtSYWl6OiBGb3JQa1JhaXosIGluZGV4OiBudW1iZXIsIG9wY2lvbjoga2V5b2YgVmlzaXRhLCB2YWxvcjogc3RyaW5nIHwgbnVsbCB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4LCBvcGNpb24sIHZhbG9yIH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl92aXNpdGEocGF5bG9hZDogeyBmb3JQa1JhaXo6IEZvclBrUmFpeiwgaW5kZXg6IG51bWJlciB9LCBfZGF0b3NCeVBhc3M6IERhdG9zQnlQYXNzKSB7XHJcbiAgICBsZXQgeyBmb3JQa1JhaXosIGluZGV4IH0gPSBwYXlsb2FkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2FncmVnYXJfZm9ybXVsYXJpbyh7IGZvclBrIH06IHsgZm9yUGs6IEZvclBrIH0sIF9kYXRvc0J5UGFzczogRGF0b3NCeVBhc3MpIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzQXVtZW50YWRhcywgcmVzcHVlc3Rhc1JhaXosIGZvclBrUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlLCB0cnVlKTtcclxuICAgIHJlY2FsY3VsYXJUb2RvRWxBcmJvbChyZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6KTtcclxuICAgIHJlY2FsY3VsYXJDb21vZGluZXNGb3JQayhmb3JQayk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3MsIHJlc3B1ZXN0YXMsIHVuaWRhZEFuYWxpc2lzLnVuaWRhZF9hbmFsaXNpcywgZm9yUGssIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCBudWxsLCB7fSlcclxuICAgIGNhbGN1bGFyVmFyaWFibGVzQm90b25Gb3JtdWxhcmlvKGZvclBrKTtcclxuICAgIHBlcnNpc3RpckRhdG9zQnlQYXNzKGRhdG9zQnlQYXNzKTsgLy8gT0pPIEFTWU5DIERFU0NPTlRST0xBREFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFjY2lvbl9hYnJpcl9mb3JtdWxhcmlvKHsgZm9yUGsgfTogeyBmb3JQazogRm9yUGsgfSwgX2RhdG9zQnlQYXNzOiBEYXRvc0J5UGFzcykge1xyXG4gICAgdmFyIHsgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMsIHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6IH0gPSByZXNwdWVzdGFzRm9yUGsoZm9yUGssIHRydWUsIHRydWUpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgcmVjYWxjdWxhckNvbW9kaW5lc0ZvclBrKGZvclBrKTtcclxuICAgIGNhbGN1bGFyRmVlZGJhY2tVbmlkYWRBbmFsaXNpcyhkYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgZXN0cnVjdHVyYS5mb3JtdWxhcmlvcywgcmVzcHVlc3RhcywgdW5pZGFkQW5hbGlzaXMudW5pZGFkX2FuYWxpc2lzLCBmb3JQaywgcmVzcHVlc3Rhc0F1bWVudGFkYXMsIG51bGwsIHt9KVxyXG4gICAgY2FsY3VsYXJWYXJpYWJsZXNCb3RvbkZvcm11bGFyaW8oZm9yUGspO1xyXG4gICAgcGVyc2lzdGlyRGF0b3NCeVBhc3MoZGF0b3NCeVBhc3MpOyAvLyBPSk8gQVNZTkMgREVTQ09OVFJPTEFEQVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWNjaW9uX2JvcnJhcl9mb3JtdWxhcmlvKHsgZm9yUGssIGZvclBrUGFkcmUgfTogeyBmb3JQazogRm9yUGssIGZvclBrUGFkcmU6IEZvclBrIH0pIHtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXogfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQaywgdHJ1ZSwgdHJ1ZSk7XHJcbiAgICB2YXIgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzIHwgdW5kZWZpbmVkID0gZXN0cnVjdHVyYS5mb3JtdWxhcmlvc1tmb3JQay5mb3JtdWxhcmlvXS5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpc1xyXG4gICAgdmFyIHVhRGVmOiBVbmlkYWRBbmFsaXNpcyA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBpbmRleCA9IGZvclBrW3VhRGVmLnBrX2FncmVnYWRhXSBhcyBudW1iZXI7XHJcbiAgICB2YXIgeyByZXNwdWVzdGFzOiByZXNwdWVzdGFzUGFkcmUgfSA9IHJlc3B1ZXN0YXNGb3JQayhmb3JQa1BhZHJlLCB0cnVlLCB0cnVlKTtcclxuICAgIChyZXNwdWVzdGFzUGFkcmVbdW5pZGFkX2FuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW10pLnNwbGljZShpbmRleCAtIDEsIDEpO1xyXG4gICAgcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXopO1xyXG4gICAgcmVjYWxjdWxhckNvbW9kaW5lc0ZvclBrKGZvclBrUGFkcmUpO1xyXG4gICAgZGF0b3NCeVBhc3MuZGlydHkgPSBkYXRvc0J5UGFzcy5kaXJ0eSB8fCB0cnVlO1xyXG4gICAgcmVzcHVlc3Rhc1JhaXouJGRpcnR5ID0gcmVzcHVlc3Rhc1JhaXouJGRpcnR5IHx8IHRydWU7XHJcbiAgICByZWZyZXNjYXJNYXJjYURpcnR5KCk7XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXNSYWl6LCBmb3JQa1JhaXosIHsgYXV0b0luZ3Jlc286IHRydWUgfSk7XHJcbiAgICBjYWxjdWxhclZhcmlhYmxlc0JvdG9uRm9ybXVsYXJpbyhmb3JQa1BhZHJlKTtcclxuICAgIHZvbGNhZG9JbmljaWFsRWxlbWVudG9zUmVnaXN0cmFkb3MoZm9yUGtQYWRyZSk7XHJcbiAgICBwZXJzaXN0aXJEYXRvc0J5UGFzcyhkYXRvc0J5UGFzcyk7IC8vIE9KTyBBU1lOQyBERVNDT05UUk9MQURBXHJcbn1cclxuXHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGlzcGF0Y2hCeVBhc3M8VCwgUj4oXHJcbiAgICBmdW46IChwYXlsb2FkOiBULCBkYXRvczogdHlwZW9mIGRhdG9zQnlQYXNzKSA9PiBSLFxyXG4gICAgcGF5bG9hZDogVFxyXG4pIHtcclxuICAgIHJldHVybiBmdW4ocGF5bG9hZCwgZGF0b3NCeVBhc3MpO1xyXG59XHJcblxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5cclxuXHJcbmV4cG9ydCBjb25zdCB1bHRpbWFWYXJpYmxlVml2aWVuZGEgPSAnTk9fRVNUQV9ERUZJTklEQV9BVU4vL1RPRE8nIGFzIElkVmFyaWFibGU7XHJcblxyXG5leHBvcnQgY29uc3QgTUFYQ1AgPSAyMDtcclxuXHJcbi8qIFJFRFVDRVJTICovXHJcblxyXG52YXIgcmVlbXBsYXpvc0hhYmlsaXRhcjogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcclxuICAgIGZhbHNlOiAnZmFsc2UnLFxyXG4gICAgdHJ1ZTogJ3RydWUnLFxyXG4gICAgXCI9XCI6ICc9PScsXHJcbiAgICBcIjw+XCI6ICchPScsXHJcbiAgICBcIiZcIjogJyYmJyxcclxuICAgIFwifFwiOiAnfHwnLFxyXG4gICAgXCJPUlwiOiAnfHwnLFxyXG4gICAgXCJBTkRcIjogJyYmJyxcclxuICAgIFwib3JcIjogJ3x8JyxcclxuICAgIFwiYW5kXCI6ICcmJicsXHJcbiAgICBcIm5vdFwiOiAnIScsXHJcbiAgICBcIk5PVFwiOiAnIScsXHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgaGVscGVyc0Nhc2lsbGVyb3MgPSB7XHJcbiAgICBudWxsMnplcm8ocG9zaWJsZU51bGw6IGFueSkge1xyXG4gICAgICAgIGlmIChwb3NpYmxlTnVsbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcG9zaWJsZU51bGw7XHJcbiAgICB9LFxyXG4gICAgZGl2MGVycihudW1lcmFkb3I6IG51bWJlciwgZGVub21pbmFkb3I6IG51bWJlciwgcGs6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChkZW5vbWluYWRvciA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVycm9yIGVuIFwiICsgcGsgKyBcIiBkaXZpc2lvbiBwb3IgY2VybyBkZSBcIiArIG51bWVyYWRvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudW1lcmFkb3IgLyBkZW5vbWluYWRvcjtcclxuICAgIH0sXHJcbiAgICBmdW5zOiB7XHJcbiAgICAgICAgYmxhbmNvKHg6IGFueSkge1xyXG4gICAgICAgICAgICByZXR1cm4geCAhPT0gMCAmJiAheFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaG95KCkge1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS50b2RheSgpLnRvRG15KClcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZlY2hhX3ZhbGlkYSh4OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgdmFyIGZvcm1hdG9fdmFsaWRvID0gL14oWzEtOV18MFsxLTldfFsxMl1cXGR8M1swMV0pXFwvKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvMjBcXGRcXGQkLy50ZXN0KHgpXHJcbiAgICAgICAgICAgIHZhciB4RGF0ZTogRGF0ZTtcclxuICAgICAgICAgICAgdmFyIGNvbnZlcnNpb25PazogYm9vbGVhbjtcclxuICAgICAgICAgICAgY29udmVyc2lvbk9rID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdG9fdmFsaWRvKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBbZCwgbSwgeV0gPSB4LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHhEYXRlID0gbmV3IERhdGUoYCR7eX0vJHttfS8ke2R9YCk7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzaW9uT2sgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9mYWx0YXJpYSB2YWxpZGFyIHF1ZSBubyBzZWEgdW5hIGZlY2hhIGZ1dHVyYSB5IHF1ZSBzZWEgdW5hIGZlY2hhIGVuIGVsIHJhbmdvIGRlbCBvcGVyYXRpdm9cclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvICYmIGNvbnZlcnNpb25Pa1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzYW5pb192YWxpZG8oeDogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBmb3JtYXRvX3ZhbGlkbyA9IC9eKFsxLTldfDBbMS05XXwxWzAxMl0pXFwvKDE5fDIwKVxcZFxcZCQvLnRlc3QoeClcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdG9fdmFsaWRvXHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbmZvcm1hZG8oeDogYW55KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQgJiYgeCAhPT0gbnVsbCAmJiAoISh4IGluc3RhbmNlb2YgQXJyYXkpIHx8IHgubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgICAgICAgICAgJiYgKCEoeCBpbnN0YW5jZW9mIE9iamVjdCkgfHwgT2JqZWN0LmtleXMoeCkubGVuZ3RoICE9PSAwKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbnNuYyh4OiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggPT0gLTlcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhcih4OiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHggJSAyID09IDBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVkYWRfbWVzX2FubmlvX3ZhbGlkbyhlZGFkOiBudW1iZXIsIG1lc0FubmlvOiBzdHJpbmcsIGZlY2hhUmVhbGl6YWNpb25ERE1NWVlZWTogc3RyaW5nKSB7XHJcbiAgICAgICAgICAgIHZhciBtZXNlc0RpZmVyZW5jaWEgPSAoZDE6IERhdGUsIGQyOiBEYXRlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbW9udGhzO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzID0gKGQyLmdldEZ1bGxZZWFyKCkgLSBkMS5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgICAgICAgICAgICAgbW9udGhzIC09IGQxLmdldE1vbnRoKCk7XHJcbiAgICAgICAgICAgICAgICBtb250aHMgKz0gZDIuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgPD0gMCA/IDAgOiBtb250aHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIHBhcnRlc1JlYWxpemFjaW9uID0gZmVjaGFSZWFsaXphY2lvbkRETU1ZWVlZLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIHRvZGF5ID0gZGF0ZS55bWQoTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzJdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzFdKSwgTnVtYmVyKHBhcnRlc1JlYWxpemFjaW9uWzBdKSlcclxuICAgICAgICAgICAgdmFyIHBhcnRlc01lc0FubmlvID0gbWVzQW5uaW8uc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgLy9AdHMtaWdub3JlIGxhcyBwYXJ0ZXMgY29ycmVzcG9uZGVuIGEgdW5hIGZlY2hhIHbDoWxpZGFcclxuICAgICAgICAgICAgdmFyIG5hY2ltaWVudG8gPSBkYXRlLnltZChOdW1iZXIocGFydGVzTWVzQW5uaW9bMV0pLCBOdW1iZXIocGFydGVzTWVzQW5uaW9bMF0pLCAxKVxyXG4gICAgICAgICAgICAvL0B0cy1pZ25vcmUgUmVhbERhdGUgZXMgRGF0ZSB5IHNlIHB1ZWRlIHJlc3RhclxyXG4gICAgICAgICAgICB2YXIgZGlmZXJlbmNpYU1lc2VzID0gbWVzZXNEaWZlcmVuY2lhKG5hY2ltaWVudG8sIHRvZGF5KTtcclxuICAgICAgICAgICAgdmFyIGVkYWREZWNpbWFsZXMgPSBkaWZlcmVuY2lhTWVzZXMgLyAxMjsgLy9laiAzNi41XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBNYXRoLmZsb29yKGVkYWREZWNpbWFsZXMpID09IGVkYWQgfHwgLy9taXNtYSBlZGFkXHJcbiAgICAgICAgICAgICAgICBlZGFkRGVjaW1hbGVzID09IGVkYWQgKyAxIC8vbWVzIGRlIHRvbGVyYW5jaWFcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy9jb3BpYXJfY2FtcG9fdWFfcmFtYShyZXNwdWVzdGFzT3JpZ2VuOlJlc3B1ZXN0YXNbXSwgcG9zaWNpb246bnVtYmVyLCB2YXJpYWJsZU9yaWdlbjogSWRWYXJpYWJsZSwgY2FtaW5vOnN0cmluZywgY29uZGljaW9uOmJvb2xlYW4pe1xyXG4gICAgICAgIC8vICAgIHJldHVybiBjb25kaWNpb24/KHJlc3B1ZXN0YXNPcmlnZW4gJiYgcmVzcHVlc3Rhc09yaWdlbltwb3NpY2lvbi0xXSAmJiByZXNwdWVzdGFzT3JpZ2VuW3Bvc2ljaW9uLTFdW2Ake2NhbWlub31gXVt2YXJpYWJsZU9yaWdlbl0pOm51bGxcclxuICAgICAgICAvLyAgICByZXR1cm4gY29uZGljaW9uP2V2YWwoYHJlc3B1ZXN0YXNPcmlnZW5bJHtwb3NpY2lvbi0xfV0uYCtjYW1pbm8rJy4nK3ZhcmlhYmxlT3JpZ2VuKTpudWxsO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgZGJvOntcclxuICAgICAgICAgICAgZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwgZGF0bzpzdHJpbmcpe1xyXG4gICAgICAgICAgICAgICAgdmFyIHhwZXJzb25hcz1wZXJzb25hcztcclxuICAgICAgICAgICAgICAgIHJldHVybiBlbmN1PT1lbmMgJiYgaG9nPT1ob2dhciAmJiBpbmZvcm1hZG8oeHBlcnNvbmFzKSAmJiBwZXI8PSB4cGVyc29uYXMubGVuZ3RoICYmIHBlcj49MSAmJiAhIXhwZXJzb25hc1twZXItMV1bZGF0b10/IHhwZXJzb25hc1twZXItMV1bZGF0b106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlZGFkZmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0b0ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlciwnZWRhZCcpXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGV4aXN0ZWluZGl2aWR1YWwoZW5jdTpzdHJpbmcsaG9nOm51bWJlcixwZXI6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5jdT09ZW5jICYmIGhvZz09aG9nYXIgJiYgISFwZXJzb25hcyAmJiBwZXI8PSBwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEhcGVyc29uYXNbcGVyLTFdWydlbnRyZWFpbmQnXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBleGlzdGVtaWVtYnJvKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEhcGVyc29uYXMgJiYgcGVyPD0gcGVyc29uYXMubGVuZ3RoICYmIHBlcj49MVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBucm9jb255dWdlcyhlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHZhciB4cGVyc29uYXM9cGVyc29uYXNcclxuICAgICAgICAgICAgICAgIHJldHVybiB4cGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MikubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIG5yb2plZmVzKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGVyc29uYXMuZmlsdGVyKCBwZXItPnBlci5wND09MSkubGVuZ3RoXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHBhcmVudGVzY29mYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdG9GYW1pbGlhcihlbmN1OnN0cmluZyxob2c6bnVtYmVyLHBlcjpudW1iZXIsJ3A0JylcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V4b2ZhbWlsaWFyKGVuY3U6c3RyaW5nLGhvZzpudW1iZXIscGVyOm51bWJlcil7XHJcbiAgICAgICAgICAgICAgICB2YXIgeHBlcnNvbmFzPXBlcnNvbmFzO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVuY3U9PWVuYyAmJiBob2c9PWhvZ2FyICYmICEheHBlcnNvbmFzICYmIHBlcjw9IHhwZXJzb25hcy5sZW5ndGggJiYgcGVyPj0xICYmICEheHBlcnNvbmFzW3Blci0xXS5zZXhvPyB4cGVyc29uYXNbcGVyLTFdWydzZXhvJ106bnVsbFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaXRjb255amVmZShlbmN1OnN0cmluZyxob2c6bnVtYmVyKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRvRmFtaWxpYXIoZW5jdTpzdHJpbmcsaG9nOm51bWJlciwxLCdwNScpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9ICovXHJcbiAgICB9XHJcbn07XHJcblxyXG50eXBlIEZ1bmNpb25IYWJpbGl0YXIgPSAodmFsb3JlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gYm9vbGVhbjtcclxudHlwZSBGdW5jaW9uVmFsb3JhciA9ICh2YWxvcmVzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSA9PiBhbnk7XHJcbnZhciBmdW5jaW9uZXNIYWJpbGl0YXI6IHsgW2tleTogc3RyaW5nXTogRnVuY2lvbkhhYmlsaXRhciB9ID0ge1xyXG59XHJcbnZhciBmdW5jaW9uZXNWYWxvcmFyOiB7IFtrZXk6IHN0cmluZ106IEZ1bmNpb25WYWxvcmFyIH0gPSB7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtaW5pQ29tcGlsYWRvclNRbEpzKGV4cHJlc2lvbkNhc2lTUUw6IHN0cmluZykge1xyXG4gICAgdmFyIGV4cHJlc2lvbiA9IGV4cHJlc2lvbkNhc2lTUUwucmVwbGFjZSgvXFx1MDBBMC9nLCAnICcpO1xyXG4gICAgdmFyIGN1ZXJwbyA9IGV4cHJlc2lvbi5yZXBsYWNlKC9cXGJpcyBkaXN0aW5jdCBmcm9tXFxiL2dpLCAnIT0nKS5yZXBsYWNlKC9cXGIuKz9cXGIvZywgZnVuY3Rpb24gKGVsVG9rZW4pIHtcclxuICAgICAgICB2YXIgZWxUb2tlblRyaW1lYWRvID0gZWxUb2tlbi50cmltKCk7XHJcbiAgICAgICAgaWYgKGVsVG9rZW5UcmltZWFkbyBpbiByZWVtcGxhem9zSGFiaWxpdGFyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZWVtcGxhem9zSGFiaWxpdGFyW2VsVG9rZW5UcmltZWFkb107XHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxcZCtcXC4/XFxkKiQvLnRlc3QoZWxUb2tlblRyaW1lYWRvKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZWxUb2tlblxyXG4gICAgICAgIH0gZWxzZSBpZiAoL15cXFcrJC8udGVzdChlbFRva2VuVHJpbWVhZG8pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlxccyskLy50ZXN0KGVsVG9rZW4pKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBlbFRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnaGVscGVycy5udWxsMnplcm8odmFsb3Jlcy4nICsgZWxUb2tlbiArICcpJztcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGN1ZXJwbztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmNpb25Db21waWxhZGE8VD4oY29uanVudG9EZUZ1bmNpb25lczogeyBba2V5OiBzdHJpbmddOiAodmFsb3JlczogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkgPT4gVCB9KSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnM6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSkge1xyXG4gICAgICAgICAgICB2YXIgY3VlcnBvID0gbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcztcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIC8vIHZhciBjdWVycG8gPSBtaW5pQ29tcGlsYWRvclNRbEpzKG5vbWJyZUZ1bmNpb25Db21vRXhwcmVzaW9uSnMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGludGVybmFsRnVuID0gbmV3IEZ1bmN0aW9uKCd2YWxvcmVzJywgJ2hlbHBlcnMnLCAncmV0dXJuICcgKyBjdWVycG8pO1xyXG4gICAgICAgICAgICAgICAgY29uanVudG9EZUZ1bmNpb25lc1tub21icmVGdW5jaW9uQ29tb0V4cHJlc2lvbkpzXSA9IGZ1bmN0aW9uICh2YWxvcmVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVybmFsRnVuKHZhbG9yZXMsIGhlbHBlcnNDYXNpbGxlcm9zKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0VSUk9SIEVKRUNVQ0NJT04gRVhQUkVTSU9OIEVYVEVSTkEgJywgbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY3VlcnBvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codmFsb3Jlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRVJST1IgQ09NUElMQUNJT04gRVhQUkVTSU9OIEVYVEVSTkEgJywgbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25KcywgZXhwZWN0ZWQoZXJyKSlcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1ZXJwbyk7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvbmp1bnRvRGVGdW5jaW9uZXNbbm9tYnJlRnVuY2lvbkNvbW9FeHByZXNpb25Kc107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBnZXRGdW5jaW9uSGFiaWxpdGFyID0gZ2V0RnVuY2lvbkNvbXBpbGFkYShmdW5jaW9uZXNIYWJpbGl0YXIpO1xyXG5leHBvcnQgY29uc3QgZ2V0RnVuY2lvblZhbG9yYXIgPSBnZXRGdW5jaW9uQ29tcGlsYWRhKGZ1bmNpb25lc1ZhbG9yYXIpO1xyXG5cclxuXHJcbnZhciByb3dWYWxpZGF0b3IgPSBnZXRSb3dWYWxpZGF0b3I8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPih7IGdldEZ1bmNpb25IYWJpbGl0YXIsIGdldEZ1bmNpb25WYWxvcmFyIH0pXHJcbmV4cG9ydCB2YXIgYnVzY2FyTm9SZWFFblJlc3B1ZXN0YXMgPSAodW5pZGFkZXNBUmVjb3JyZXJQcm06IElkVW5pZGFkQW5hbGlzaXNbXSwgdW5pZGFkQW5hbGlzaXM6IFVuaWRhZEFuYWxpc2lzLCByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBub1JlYXNUYXJlYTogYW55W10sIG5vbWJOb1JlYTogc3RyaW5nKVxyXG4gICAgOiB7IG5yY29kaWdvOiBzdHJpbmcgfCBudWxsLCBlc3ZhbG9yOiBib29sZWFuIH0gPT4ge1xyXG4gICAgdmFyIG5yY29kaWdvOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHZhciBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICB2YXIgcnZhbG9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHZhciBydmFyaWFibGU6IHN0cmluZztcclxuICAgIHZhciBybm9yZWE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgLy8gdmFyIHJlc3VsdD17bnJjb2Q6U3RyaW5nLCBlc3ZhbDpCb29sZWFufTtcclxuICAgIGlmICh1bmlkYWRlc0FSZWNvcnJlclBybS5pbmNsdWRlcyh1bmlkYWRBbmFsaXNpcy51bmlkYWRfYW5hbGlzaXMpKSB7XHJcbiAgICAgICAgZm9yIChsZXQgbm9SZWEgb2Ygbm9SZWFzVGFyZWEpIHsgLy9lc3RydWN0dXJhLm5vUmVhcywgZXN0cnVjdHVyYS5ub1JlYXNTdXBcclxuICAgICAgICAgICAgaWYgKG5vbWJOb1JlYSA9PSAnbm9fcmVhJykge1xyXG4gICAgICAgICAgICAgICAgdmFyIHsgdmFyaWFibGUsIHZhbG9yLCBub19yZWEgfSA9IG5vUmVhO1xyXG4gICAgICAgICAgICAgICAgcm5vcmVhID0gbm9fcmVhO1xyXG4gICAgICAgICAgICAgICAgcnZhbG9yID0gdmFsb3I7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGUgPSB2YXJpYWJsZTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhciB7IHZhcmlhYmxlX3N1cCwgdmFsb3Jfc3VwLCBub19yZWFfc3VwIH0gPSBub1JlYTtcclxuICAgICAgICAgICAgICAgIHJub3JlYSA9IG5vX3JlYV9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFsb3IgPSB2YWxvcl9zdXA7XHJcbiAgICAgICAgICAgICAgICBydmFyaWFibGUgPSB2YXJpYWJsZV9zdXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbcnZhcmlhYmxlIGFzIElkVmFyaWFibGVdID09IHJ2YWxvcikge1xyXG4gICAgICAgICAgICAgICAgbnJjb2RpZ28gPSBybm9yZWE7ICAvL25vX3JlYSwgbm9fcmVhX3N1cFxyXG4gICAgICAgICAgICAgICAgZXN2YWxvciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBucmNvZGlnbyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBlc3ZhbG9yID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCB1YSBvZiAobGlrZUFyKHVuaWRhZEFuYWxpc2lzPy5oaWphcykuYXJyYXkoKSkpIHtcclxuICAgICAgICBpZiAodWE/LnVuaWRhZF9hbmFsaXNpcyAmJiByZXNwdWVzdGFzW3VhLnVuaWRhZF9hbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCByZXNwdWVzdGFzSGlqYXMgb2YgaXRlcmF0b3IocmVzcHVlc3Rhc1t1YT8udW5pZGFkX2FuYWxpc2lzXSA/PyBbXSkpIHtcclxuICAgICAgICAgICAgICAgIGxldCByZXN1bHQgPSBidXNjYXJOb1JlYUVuUmVzcHVlc3Rhcyh1bmlkYWRlc0FSZWNvcnJlclBybSwgdWEsIHJlc3B1ZXN0YXNIaWphcywgbm9SZWFzVGFyZWEsIG5vbWJOb1JlYSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVzdmFsb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbyA9IHJlc3VsdC5ucmNvZGlnbztcclxuICAgICAgICAgICAgICAgICAgICBlc3ZhbG9yID0gcmVzdWx0LmVzdmFsb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgbnJjb2RpZ28sIGVzdmFsb3IgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBucmNvZGlnbyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgZXN2YWxvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiB7bnJjb2RpZ28sIGVzdmFsb3J9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4geyBucmNvZGlnbywgZXN2YWxvciB9XHJcbn1cclxuXHJcblxyXG5cclxuZXhwb3J0IHZhciBkZWZPcGVyYXRpdm86IERlZk9wZXJhdGl2byA9IHtcclxuICAgIGVzTm9SZWE6IChfcmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4ge1xyXG4gICAgICAgIC8vSU1QTEVNRU5UQVIgRU4gT1BFUkFUSVZPXHJcbiAgICAgICAgdmFyIGVzTm9SZWEgPSBmYWxzZTtcclxuICAgICAgICB2YXIgY29kTm9SZWE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZE5vUmVhLCBlc05vUmVhIH07XHJcbiAgICB9LFxyXG4gICAgZXNOb1JlYVN1cDogKF9yZXNwdWVzdGFzOiBSZXNwdWVzdGFzKSA9PiB7XHJcbiAgICAgICAgLy9JTVBMRU1FTlRBUiBFTiBPUEVSQVRJVk9cclxuICAgICAgICB2YXIgZXNOb1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHsgY29kTm9SZWFTdXAsIGVzTm9SZWFTdXAgfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYSA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWE6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZFJlYSwgZXNSZWEgfVxyXG4gICAgfSxcclxuICAgIGVzUmVhbGl6YWRhU3VwOiAoX3Jlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHtcclxuICAgICAgICAvL0lNUExFTUVOVEFSIEVOIE9QRVJBVElWT1xyXG4gICAgICAgIHZhciBlc1JlYVN1cCA9IGZhbHNlO1xyXG4gICAgICAgIHZhciBjb2RSZWFTdXA6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB7IGNvZFJlYVN1cCwgZXNSZWFTdXAgfVxyXG4gICAgfSxcclxuICAgIFVBcHJpbmNpcGFsOiAnJyBhcyBJZFVuaWRhZEFuYWxpc2lzLFxyXG4gICAgZGVmVUE6IHt9IGFzIHsgW2kgaW4gSWRVbmlkYWRBbmFsaXNpc106IHsgcGs6IElkVmFyaWFibGUsIGluY2x1aWRhczogSWRVbmlkYWRBbmFsaXNpc1tdLCBpZHNGb3I6IElkRm9ybXVsYXJpb1tdIH0gfSxcclxuICAgIGRlZkZvcjoge30gYXMgeyBbZiBpbiBJZEZvcm11bGFyaW9dOiB7LyphcmJvbFVBOklkVW5pZGFkQW5hbGlzaXNbXSwgKi8gaGVybWFubz86IHRydWUgfSB9XHJcbn1cclxuLy8vLy8gQUJBSk8gZGUgZXN0YSBsw61uZWEgbm8gcHVlZGUgaGFiZXIgb3Ryb3Mgbm9tYnJlcyBkZSB2YXJpYWJsZXMgbyBmb3JtdWxhcmlvcyBvIGNhc2lsbGVyb3MgZW4gZ2VuZXJhbFxyXG5cclxuZXhwb3J0IHZhciBzZXRDYWxjdWxvUmVhTm9SZWEgPSAoXHJcbiAgICBlc05vUmVhOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2ROb1JlYTogc3RyaW5nIHwgbnVsbCwgZXNOb1JlYTogYm9vbGVhbiB9LFxyXG4gICAgZXNOb1JlYVN1cDogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHsgY29kTm9SZWFTdXA6IHN0cmluZyB8IG51bGwsIGVzTm9SZWFTdXA6IGJvb2xlYW4gfSxcclxuICAgIGVzUmVhbGl6YWRhOiAocmVzcHVlc3RhczogUmVzcHVlc3RhcykgPT4geyBjb2RSZWE6IG51bWJlciB8IG51bGwsIGVzUmVhOiBib29sZWFuIH0sXHJcbiAgICBlc1JlYWxpemFkYVN1cDogKHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXMpID0+IHsgY29kUmVhU3VwOiBudW1iZXIgfCBudWxsLCBlc1JlYVN1cDogYm9vbGVhbiB9XHJcbikgPT4ge1xyXG4gICAgZGVmT3BlcmF0aXZvID0ge1xyXG4gICAgICAgIC4uLmRlZk9wZXJhdGl2byxcclxuICAgICAgICBlc05vUmVhLFxyXG4gICAgICAgIGVzTm9SZWFTdXAsXHJcbiAgICAgICAgZXNSZWFsaXphZGEsXHJcbiAgICAgICAgZXNSZWFsaXphZGFTdXBcclxuICAgIH1cclxufVxyXG5cclxuLy8gVE9ETzogR0VORVJBTElaQVJcclxudHlwZSBQZXJzb25hID0geyBwMTogc3RyaW5nLCBwMjogbnVtYmVyLCBwMzogbnVtYmVyLCBwNDogbnVtYmVyIHwgbnVsbCwgcDU6IDEgfCBudWxsLCBwNjogMSB8IG51bGwgfVxyXG5cclxuZnVuY3Rpb24gbnVtKG51bTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCk6IG51bWJlciB7XHJcbiAgICAvL0B0cy1pZ25vcmUgbGEgZ3JhY2lhIGVzIG1ldGVyIG51bSBjdWFuZG8gZXMgc3RyaW5nXHJcbiAgICBpZiAoaXNOYU4obnVtIC0gMCkpIHJldHVybiAwO1xyXG4gICAgLy9AdHMtaWdub3JlIGxhIGdyYWNpYSBlcyBtZXRlciBudW0gY3VhbmRvIGVzIHN0cmluZ1xyXG4gICAgcmV0dXJuIG51bSAtIDA7XHJcbn1cclxuXHJcbnZhciBmdW5jaW9uZXNDb25vY2lkYXM6IHsgW2sgaW4gc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZmljYXJTb3J0ZW8ob3B0czoge1xyXG4gICAgY29uZmlndXJhY2lvblNvcnRlbzogQ29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgcmVzcHVlc3Rhc1JhaXo6IFJlc3B1ZXN0YXNSYWl6XHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICB2YXJpYWJsZUFjdHVhbDogSWRWYXJpYWJsZVxyXG5cclxufSkge1xyXG4gICAgY29uc3QgcmVzZXRlYXJTb3J0ZW8gPSAob3B0czogeyByZXNwdWVzdGFzOiBSZXNwdWVzdGFzIH0pID0+IHtcclxuICAgICAgICB2YXIgeyByZXNwdWVzdGFzIH0gPSBvcHRzO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dID0gbnVsbDtcclxuICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSBudWxsO1xyXG4gICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSA9IG51bGw7XHJcbiAgICAgICAgY29uZmlndXJhY2lvblNvcnRlby5zb3J0ZWFkb19tb3N0cmFyPy5mb3JFYWNoKChtb3N0cmFyKSA9PiByZXNwdWVzdGFzW21vc3RyYXIudGFyZ2V0XSA9IG51bGwpO1xyXG4gICAgICAgIGlmICgndmFyX2xldHJhJyBpbiBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kbykge1xyXG4gICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gJiYgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcGVyIG9mIGl0ZXJhdG9yKHJlc3B1ZXN0YXNbdW5pZGFkQW5hbGlzaXNdKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBlcltjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfbGV0cmFdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgeyBjb25maWd1cmFjaW9uU29ydGVvLCB2YXJpYWJsZUFjdHVhbCwgcmVzcHVlc3RhcywgZm9yUGssIHJlc3B1ZXN0YXNSYWl6IH0gPSBvcHRzO1xyXG4gICAgdmFyIGlkRW5jID0gZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTtcclxuICAgIHZhciB7IHJlc3B1ZXN0YXNBdW1lbnRhZGFzLCByZXNwdWVzdGFzUmFpeiB9ID0gcmVzcHVlc3Rhc0ZvclBrKGZvclBrLCB0cnVlKTtcclxuICAgIHZhciBleHByX2luY29tcGxldGl0dWRfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihjb25maWd1cmFjaW9uU29ydGVvLmV4cHJfaW5jb21wbGV0aXR1ZF9qc1tyZXNwdWVzdGFzQXVtZW50YWRhcy52ZG9taW5pbyBhcyB1bmtub3duIGFzIG51bWJlcl0uZXhwcik7XHJcbiAgICB2YXIgZmlsdHJvX2Z1biA9IGdldEZ1bmNpb25IYWJpbGl0YXIoY29uZmlndXJhY2lvblNvcnRlby5maWx0cm9fanNbcmVzcHVlc3Rhc0F1bWVudGFkYXMudmRvbWluaW8gYXMgdW5rbm93biBhcyBudW1iZXJdLmV4cHIpO1xyXG4gICAgdmFyIHVuaWRhZEFuYWxpc2lzID0gY29uZmlndXJhY2lvblNvcnRlby51bmlkYWRfYW5hbGlzaXM7XHJcblxyXG4gICAgaWYgKGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1ldHJvcy5pbmNsdWRlcyh2YXJpYWJsZUFjdHVhbCkpIHtcclxuICAgICAgICB2YXIgdWFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSkgPT4gdWEudW5pZGFkX2FuYWxpc2lzID09IHVuaWRhZEFuYWxpc2lzKT8ucGFkcmU7XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGFQYWRyZSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSkgPT4gdWEudW5pZGFkX2FuYWxpc2lzID09IHVhUGFkcmUpPy5wa19hZ3JlZ2FkYVxyXG4gICAgICAgIGlmIChlc3RydWN0dXJhLmNvblJlYUhvZ2FyKSB7XHJcbiAgICAgICAgICAgIGlmICh1YVBhZHJlICYmIHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdKSB7XHJcbiAgICAgICAgICAgICAgICAvL0B0cy1pZ25vcmUgcGtBZ3JlZ2FkYVBhZHJlIGV4aXN0ZSBlIGluZGljYSBsYSBwb3NpY2lvbiBkZWwgcGFkcmVcclxuICAgICAgICAgICAgICAgIHZhciBwYWRyZSA9IHJlc3B1ZXN0YXNBdW1lbnRhZGFzW3VhUGFkcmVdW051bWJlcihyZXNwdWVzdGFzQXVtZW50YWRhc1twa0FncmVnYWRhUGFkcmVdKSAtIDFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWN0dWFsICE9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYWRyZVtjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3RvdGFsXSA9IGxpa2VBcihwYWRyZVt1bmlkYWRBbmFsaXNpc10gfHwgW10pLmFycmF5KCkubGVuZ3RoOyAvL3NpIGFncmVnYSBkZXNkZSBib3RvbiBhZ3JlZ2FyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNldGVhclNvcnRlbyh7IHJlc3B1ZXN0YXM6IHBhZHJlIH0pO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3RhcyA9IHBhZHJlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHVhUGFkcmUgJiYgcmVzcHVlc3Rhc1JhaXopIHtcclxuICAgICAgICAgICAgICAgIC8vQHRzLWlnbm9yZSBwa0FncmVnYWRhUGFkcmUgZXhpc3RlIGUgaW5kaWNhIGxhIHBvc2ljaW9uIGRlbCBwYWRyZVxyXG4gICAgICAgICAgICAgICAgdmFyIHBhZHJlID0gcmVzcHVlc3Rhc1JhaXo7XHJcbiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVBY3R1YWwgIT0gY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhZHJlW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gbGlrZUFyKHBhZHJlW3VuaWRhZEFuYWxpc2lzXSB8fCBbXSkuYXJyYXkoKS5sZW5ndGg7IC8vc2kgYWdyZWdhIGRlc2RlIGJvdG9uIGFncmVnYXJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhczogcGFkcmUgfSk7XHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzID0gcGFkcmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gIT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChyZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBpbnN0YW5jZW9mIEFycmF5KSB7XHJcbiAgICAgICAgICAgIHZhciByZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW3VuaWRhZEFuYWxpc2lzXSBhcyBSZXNwdWVzdGFzW11cclxuICAgICAgICAgICAgaWYgKHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5kaXNwYXJhZG9yXSAhPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmRpc3BhcmFkb3JdID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdID0gcmVzcHVlc3Rhc1VBLmxlbmd0aCArIDFcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc2V0ZWFyU29ydGVvKHsgcmVzcHVlc3RhcyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY2FudGlkYWRUb3RhbCA9IE51bWJlcihyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfdG90YWxdKTtcclxuICAgICAgICAgICAgaWYgKGNhbnRpZGFkVG90YWwgPCByZXNwdWVzdGFzVUEubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkb2JsZSBhc2lnbmFjacOzbiBwYXJhIHF1ZSBsbyBjYXJndWUgZW4gcmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1VBID0gcmVzcHVlc3Rhc1VBLmZpbHRlcigocCwgaSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtZXRyb3Muc29tZSgocGFyYW0pID0+IHBbcGFyYW1dIHx8IGkgPD0gY2FudGlkYWRUb3RhbCAtIDEpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t1bmlkYWRBbmFsaXNpc10gPSByZXNwdWVzdGFzVUFcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB3aGlsZSAoY2FudGlkYWRUb3RhbCA+IHJlc3B1ZXN0YXNVQS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5wdXNoKHt9IGFzIFJlc3B1ZXN0YXMpXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5pbmNvbXBsZXRhc10gPSByZXNwdWVzdGFzVUEuZmlsdGVyKHAgPT4gZXhwcl9pbmNvbXBsZXRpdHVkX2Z1bihwKSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB2YXIgdmFyJHAwID0gXCIkcDBcIiBhcyBJZFZhcmlhYmxlXHJcbiAgICAgICAgICAgIGlmIChyZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uZGlzcGFyYWRvcl0gPT0gMSAmJlxyXG4gICAgICAgICAgICAgICAgIXJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dICYmXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uaW5jb21wbGV0YXNdID09IDBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc29ydGVhciA9IHJlc3B1ZXN0YXNVQS5maWx0ZXIocCA9PiBmaWx0cm9fZnVuKHApKTtcclxuICAgICAgICAgICAgICAgIGlmIChzb3J0ZWFyLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNVQS5mb3JFYWNoKChwZXIsIGkpID0+IHBlclt2YXIkcDBdID0gaSArIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8ub3JkZW4ucHVzaCh7IHZhcmlhYmxlOiB2YXIkcDAsIG9yZGVuOiAxIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHNvcnRlYXIuc29ydChjb21wYXJlRm9yT3JkZXIoY29uZmlndXJhY2lvblNvcnRlby5vcmRlbi5tYXAoZWxlbSA9PiAoeyBjb2x1bW46IGVsZW0udmFyaWFibGUsIG9yZGVyOiBlbGVtLm9yZGVuIH0pKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpY2lvblNvcnRlYWRhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby5tZXRvZG8gPT0gJ2hhc2gnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTk8gSU1QTEVNRU5UQURPJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qcG9zaWNpb25Tb3J0ZWFkYT0oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby52YXJfY29lZi5yZWR1Y2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzdW0sIHBhaXIpPT5zdW0gKyBkYXRvc1ZpdmllbmRhLnRlbVtwYWlyLnZhcl0gKiBwYWlyLmNvZWYpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgJSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby5kaXZpc29yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkgJSBzb3J0ZWFyLmxlbmd0aCovXHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxldHJhID0gJ0EnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJMZXRyYTogSWRWYXJpYWJsZSA9IGNvbmZpZ3VyYWNpb25Tb3J0ZW8ucGFyYW1fbWV0b2RvLnZhcl9sZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcGVyc29uYSBvZiBzb3J0ZWFyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzVUEuZmluZCgoX3BlciwgaSkgPT4gaSA9PSBwZXJzb25hW3ZhciRwMF0gYXMgbnVtYmVyIC0gMSkhW3ZhckxldHJhXSA9IGxldHJhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uYVt2YXJMZXRyYV0gPSBsZXRyYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldHJhID0gU3RyaW5nLmZyb21DaGFyQ29kZShsZXRyYS5jaGFyQ29kZUF0KDApICsgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhYmxhQWxlYXRvcmlhTWllbWJyb3MgPSBjb25maWd1cmFjaW9uU29ydGVvLnBhcmFtX21ldG9kby50YWJsYS5tYXAoKGxpc3RhKSA9PiBsaXN0YS5zcGxpdCgnJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdG8gPSBpZEVuYyAlIDEwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29sdW1uYVRhYmxhQWxlYXRvcmlhID0gcmVzdG8gPyByZXN0byAtIDEgOiA5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29ydGVhci5sZW5ndGggPiB0YWJsYUFsZWF0b3JpYU1pZW1icm9zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydGVhci5zcGxpY2UodGFibGFBbGVhdG9yaWFNaWVtYnJvcy5sZW5ndGgpIC8vZGVzY2FydG8gY2FuZGlkYXRvcyBzaSBzb24gbcOhcyBxdWUgbG8gcXVlIHBlcm1pdGUgbGEgdGFibGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlsYVRhYmxhQWxlYXRvcmlhID0gc29ydGVhci5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGV0cmFTZWxlY2Npb25hZGEgPSB0YWJsYUFsZWF0b3JpYU1pZW1icm9zW2ZpbGFUYWJsYUFsZWF0b3JpYV1bY29sdW1uYVRhYmxhQWxlYXRvcmlhXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaWNpb25Tb3J0ZWFkYSA9IHJlc3B1ZXN0YXNVQS5maW5kSW5kZXgoKHA6IFJlc3B1ZXN0YXMpID0+IHBbdmFyTGV0cmFdID09IGxldHJhU2VsZWNjaW9uYWRhKSArIDE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dID0gcG9zaWNpb25Tb3J0ZWFkYTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLmNhbnRpZGFkX3NvcnRlYWJsZXNdID0gc29ydGVhci5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWNpb25Tb3J0ZW8uc29ydGVhZG9fbW9zdHJhcj8uZm9yRWFjaCgobW9zdHJhcikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3B1ZXN0YXNbbW9zdHJhci50YXJnZXRdID0gcmVzcHVlc3Rhc1VBW3Jlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5yZXN1bHRhZG9dIGFzIG51bWJlciAtIDFdW21vc3RyYXIuc291cmNlXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8uY2FudGlkYWRfc29ydGVhYmxlc10gPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3B1ZXN0YXNbY29uZmlndXJhY2lvblNvcnRlby5jYW50aWRhZF90b3RhbF0gPSByZXNwdWVzdGFzVUEubGVuZ3RoIHx8IG51bGw7IC8vbm8gcXVlcmVtb3MgZWwgdmFsb3IgMFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzW2NvbmZpZ3VyYWNpb25Tb3J0ZW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQV0gPSAnb2snO1xyXG4gICAgICAgICAgICBpZiAoY29uZmlndXJhY2lvblNvcnRlby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCkge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tjb25maWd1cmFjaW9uU29ydGVvLnZhcmlhYmxlQm90b25Gb3JtdWxhcmlvVUFJbmRpdmlkdWFsXSA9ICdvayc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgbm9kb0FjdHVhbDogUmVzcHVlc3RhcyB8IFJlc3B1ZXN0YXNbXSwgdW5pZGFkX2FuYWxpc2lzOiBJZFVuaWRhZEFuYWxpc2lzLCBmb3JQa0FjdW11bGFkbzogRm9yUGspIHtcclxuICAgIHZhciB1YURlZiA9IGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXNbdW5pZGFkX2FuYWxpc2lzXTtcclxuICAgIHZhciBlc0FycmF5ID0gbm9kb0FjdHVhbCBpbnN0YW5jZW9mIEFycmF5O1xyXG4gICAgdmFyIGNvbmp1bnRvOiBSZXNwdWVzdGFzW10gPSBlc0FycmF5ID8gbm9kb0FjdHVhbCBhcyBSZXNwdWVzdGFzW10gOiBbbm9kb0FjdHVhbCBhcyBSZXNwdWVzdGFzXTtcclxuICAgIFxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25qdW50by5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhciByZXNwID0gY29uanVudG9baV07XHJcbiAgICAgICAgaWYgKCFyZXNwKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgdmFyIG51bSA9IGVzQXJyYXkgPyBpICsgMSA6IChmb3JQa0FjdW11bGFkb1t1YURlZi5wa19hZ3JlZ2FkYV0gfHwgMSk7XHJcbiAgICAgICAgdmFyIGlkRm9ybXVsYXJpb3MgPSBPYmplY3Qua2V5cyhlc3RydWN0dXJhLmZvcm11bGFyaW9zKS5maWx0ZXIoa2V5ID0+IGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3Nba2V5IGFzIElkRm9ybXVsYXJpb10uY2FzaWxsZXJvcy51bmlkYWRfYW5hbGlzaXMgPT09IHVuaWRhZF9hbmFsaXNpcyk7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZEZvcm11bGFyaW8gb2YgaWRGb3JtdWxhcmlvcykge1xyXG4gICAgICAgICAgICB2YXIgbWlGb3JQazogRm9yUGsgPSB7IC4uLmZvclBrQWN1bXVsYWRvLCBbdWFEZWYucGtfYWdyZWdhZGFdOiBudW0sIGZvcm11bGFyaW86IGlkRm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW8gfHwgZm9yUGtBY3VtdWxhZG8uZm9ybXVsYXJpbyB9O1xyXG4gICAgICAgICAgICBpZiAoZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcykge1xyXG4gICAgICAgICAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlcyhyZXNwdWVzdGFzUmFpeiwgbWlGb3JQayk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVzcGVjaWFsZXMuY2FsY3VsYXJWYXJpYWJsZXNFc3BlY2lmaWNhc09wZXJhdGl2bykge1xyXG4gICAgICAgICAgICAgICAgZXNwZWNpYWxlcy5jYWxjdWxhclZhcmlhYmxlc0VzcGVjaWZpY2FzT3BlcmF0aXZvKHJlc3B1ZXN0YXNSYWl6LCBtaUZvclBrKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGhpamFzID0gbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1ID0+IHUucGFkcmUgPT09IHVuaWRhZF9hbmFsaXNpcykua2V5cygpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciB1YUhpamEgb2YgaGlqYXMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBoaWphc1Jlc3AgPSByZXNwW3VhSGlqYSBhcyBJZFVuaWRhZEFuYWxpc2lzXTtcclxuICAgICAgICAgICAgICAgIGlmIChoaWphc1Jlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICBiYXJyZXJTdWJBcmJvbChyZXNwdWVzdGFzUmFpeiwgaGlqYXNSZXNwIGFzIFJlc3B1ZXN0YXNbXSwgdWFIaWphIGFzIElkVW5pZGFkQW5hbGlzaXMsIG1pRm9yUGspO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVjYWxjdWxhclRvZG9FbEFyYm9sKHJlc3B1ZXN0YXNSYWl6OiBSZXNwdWVzdGFzUmFpeiwgZm9yUGtSYWl6OiBGb3JQaykge1xyXG4gICAgdmFyIHVhUHBhbCA9IE9iamVjdC5rZXlzKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbmQoa2V5ID0+ICFlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzW2tleSBhcyBJZFVuaWRhZEFuYWxpc2lzXS5wYWRyZSkgYXMgSWRVbmlkYWRBbmFsaXNpcztcclxuICAgIGJhcnJlclN1YkFyYm9sKHJlc3B1ZXN0YXNSYWl6LCByZXNwdWVzdGFzUmFpeiwgdWFQcGFsLCBmb3JQa1JhaXopO1xyXG4gICAgYmFycmVyU3ViQXJib2wocmVzcHVlc3Rhc1JhaXosIHJlc3B1ZXN0YXNSYWl6LCB1YVBwYWwsIGZvclBrUmFpeik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIGZvcm11bGFyaW9zOiB7IFtub21icmVGb3JtdWxhcmlvIGluIElkRm9ybXVsYXJpb106IEluZm9Gb3JtdWxhcmlvIH0sXHJcbiAgICByZXNwdWVzdGFzOiBSZXNwdWVzdGFzLFxyXG4gICAgVUE6IElkVW5pZGFkQW5hbGlzaXMsXHJcbiAgICBmb3JQazogRm9yUGssXHJcbiAgICByZXNwdWVzdGFzQXVtZW50YWRhczogUmVzcHVlc3RhcywgLy8gaW5jbHV5ZW4gbGEgZGUgdG9kb3MgbG9zIHBhZHJlcyB5IGFuc2VzdHJvcyxcclxuICAgIHJlc3B1ZXN0YXNQYWRyZTogUmVzcHVlc3RhcyB8IG51bGwsXHJcbiAgICBvcHRzOiBPcGNpb25lc1Jvd1ZhbGlkYXRvcixcclxuKSB7XHJcbiAgICAvLyByZWNvcnJpZW5kIFVBIHBlcnNvbmFzIHkgbWFzY290YXNcclxuICAgIGZvciAodmFyIFVBaW5jbHVpZGEgb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pbmNsdWlkYXMpIHtcclxuICAgICAgICB2YXIgcGtOdWV2YSA9IGRlZk9wZXJhdGl2by5kZWZVQVtVQWluY2x1aWRhXS5waztcclxuICAgICAgICB2YXIgY29uanVudG9SZXNwdWVzdGFzVUEgPSByZXNwdWVzdGFzW1VBaW5jbHVpZGFdO1xyXG4gICAgICAgIGxpa2VBcihjb25qdW50b1Jlc3B1ZXN0YXNVQSkuZm9yRWFjaCgocmVzcHVlc3Rhc0hpam8sIHZhbG9yUGtPUG9zaWNpb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoXHJcbiAgICAgICAgICAgICAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcixcclxuICAgICAgICAgICAgICAgIGZvcm11bGFyaW9zLFxyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0hpam8sXHJcbiAgICAgICAgICAgICAgICBVQWluY2x1aWRhLFxyXG4gICAgICAgICAgICAgICAgeyAuLi5mb3JQaywgW3BrTnVldmFdOiB2YWxvclBrIH0sXHJcbiAgICAgICAgICAgICAgICB7IC4uLnJlc3B1ZXN0YXNBdW1lbnRhZGFzLCAuLi5yZXNwdWVzdGFzSGlqbywgW3BrTnVldmFdOiB2YWxvclBrIH0sXHJcbiAgICAgICAgICAgICAgICByZXNwdWVzdGFzLFxyXG4gICAgICAgICAgICAgICAgb3B0c1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcbiAgICAvLyBTMSAsIEExXHJcbiAgICBmb3IgKHZhciBlc0hlcm1hbm8gb2YgW3RydWUsIGZhbHNlXSkge1xyXG4gICAgICAgIGZvciAodmFyIGZvcm11bGFyaW8gb2YgZGVmT3BlcmF0aXZvLmRlZlVBW1VBXS5pZHNGb3IpIGlmICghIWVzSGVybWFubyA9PSAhIWRlZk9wZXJhdGl2by5kZWZGb3JbZm9ybXVsYXJpb10uaGVybWFubykge1xyXG4gICAgICAgICAgICB2YXIgcGxhaW5Gb3JQazogUGxhaW5Gb3JQayA9IHRvUGxhaW5Gb3JQayh7IC4uLmZvclBrLCBmb3JtdWxhcmlvIH0pXHJcbiAgICAgICAgICAgIHZhciBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzID0gMTA7XHJcbiAgICAgICAgICAgIHZhciB2YXJBdXRvSW5ncmVzYWRhcyA9IFtdO1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaHVib0F1dG9pbmdyZXNvcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa10gPVxyXG4gICAgICAgICAgICAgICAgICAgIHJvd1ZhbGlkYXRvcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBtYXJjYUZpbjogJ2ZpbicsIC4uLmZvcm11bGFyaW9zW2Zvcm11bGFyaW9dLmVzdHJ1Y3R1cmFSb3dWYWxpZGF0b3IgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHNcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICB2YXIgeyByZXN1bWVuLCBhdXRvSW5ncmVzYWRhcyB9ID0gZmVlZGJhY2tSb3dWYWxpZGF0b3JbcGxhaW5Gb3JQa107XHJcbiAgICAgICAgICAgICAgICB2YXIgdmFyTmFtZTogSWRWYXJpYWJsZTtcclxuICAgICAgICAgICAgICAgIGlmIChhdXRvSW5ncmVzYWRhcyAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXJOYW1lIGluIGF1dG9JbmdyZXNhZGFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjYW1iaW8gPSByZXNwdWVzdGFzW3Zhck5hbWVdICE9PSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhbWJpbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1t2YXJOYW1lXSA9IGF1dG9JbmdyZXNhZGFzW3Zhck5hbWVdIGFzIFZhbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0F1bWVudGFkYXNbdmFyTmFtZV0gPSBhdXRvSW5ncmVzYWRhc1t2YXJOYW1lXSBhcyBWYWxvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhckF1dG9JbmdyZXNhZGFzLnB1c2godmFyTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodWJvQXV0b2luZ3Jlc29zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAoaHVib0F1dG9pbmdyZXNvcyAmJiBtYXhQYXNvc0F1dG9pbmdyZXNhZGFzLS0gPiAwKTtcclxuICAgICAgICAgICAgdmFyQXV0b0luZ3Jlc2FkYXMuZm9yRWFjaChfdmFybmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBmZWVkYmFja1Jvd1ZhbGlkYXRvcltwbGFpbkZvclBrXS5lc3RhZG9zW192YXJuYW1lIGFzIElkVmFyaWFibGVdID0gJ2FjdHVhbCc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIHZhciBCRl92YXJuYW1lID0gJyRCLicgKyBmb3JtdWxhcmlvIGFzIElkVmFyaWFibGVcclxuICAgICAgICAgICAgdmFyIGZvcm1QcmluY2lwYWxGb3JWaXZpZW5kYSA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZm9yUGtbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICAgICAgICAgIGlmIChlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiAhZXN0cnVjdHVyYS5jb25maWdTb3J0ZW9bZm9ybVByaW5jaXBhbEZvclZpdmllbmRhXSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBoYXkgY29uZmlndXJhY2lvbiBkZSBzb3J0ZW8gcGFyYSBlbCBmb3JtdWxhcmlvICR7Zm9ybVByaW5jaXBhbEZvclZpdmllbmRhfWApXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tmb3JtUHJpbmNpcGFsRm9yVml2aWVuZGFdO1xyXG4gICAgICAgICAgICB2YXIgcmVzdW1lbk9yTnVsbCA9XHJcbiAgICAgICAgICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby52YXJpYWJsZUJvdG9uRm9ybXVsYXJpb1VBSW5kaXZpZHVhbCAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8udmFyaWFibGVCb3RvbkZvcm11bGFyaW9VQUluZGl2aWR1YWwgPT0gQkZfdmFybmFtZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgJ29rJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogcmVzdW1lbiA9PSAndmFjaW8nID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHJlc3VtZW5cclxuICAgICAgICAgICAgaWYgKGVzSGVybWFubykge1xyXG4gICAgICAgICAgICAgICAgcmVzcHVlc3Rhc1tCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGwgPT0gJ29rJyA/ICdvaycgOiBudWxsO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3B1ZXN0YXNQYWRyZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAvL3Jlc3B1ZXN0YXNQYWRyZVtCRl92YXJuYW1lXSA9IHJlc3VtZW5Pck51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkobnVtYmVyT3JTdHJpbmc6IG51bWJlciB8IHN0cmluZywgb2JqZWN0OiBvYmplY3QgfCBhbnlbXSk6IChudW1iZXIgfCBzdHJpbmcpIHtcclxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZXN0b3kgdXNhbmRvIGlzTmFOIHBhcmEgdmVyIHNpIGVzIG8gbm8gdW4gbsO6bWVybyBzdW1hYmxlXHJcbiAgICBpZiAoaXNOYU4obnVtYmVyT3JTdHJpbmcpKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bWJlck9yU3RyaW5nO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIE51bWJlcihudW1iZXJPclN0cmluZykgKyAob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkgPyAxIDogMCk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgZ2V0TWFpbkZvcm1Gb3JWaXZpZW5kYSA9ICh2YWx1ZVBrUmFpejogVmFsdWVQa1JhaXopOiBJZEZvcm11bGFyaW8gPT4ge1xyXG4gICAgcmV0dXJuIGRhdG9zQnlQYXNzLmluZm9ybWFjaW9uSGRyW3ZhbHVlUGtSYWl6XS50YXJlYS5tYWluX2Zvcm1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tIb2phRGVSdXRhKCkge1xyXG4gICAgbGlrZUFyKGVzdHJ1Y3R1cmEudW5pZGFkZXNfYW5hbGlzaXMpLmZpbHRlcih1YURlZiA9PiAhdWFEZWYucGFkcmUpLmZvckVhY2godWFEZWYgPT4ge1xyXG4gICAgICAgIHZhciBlc1ByaW5jaXBhbCA9IChmOiBGb3JtdWxhcmlvLCBlbmM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZm9ybXVsYXJpb1ByaW5jaXBhbCA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEoZW5jKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZvcm11bGFyaW9QcmluY2lwYWwgPyBmb3JtdWxhcmlvUHJpbmNpcGFsID09IGYuaWRfY2FzaWxsZXJvIDogZi5mb3JtdWxhcmlvX3ByaW5jaXBhbFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9hY8OhIGhheSBxdWUgc2FuaXRpemFyIHBvcnF1ZSBldmlkZW50ZW1lbnRlIHB1ZWRlIHZlbmlyIGNvbiBoYXNocyBkZSBlbmN1ZXN0YXMgc2luIGluZm8gZWwgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1xyXG4gICAgICAgIHZhciBjb25qdW50b1Jlc3B1ZXN0YXNVQSA9IGRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbdWFEZWYudW5pZGFkX2FuYWxpc2lzXVxyXG4gICAgICAgIGJlaW5nQXJyYXkoY29uanVudG9SZXNwdWVzdGFzVUEpLmZvckVhY2goKHJlc3B1ZXN0YXMsIHZhbG9yUGtPUG9zaWNpb24pID0+IHtcclxuICAgICAgICAgICAgdmFyIHZhbG9yUGsgPSBudW1iZXJPclN0cmluZ0luY0lmQXJyYXkodmFsb3JQa09Qb3NpY2lvbiwgY29uanVudG9SZXNwdWVzdGFzVUEpO1xyXG4gICAgICAgICAgICBsaWtlQXIoZXN0cnVjdHVyYS5mb3JtdWxhcmlvcykuZmlsdGVyKGYgPT4gZi5jYXNpbGxlcm9zLnVuaWRhZF9hbmFsaXNpcyA9PSB1YURlZi51bmlkYWRfYW5hbGlzaXMgJiYgZXNQcmluY2lwYWwoZi5jYXNpbGxlcm9zLCB2YWxvclBrIGFzIG51bWJlcikpLmZvckVhY2goKF9kZWZGLCBmb3JtdWxhcmlvKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9yUGtSYWl6ID0geyBmb3JtdWxhcmlvLCBbdWFEZWYucGtfYWdyZWdhZGFdOiB2YWxvclBrIH0gYXMgRm9yUGtSYWl6XHJcbiAgICAgICAgICAgICAgICBjYWxjdWxhckZlZWRiYWNrKHJlc3B1ZXN0YXMsIGZvclBrUmFpeiwge30pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0pXHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShcclxuICAgIGZlZWRiYWNrUm93VmFsaWRhdG9yOiB7IFtmb3JtdWxhcmlvIGluIFBsYWluRm9yUGtdOiBGb3JtU3RydWN0dXJlU3RhdGU8SWRWYXJpYWJsZSwgVmFsb3IsIElkRmluPiB9LFxyXG4gICAgZm9ybXVsYXJpb3M6IHsgW25vbWJyZUZvcm11bGFyaW8gaW4gSWRGb3JtdWxhcmlvXTogSW5mb0Zvcm11bGFyaW8gfSxcclxuICAgIGZvclBrUmFpejogRm9yUGtSYWl6LFxyXG4gICAgcmVzcHVlc3RhczogUmVzcHVlc3RhcyxcclxuICAgIG9wdHM6IE9wY2lvbmVzUm93VmFsaWRhdG9yXHJcbikge1xyXG4gICAgdmFyIGZvclBrOiBGb3JQayA9IHsgLi4uZm9yUGtSYWl6IH07XHJcbiAgICBjYWxjdWxhckZlZWRiYWNrVW5pZGFkQW5hbGlzaXMoZmVlZGJhY2tSb3dWYWxpZGF0b3IsIGZvcm11bGFyaW9zLCByZXNwdWVzdGFzLCBkZWZPcGVyYXRpdm8uVUFwcmluY2lwYWwsIGZvclBrLCByZXNwdWVzdGFzLCBudWxsLCBvcHRzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2FsY3VsYXJGZWVkYmFjayhyZXNwdWVzdGFzOiBSZXNwdWVzdGFzLCBmb3JQa1JhaXo6IEZvclBrUmFpeiwgb3B0czogT3BjaW9uZXNSb3dWYWxpZGF0b3IpIHtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvO1xyXG4gICAgLy8gQHRzLWlnbm9yZSBQYXJ0aWFsXHJcbiAgICB2YXIgbnVldm9zUm93czogeyBbeCBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIElkRmluPiB9ID0ge31cclxuICAgIGNhbGN1bGFyRmVlZGJhY2tFbmN1ZXN0YShudWV2b3NSb3dzLCBlc3RydWN0dXJhLmZvcm11bGFyaW9zLCBmb3JQa1JhaXosIHJlc3B1ZXN0YXMsIG9wdHMpO1xyXG4gICAgZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IgPSBsaWtlQXIoZGF0b3NCeVBhc3MuZmVlZGJhY2tSb3dWYWxpZGF0b3IpLmZpbHRlcigoX2ZlZWRiYWNrOiBhbnksIHBsYWluUGs6IFBsYWluRm9yUGspID0+IEpTT04ucGFyc2UocGxhaW5QaylbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSAhPSBmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSkucGxhaW4oKTtcclxuICAgIGRhdG9zQnlQYXNzLmZlZWRiYWNrUm93VmFsaWRhdG9yID0geyAuLi5kYXRvc0J5UGFzcy5mZWVkYmFja1Jvd1ZhbGlkYXRvciwgLi4ubnVldm9zUm93cyB9O1xyXG4gICAgZGF0b3NCeVBhc3MucmVzcHVlc3Rhc1tlc3RydWN0dXJhLnVhUHBhbF1bZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF1dID0ge1xyXG4gICAgICAgIC4uLmRhdG9zQnlQYXNzLnJlc3B1ZXN0YXNbZXN0cnVjdHVyYS51YVBwYWxdW2ZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdXSxcclxuICAgICAgICAuLi5jYWxjdWxhclJlc3VtZW5WaXZpZW5kYShcclxuICAgICAgICAgICAgZm9yUGtSYWl6LFxyXG4gICAgICAgICAgICBudWV2b3NSb3dzLFxyXG4gICAgICAgICAgICByZXNwdWVzdGFzXHJcbiAgICAgICAgKVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBidXNjYXJGb3JtdWxhcmlvc0hpam9zID0gKGlkRm9ybXVsYXJpbzogSWRGb3JtdWxhcmlvIHwgdW5kZWZpbmVkLCBmb3Jtc0ZlZWRiYWNrOiBJZEZvcm11bGFyaW9bXSA9IFtdKSA9PiB7XHJcbiAgICBpZiAoaWRGb3JtdWxhcmlvKSB7XHJcbiAgICAgICAgZm9yIChsZXQgY2FzaWxsZXJvIG9mIGVzdHJ1Y3R1cmEuZm9ybXVsYXJpb3NbaWRGb3JtdWxhcmlvXS5jYXNpbGxlcm9zLmNhc2lsbGVyb3MpIHtcclxuICAgICAgICAgICAgaWYgKGNhc2lsbGVyby50aXBvYyA9PSAnQkYnKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZm9ybUhpam8gPSAoY2FzaWxsZXJvLnNhbHRvPy5zdGFydHNXaXRoKCdGOicpID8gY2FzaWxsZXJvLnNhbHRvIDogJ0Y6JyArIGNhc2lsbGVyby5zYWx0bykgYXMgSWRGb3JtdWxhcmlvO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1IaWpvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybXNGZWVkYmFjay5wdXNoKGZvcm1IaWpvKTtcclxuICAgICAgICAgICAgICAgICAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKGZvcm1IaWpvLCBmb3Jtc0ZlZWRiYWNrKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmb3Jtc0ZlZWRiYWNrO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIGdldEZvcm11bGFyaW9zRm9yVmFsdWVQa1JhaXogPSAodmFsdWVQa1JhaXo6IFZhbHVlUGtSYWl6KSA9PiB7XHJcbiAgICB2YXIgbWFpbkZvcm1Gb3JWYWx1ZVBrUmFpeiA9IGdldE1haW5Gb3JtRm9yVml2aWVuZGEodmFsdWVQa1JhaXopO1xyXG4gICAgdmFyIGZvcm1zRmVlZGJhY2sgPSBbbWFpbkZvcm1Gb3JWYWx1ZVBrUmFpel07XHJcbiAgICBidXNjYXJGb3JtdWxhcmlvc0hpam9zKG1haW5Gb3JtRm9yVmFsdWVQa1JhaXosIGZvcm1zRmVlZGJhY2spO1xyXG4gICAgcmV0dXJuIGZvcm1zRmVlZGJhY2s7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgY2FsY3VsYXJBY3R1YWxCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsIG51bUVsZW1lbnRvVUE6IG51bWJlciwgbnVtQWN0dWFsOiBudW1iZXIgfCBudWxsLCBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sIHI6IFJlc3B1ZXN0YXMpID0+XHJcbiAgICAhIShjb25maWdTb3J0ZW9Gb3JtdWxhcmlvICYmXHJcbiAgICAgICAgY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgJiZcclxuICAgICAgICBjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCA9PSBmb3JtdWxhcmlvXHJcbiAgICAgICAgP1xyXG4gICAgICAgIG51bUVsZW1lbnRvVUEgPT0gY29hbGVzY2UoXHJcbiAgICAgICAgICAgIHJbY29uZmlnU29ydGVvRm9ybXVsYXJpby5yZXN1bHRhZG9fbWFudWFsXSxcclxuICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICApXHJcbiAgICAgICAgOlxyXG4gICAgICAgIG51bUFjdHVhbCA9PSBudW1FbGVtZW50b1VBXHJcbiAgICApXHJcblxyXG5leHBvcnQgdmFyIGNhbGN1bGFyRGlzYWJsZWRCRiA9IChcclxuICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW86IENvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvIHwgbnVsbCxcclxuICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbzogQ29uZmlndXJhY2lvbkhhYmlsaXRhckJvdG9uRm9ybXVsYXJpbyB8IG51bGwsXHJcbiAgICBudW1FbGVtZW50b1VBOiBudW1iZXIsXHJcbiAgICBmb3JtdWxhcmlvOiBJZEZvcm11bGFyaW8sXHJcbiAgICByOiBSZXNwdWVzdGFzXHJcbikgPT4ge1xyXG4gICAgaWYgKGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10pIHtcclxuICAgICAgICB2YXIgZXhwcl9oYWJpbGl0YXJfZnVuID0gZ2V0RnVuY2lvbkhhYmlsaXRhcihoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bZm9ybXVsYXJpb10uZXhwcl9oYWJpbGl0YXJfYm90b25fanMpO1xyXG4gICAgICAgIHJldHVybiAhZXhwcl9oYWJpbGl0YXJfZnVuKHJbaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW2Zvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpc11bbnVtRWxlbWVudG9VQSAtIDFdKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gISEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgICAgICAoY29uZmlnU29ydGVvRm9ybXVsYXJpby5pZF9mb3JtdWxhcmlvX2luZGl2aWR1YWwgPT0gZm9ybXVsYXJpbyB8fFxyXG4gICAgICAgICAgICAgICAgYnVzY2FyRm9ybXVsYXJpb3NIaWpvcyhjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9faW5kaXZpZHVhbCkuaW5jbHVkZXMoZm9ybXVsYXJpbylcclxuICAgICAgICAgICAgKSAmJlxyXG4gICAgICAgICAgICBudW1FbGVtZW50b1VBICE9IGNvYWxlc2NlKFxyXG4gICAgICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb19tYW51YWxdLFxyXG4gICAgICAgICAgICAgICAgcltjb25maWdTb3J0ZW9Gb3JtdWxhcmlvLnJlc3VsdGFkb11cclxuICAgICAgICAgICAgKSlcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBjYWxjdWxhclBlcm1pdGVCb3JyYXJCRiA9IChjb25maWdTb3J0ZW9Gb3JtdWxhcmlvOiBDb25maWd1cmFjaW9uU29ydGVvRm9ybXVsYXJpbyB8IG51bGwsIGZvcm11bGFyaW86IElkRm9ybXVsYXJpbykgPT5cclxuICAgICEoY29uZmlnU29ydGVvRm9ybXVsYXJpbyAmJlxyXG4gICAgICAgIGNvbmZpZ1NvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsID09IGZvcm11bGFyaW8pXHJcblxyXG50eXBlIFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvLFxyXG4gICAgcmVzdW1lbkVzdGFkb1N1cDogUmVzdW1lbkVzdGFkbyxcclxuICAgIGNvZFJlYTogbnVtYmVyIHwgbnVsbCxcclxuICAgIGNvZE5vUmVhOiBzdHJpbmcgfCBudWxsLFxyXG4gICAgY29kUmVhU3VwOiBudW1iZXIgfCBudWxsXHJcbiAgICBjb2ROb1JlYVN1cDogc3RyaW5nIHwgbnVsbCxcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGFyUmVzdW1lblZpdmllbmRhKFxyXG4gICAgZm9yUGtSYWl6OiBGb3JQa1JhaXosXHJcbiAgICBmZWVkYmFja1Jvd1ZhbGlkYXRvcjogeyBbZm9ybXVsYXJpbyBpbiBQbGFpbkZvclBrXTogRm9ybVN0cnVjdHVyZVN0YXRlPElkVmFyaWFibGUsIFZhbG9yLCBJZEZpbj4gfSxcclxuICAgIHJlc3B1ZXN0YXM6IFJlc3B1ZXN0YXNcclxuKTogUmVzdWx0YWRvUmVzdW1lbiB7XHJcbiAgICB2YXIgeyBjb2RSZWEsIGVzUmVhIH0gPSBkZWZPcGVyYXRpdm8uZXNSZWFsaXphZGEocmVzcHVlc3RhcylcclxuICAgIHZhciB7IGNvZE5vUmVhLCBlc05vUmVhIH0gPSBkZWZPcGVyYXRpdm8uZXNOb1JlYShyZXNwdWVzdGFzKVxyXG4gICAgdmFyIHsgY29kUmVhU3VwLCBlc1JlYVN1cCB9ID0gZGVmT3BlcmF0aXZvLmVzUmVhbGl6YWRhU3VwKHJlc3B1ZXN0YXMpXHJcbiAgICB2YXIgeyBjb2ROb1JlYVN1cCwgZXNOb1JlYVN1cCB9ID0gZGVmT3BlcmF0aXZvLmVzTm9SZWFTdXAocmVzcHVlc3RhcylcclxuICAgIHZhciBmb3Jtc0ZlZWRiYWNrID0gZ2V0Rm9ybXVsYXJpb3NGb3JWYWx1ZVBrUmFpeihmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSk7XHJcbiAgICB2YXIgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gPSBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlbyAmJiBlc3RydWN0dXJhLmNvbmZpZ1NvcnRlb1tnZXRNYWluRm9ybUZvclZpdmllbmRhKGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdKV1cclxuICAgIHZhciBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW8gPSBlc3RydWN0dXJhLmhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbztcclxuICAgIHZhciBmZWVkQmFja1ZpdmllbmRhID0gbGlrZUFyKGZlZWRiYWNrUm93VmFsaWRhdG9yKS5maWx0ZXIoKF9yb3csIHBsYWluUGspID0+IHtcclxuICAgICAgICB2YXIgdGllbmVJbmRpdmlkdWFsID0gY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8gJiYgISEoY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19pbmRpdmlkdWFsICYmIGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUpXHJcbiAgICAgICAgdmFyIHRpZW5lQm90b25EZXNIYWJpbGl0YWJsZSA9IGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyAmJiBoYWJpbGl0YWNpb25Cb3RvbkZvcm11bGFyaW9bSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvIGFzIElkRm9ybXVsYXJpb107XHJcbiAgICAgICAgdmFyIHBrQWdyZWdhZGEgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aWVuZUJvdG9uRGVzSGFiaWxpdGFibGUpIHtcclxuICAgICAgICAgICAgcGtBZ3JlZ2FkYSA9IGxpa2VBcihlc3RydWN0dXJhLnVuaWRhZGVzX2FuYWxpc2lzKS5maW5kKCh1YSwgX2lkVUEpID0+XHJcbiAgICAgICAgICAgICAgICB1YS51bmlkYWRfYW5hbGlzaXMgPT0gaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvW0pTT04ucGFyc2UocGxhaW5QaykuZm9ybXVsYXJpbyBhcyBJZEZvcm11bGFyaW9dLnVuaWRhZF9hbmFsaXNpcyk/LnBrX2FncmVnYWRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShwbGFpblBrKVtlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdID09IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdICYmXHJcbiAgICAgICAgICAgIGZvcm1zRmVlZGJhY2suaW5jbHVkZXMoSlNPTi5wYXJzZShwbGFpblBrKS5mb3JtdWxhcmlvKSAmJlxyXG4gICAgICAgICAgICAodGllbmVCb3RvbkRlc0hhYmlsaXRhYmxlID9cclxuICAgICAgICAgICAgICAgICFjYWxjdWxhckRpc2FibGVkQkYoXHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFiaWxpdGFjaW9uQm90b25Gb3JtdWxhcmlvLFxyXG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UocGxhaW5QaylbcGtBZ3JlZ2FkYSBhcyBDYW1wb1BrXSxcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKEpTT04ucGFyc2UocGxhaW5QayksIHRydWUpLnJlc3B1ZXN0YXNBdW1lbnRhZGFzXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICA6IHRpZW5lSW5kaXZpZHVhbCA/XHJcbiAgICAgICAgICAgICAgICAgICAgIWNhbGN1bGFyRGlzYWJsZWRCRihcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhYmlsaXRhY2lvbkJvdG9uRm9ybXVsYXJpbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5wZXJzb25hLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKHBsYWluUGspLmZvcm11bGFyaW8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzdHJ1Y3R1cmEuY29uUmVhSG9nYXIgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShwbGFpblBrKS5ob2dhciA/IHJlc3B1ZXN0YXNGb3JQayh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF06IGZvclBrUmFpeltlc3RydWN0dXJhLnBrQWdyZWdhZGFVYVBwYWxdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm11bGFyaW86IGNvbmZpZ3VyYWNpb25Tb3J0ZW9Gb3JtdWxhcmlvLmlkX2Zvcm11bGFyaW9fcGFkcmUhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvZ2FyOiBKU09OLnBhcnNlKHBsYWluUGspLmhvZ2FyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzIDoge30gYXMgUmVzcHVlc3Rhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcHVlc3Rhc0ZvclBrKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXTogZm9yUGtSYWl6W2VzdHJ1Y3R1cmEucGtBZ3JlZ2FkYVVhUHBhbF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXVsYXJpbzogY29uZmlndXJhY2lvblNvcnRlb0Zvcm11bGFyaW8uaWRfZm9ybXVsYXJpb19wYWRyZSEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGFzIEZvclBrKS5yZXNwdWVzdGFzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdHJ1ZSlcclxuICAgIH0pLmFycmF5KCk7XHJcbiAgICB2YXIgcHJpb3JpZGFkZXM6IHsgW2tleSBpbiBSZXN1bWVuRXN0YWRvXTogeyBwcmlvcmlkYWQ6IG51bWJlciwgY2FudGlkYWQ6IG51bWJlciB9IH0gPSB7XHJcbiAgICAgICAgJ25vIHJlYSc6IHsgcHJpb3JpZGFkOiAxLCBjYW50aWRhZDogMCB9LFxyXG4gICAgICAgICdjb24gcHJvYmxlbWFzJzogeyBwcmlvcmlkYWQ6IDIsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ2luY29tcGxldG8nOiB7IHByaW9yaWRhZDogMywgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAndmFjaW8nOiB7IHByaW9yaWRhZDogNCwgY2FudGlkYWQ6IDAgfSxcclxuICAgICAgICAnY2l0YSBwYWN0YWRhJzogeyBwcmlvcmlkYWQ6IDUsIGNhbnRpZGFkOiAwIH0sXHJcbiAgICAgICAgJ29rJzogeyBwcmlvcmlkYWQ6IDYsIGNhbnRpZGFkOiAwIH1cclxuICAgIH1cclxuICAgIHZhciBtaW4gPSA2O1xyXG4gICAgdmFyIG1pblJlc3VtZW46IFJlc3VtZW5Fc3RhZG8gPSAnb2snO1xyXG4gICAgZm9yICh2YXIgZmVlZGJhY2sgb2YgZmVlZEJhY2tWaXZpZW5kYSkge1xyXG4gICAgICAgIHZhciByZXN1bWVuID0gZmVlZGJhY2sucmVzdW1lbjtcclxuICAgICAgICBwcmlvcmlkYWRlc1tyZXN1bWVuXS5jYW50aWRhZCsrO1xyXG4gICAgICAgIGlmIChwcmlvcmlkYWRlc1tyZXN1bWVuXS5wcmlvcmlkYWQgPCBtaW4pIHtcclxuICAgICAgICAgICAgbWluID0gcHJpb3JpZGFkZXNbcmVzdW1lbl0ucHJpb3JpZGFkO1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gcmVzdW1lbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAobWluUmVzdW1lbiA9PSAndmFjaW8nICYmIHByaW9yaWRhZGVzWydvayddLmNhbnRpZGFkIHx8IG1pblJlc3VtZW4gPT0gJ2luY29tcGxldG8nKSB7XHJcbiAgICAgICAgaWYgKGZhbHNlIC8qcmVzcHVlc3Rhc1tzcDFdPT0yICYmIHJlc3B1ZXN0YXNbc3A2XT09bnVsbCovKSB7XHJcbiAgICAgICAgICAgIG1pblJlc3VtZW4gPSAnY2l0YSBwYWN0YWRhJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtaW5SZXN1bWVuID0gJ2luY29tcGxldG8nO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvL1RPRE8gQVJSRUdMQVIgRVNURSBIT1JST1IsIEdFTkVSQUxJWkFSXHJcbiAgICB2YXIgdGFyZWEgPSBkYXRvc0J5UGFzcy5pbmZvcm1hY2lvbkhkcltmb3JQa1JhaXpbZXN0cnVjdHVyYS5wa0FncmVnYWRhVWFQcGFsXSBhcyB1bmtub3duIGFzIElkRW5jXS50YXJlYS50YXJlYTtcclxuICAgIHZhciByZXN1bWVuRXN0YWRvOiBSZXN1bWVuRXN0YWRvO1xyXG4gICAgdmFyIHJlc3VtZW5Fc3RhZG9TdXA6IFJlc3VtZW5Fc3RhZG8gPSAndmFjaW8nO1xyXG4gICAgaWYgKHRhcmVhID09ICdzdXBlJykge1xyXG4gICAgICAgIHJlc3VtZW5Fc3RhZG9TdXAgPSBlc05vUmVhU3VwID8gJ25vIHJlYScgOiBtaW5SZXN1bWVuXHJcbiAgICAgICAgLy9wYXJhIHF1ZSBjb2xvcmVlIGJpZW4gZW4gbGEgaGRyIGRlbCBETSAobHVlZ28gZW4gYmJkZCBubyBzZSBndWFyZGEpXHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IHJlc3VtZW5Fc3RhZG9TdXBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyA9IGVzTm9SZWEgPyAnbm8gcmVhJyA6IG1pblJlc3VtZW5cclxuICAgIH1cclxuICAgIHZhciByZXN1bHRhZG86IFJlc3VsdGFkb1Jlc3VtZW4gPSB7XHJcbiAgICAgICAgcmVzdW1lbkVzdGFkbyxcclxuICAgICAgICByZXN1bWVuRXN0YWRvU3VwLFxyXG4gICAgICAgIGNvZFJlYSxcclxuICAgICAgICBjb2ROb1JlYSxcclxuICAgICAgICBjb2RSZWFTdXAsXHJcbiAgICAgICAgY29kTm9SZWFTdXBcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRhZG9cclxufVxyXG4iXX0=
|