@galacean/engine-physics-lite 0.0.0-experimental-animator-additive.2 → 0.0.0-experimental-animator-additive.3
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/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/miniprogram.js +1211 -1238
- package/dist/module.js +1 -1
- package/dist/module.js.map +1 -1
- package/package.json +4 -4
package/dist/module.js
CHANGED
|
@@ -1263,4 +1263,4 @@ LitePhysics = __decorate([
|
|
|
1263
1263
|
], LitePhysics);
|
|
1264
1264
|
|
|
1265
1265
|
export { LitePhysics };
|
|
1266
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vdHNsaWJAMi41LjAvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX3NldF9wcm90b3R5cGVfb2YuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvLnBucG0vQHN3YytoZWxwZXJzQDAuNS4wL25vZGVfbW9kdWxlcy9Ac3djL2hlbHBlcnMvZXNtL19pbmhlcml0cy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2NyZWF0ZV9jbGFzcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ac3djK2hlbHBlcnNAMC41LjAvbm9kZV9tb2R1bGVzL0Bzd2MvaGVscGVycy9lc20vX2luc3RhbmNlb2YuanMiLCIuLi9zcmMvTGl0ZVVwZGF0ZUZsYWcudHMiLCIuLi9zcmMvTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyLnRzIiwiLi4vc3JjL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlLnRzIiwiLi4vc3JjL0xpdGVUcmFuc2Zvcm0udHMiLCIuLi9zcmMvTGl0ZUNvbGxpZGVyLnRzIiwiLi4vc3JjL0xpdGVEeW5hbWljQ29sbGlkZXIudHMiLCIuLi9zcmMvRGlzb3JkZXJlZEFycmF5LnRzIiwiLi4vc3JjL0xpdGVIaXRSZXN1bHQudHMiLCIuLi9zcmMvc2hhcGUvTGl0ZUJveENvbGxpZGVyU2hhcGUudHMiLCIuLi9zcmMvc2hhcGUvTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUudHMiLCIuLi9zcmMvTGl0ZVBoeXNpY3NNYW5hZ2VyLnRzIiwiLi4vc3JjL0xpdGVQaHlzaWNzTWF0ZXJpYWwudHMiLCIuLi9zcmMvTGl0ZVN0YXRpY0NvbGxpZGVyLnRzIiwiLi4vc3JjL1N0YXRpY0ludGVyZmFjZUltcGxlbWVudC50cyIsIi4uL3NyYy9MaXRlUGh5c2ljcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBfc2V0X3Byb3RvdHlwZV9vZihvLCBwKSB7XG4gICAgX3NldF9wcm90b3R5cGVfb2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YobywgcCkge1xuICAgICAgICBvLl9fcHJvdG9fXyA9IHA7XG5cbiAgICAgICAgcmV0dXJuIG87XG4gICAgfTtcblxuICAgIHJldHVybiBfc2V0X3Byb3RvdHlwZV9vZihvLCBwKTtcbn1cbmV4cG9ydCB7IF9zZXRfcHJvdG90eXBlX29mIGFzIF8gfTtcbiIsImltcG9ydCB7IF9zZXRfcHJvdG90eXBlX29mIH0gZnJvbSBcIi4vX3NldF9wcm90b3R5cGVfb2YuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIF9pbmhlcml0cyhzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICAgIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uXCIpO1xuICAgIH1cblxuICAgIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwgeyBjb25zdHJ1Y3RvcjogeyB2YWx1ZTogc3ViQ2xhc3MsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTtcblxuICAgIGlmIChzdXBlckNsYXNzKSBfc2V0X3Byb3RvdHlwZV9vZihzdWJDbGFzcywgc3VwZXJDbGFzcyk7XG59XG5leHBvcnQgeyBfaW5oZXJpdHMgYXMgXyB9O1xuIiwiZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlO1xuICAgICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIF9jcmVhdGVfY2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gICAgaWYgKHN0YXRpY1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuZXhwb3J0IHsgX2NyZWF0ZV9jbGFzcyBhcyBfIH07XG4iLCJleHBvcnQgZnVuY3Rpb24gX2luc3RhbmNlb2YobGVmdCwgcmlnaHQpIHtcbiAgICBpZiAocmlnaHQgIT0gbnVsbCAmJiB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIHJpZ2h0W1N5bWJvbC5oYXNJbnN0YW5jZV0pIHtcbiAgICAgICAgcmV0dXJuICEhcmlnaHRbU3ltYm9sLmhhc0luc3RhbmNlXShsZWZ0KTtcbiAgICB9IGVsc2UgcmV0dXJuIGxlZnQgaW5zdGFuY2VvZiByaWdodDtcbn1cbmV4cG9ydCB7IF9pbnN0YW5jZW9mIGFzIF8gfTtcbiIsIi8qKlxuICogRmFzdGx5IHJlbW92ZSBhbiBlbGVtZW50IGZyb20gYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBBcnJheVxuICogQHBhcmFtIGl0ZW0gLSBFbGVtZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVGcm9tQXJyYXkoYXJyYXk6IGFueVtdLCBpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgY29uc3QgaW5kZXggPSBhcnJheS5pbmRleE9mKGl0ZW0pO1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBhcnJheS5sZW5ndGggLSAxO1xuICBpZiAoaW5kZXggIT09IGxhc3QpIHtcbiAgICBhcnJheVtpbmRleF0gPSBhcnJheVtsYXN0XTtcbiAgfVxuICBhcnJheS5sZW5ndGgtLTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogVXNlZCB0byB1cGRhdGUgdGFncy5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVVcGRhdGVGbGFnIHtcbiAgLyoqIEZsYWcuICovXG4gIGZsYWcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2ZsYWdzOiBMaXRlVXBkYXRlRmxhZ1tdID0gW10pIHtcbiAgICB0aGlzLl9mbGFncy5wdXNoKHRoaXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlc3Ryb3kuXG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHJlbW92ZUZyb21BcnJheSh0aGlzLl9mbGFncywgdGhpcyk7XG4gICAgdGhpcy5fZmxhZ3MgPSBudWxsO1xuICB9XG59XG4iLCJpbXBvcnQgeyBMaXRlVXBkYXRlRmxhZyB9IGZyb20gXCIuL0xpdGVVcGRhdGVGbGFnXCI7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlVXBkYXRlRmxhZ01hbmFnZXIge1xuICBwcml2YXRlIF91cGRhdGVGbGFnczogTGl0ZVVwZGF0ZUZsYWdbXSA9IFtdO1xuXG4gIHJlZ2lzdGVyKCk6IExpdGVVcGRhdGVGbGFnIHtcbiAgICByZXR1cm4gbmV3IExpdGVVcGRhdGVGbGFnKHRoaXMuX3VwZGF0ZUZsYWdzKTtcbiAgfVxuXG4gIGRpc3RyaWJ1dGUoKTogdm9pZCB7XG4gICAgY29uc3QgdXBkYXRlRmxhZ3MgPSB0aGlzLl91cGRhdGVGbGFncztcbiAgICBmb3IgKGxldCBpID0gdXBkYXRlRmxhZ3MubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHVwZGF0ZUZsYWdzW2ldLmZsYWcgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgSUNvbGxpZGVyU2hhcGUsIElQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IE1hdHJpeCwgUmF5LCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi4vTGl0ZUhpdFJlc3VsdFwiO1xuaW1wb3J0IHsgTGl0ZVRyYW5zZm9ybSB9IGZyb20gXCIuLi9MaXRlVHJhbnNmb3JtXCI7XG5pbXBvcnQgeyBMaXRlVXBkYXRlRmxhZyB9IGZyb20gXCIuLi9MaXRlVXBkYXRlRmxhZ1wiO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIGZvciBjb2xsaWRlciBzaGFwZXMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMaXRlQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElDb2xsaWRlclNoYXBlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3JheSA9IG5ldyBSYXkoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBQb2ludCA9IG5ldyBWZWN0b3IzKCk7XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaWQ6IG51bWJlcjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfY29sbGlkZXI6IExpdGVDb2xsaWRlcjtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfdHJhbnNmb3JtOiBMaXRlVHJhbnNmb3JtID0gbmV3IExpdGVUcmFuc2Zvcm0oKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaW52TW9kZWxNYXRyaXg6IE1hdHJpeCA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfaW52ZXJzZVdvcmxkTWF0RmxhZzogTGl0ZVVwZGF0ZUZsYWc7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5vd25lciA9IHRoaXM7XG4gICAgdGhpcy5faW52ZXJzZVdvcmxkTWF0RmxhZyA9IHRoaXMuX3RyYW5zZm9ybS5yZWdpc3RlcldvcmxkQ2hhbmdlRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRSb3RhdGlvbiB9XG4gICAqL1xuICBzZXRSb3RhdGlvbihyb3RhdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Um90YXRpb24uIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRQb3NpdGlvbiB9XG4gICAqL1xuICBzZXRQb3NpdGlvbihwb3NpdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5zZXRQb3NpdGlvbihwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyU2hhcGUuc2V0V29ybGRTY2FsZSB9XG4gICAqL1xuICBhYnN0cmFjdCBzZXRXb3JsZFNjYWxlKHNjYWxlOiBWZWN0b3IzKTogdm9pZDtcblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldENvbnRhY3RPZmZzZXQgfVxuICAgKi9cbiAgc2V0Q29udGFjdE9mZnNldChvZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q29udGFjdE9mZnNldC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldE1hdGVyaWFsIH1cbiAgICovXG4gIHNldE1hdGVyaWFsKG1hdGVyaWFsOiBJUGh5c2ljc01hdGVyaWFsKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRNYXRlcmlhbC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFVuaXF1ZUlEIH1cbiAgICovXG4gIHNldFVuaXF1ZUlEKGlkOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pZCA9IGlkO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRJc1RyaWdnZXIgfVxuICAgKi9cbiAgc2V0SXNUcmlnZ2VyKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRJc1RyaWdnZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5kZXN0cm95IH1cbiAgICovXG4gIGRlc3Ryb3koKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGFic3RyYWN0IF9yYXljYXN0KHJheTogUmF5LCBoaXQ6IExpdGVIaXRSZXN1bHQpOiBib29sZWFuO1xuXG4gIHByb3RlY3RlZCBfdXBkYXRlSGl0UmVzdWx0KFxuICAgIHJheTogUmF5LFxuICAgIHJheURpc3RhbmNlOiBudW1iZXIsXG4gICAgb3V0SGl0OiBMaXRlSGl0UmVzdWx0LFxuICAgIG9yaWdpbjogVmVjdG9yMyxcbiAgICBpc1dvcmxkUmF5OiBib29sZWFuID0gZmFsc2VcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgaGl0UG9pbnQgPSBMaXRlQ29sbGlkZXJTaGFwZS5fdGVtcFBvaW50O1xuICAgIHJheS5nZXRQb2ludChyYXlEaXN0YW5jZSwgaGl0UG9pbnQpO1xuICAgIGlmICghaXNXb3JsZFJheSkge1xuICAgICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKGhpdFBvaW50LCB0aGlzLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIGhpdFBvaW50KTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IFZlY3RvcjMuZGlzdGFuY2Uob3JpZ2luLCBoaXRQb2ludCk7XG5cbiAgICBpZiAoZGlzdGFuY2UgPCBvdXRIaXQuZGlzdGFuY2UpIHtcbiAgICAgIG91dEhpdC5wb2ludC5jb3B5RnJvbShoaXRQb2ludCk7XG4gICAgICBvdXRIaXQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgIG91dEhpdC5zaGFwZUlEID0gdGhpcy5faWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIF9nZXRMb2NhbFJheShyYXk6IFJheSk6IFJheSB7XG4gICAgY29uc3Qgd29ybGRUb0xvY2FsID0gdGhpcy5fZ2V0SW52TW9kZWxNYXRyaXgoKTtcbiAgICBjb25zdCBvdXRSYXkgPSBMaXRlQ29sbGlkZXJTaGFwZS5fcmF5O1xuXG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKHJheS5vcmlnaW4sIHdvcmxkVG9Mb2NhbCwgb3V0UmF5Lm9yaWdpbik7XG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Ob3JtYWwocmF5LmRpcmVjdGlvbiwgd29ybGRUb0xvY2FsLCBvdXRSYXkuZGlyZWN0aW9uKTtcbiAgICBvdXRSYXkuZGlyZWN0aW9uLm5vcm1hbGl6ZSgpO1xuXG4gICAgcmV0dXJuIG91dFJheTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldEludk1vZGVsTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcuZmxhZykge1xuICAgICAgTWF0cml4LmludmVydCh0aGlzLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIHRoaXMuX2ludk1vZGVsTWF0cml4KTtcbiAgICAgIHRoaXMuX2ludmVyc2VXb3JsZE1hdEZsYWcuZmxhZyA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW52TW9kZWxNYXRyaXg7XG4gIH1cbn1cbiIsImltcG9ydCB7IE1hdGhVdGlsLCBNYXRyaXgsIFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUNvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlVXBkYXRlRmxhZyB9IGZyb20gXCIuL0xpdGVVcGRhdGVGbGFnXCI7XG5pbXBvcnQgeyBMaXRlVXBkYXRlRmxhZ01hbmFnZXIgfSBmcm9tIFwiLi9MaXRlVXBkYXRlRmxhZ01hbmFnZXJcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZUNvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBVc2VkIHRvIGltcGxlbWVudCB0cmFuc2Zvcm1hdGlvbiByZWxhdGVkIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVUcmFuc2Zvcm0ge1xuICBwcml2YXRlIHN0YXRpYyBfdGVtcFF1YXQwOiBRdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBNYXQ0MjogTWF0cml4ID0gbmV3IE1hdHJpeCgpO1xuXG4gIHByaXZhdGUgX3Bvc2l0aW9uOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfcm90YXRpb246IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpO1xuICBwcml2YXRlIF9yb3RhdGlvblF1YXRlcm5pb246IFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xuICBwcml2YXRlIF9zY2FsZTogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDEsIDEsIDEpO1xuICBwcml2YXRlIF93b3JsZFJvdGF0aW9uUXVhdGVybmlvbjogUXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG4gIHByaXZhdGUgX2xvY2FsTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIHByaXZhdGUgX3dvcmxkTWF0cml4OiBNYXRyaXggPSBuZXcgTWF0cml4KCk7XG4gIHByaXZhdGUgX3VwZGF0ZUZsYWdNYW5hZ2VyOiBMaXRlVXBkYXRlRmxhZ01hbmFnZXIgPSBuZXcgTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyKCk7XG4gIHByaXZhdGUgX2lzUGFyZW50RGlydHk6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF9wYXJlbnRUcmFuc2Zvcm1DYWNoZTogTGl0ZVRyYW5zZm9ybSA9IG51bGw7XG4gIHByaXZhdGUgX2RpcnR5RmxhZzogbnVtYmVyID0gVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzO1xuXG4gIHByaXZhdGUgX293bmVyOiBMaXRlQ29sbGlkZXJTaGFwZSB8IExpdGVDb2xsaWRlcjtcblxuICBzZXQgb3duZXIodmFsdWU6IExpdGVDb2xsaWRlclNoYXBlIHwgTGl0ZUNvbGxpZGVyKSB7XG4gICAgdGhpcy5fb3duZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2NhbCBwb3NpdGlvbi5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvcjMge1xuICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgfVxuXG4gIHNldCBwb3NpdGlvbih2YWx1ZTogVmVjdG9yMykge1xuICAgIGlmICh0aGlzLl9wb3NpdGlvbiAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3Bvc2l0aW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB0aGlzLl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIHJvdGF0aW9uLCBkZWZpbmluZyB0aGUgcm90YXRpb24gYnkgdXNpbmcgYSB1bml0IHF1YXRlcm5pb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCByb3RhdGlvblF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLkxvY2FsUXVhdCkpIHtcbiAgICAgIFF1YXRlcm5pb24ucm90YXRpb25FdWxlcihcbiAgICAgICAgTWF0aFV0aWwuZGVncmVlVG9SYWRpYW4odGhpcy5fcm90YXRpb24ueCksXG4gICAgICAgIE1hdGhVdGlsLmRlZ3JlZVRvUmFkaWFuKHRoaXMuX3JvdGF0aW9uLnkpLFxuICAgICAgICBNYXRoVXRpbC5kZWdyZWVUb1JhZGlhbih0aGlzLl9yb3RhdGlvbi56KSxcbiAgICAgICAgdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uXG4gICAgICApO1xuICAgICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Mb2NhbFF1YXQpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fcm90YXRpb25RdWF0ZXJuaW9uO1xuICB9XG5cbiAgc2V0IHJvdGF0aW9uUXVhdGVybmlvbih2YWx1ZTogUXVhdGVybmlvbikge1xuICAgIGlmICh0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24gIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdUcnVlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXggfCBUcmFuc2Zvcm1GbGFnLkxvY2FsRXVsZXIpO1xuICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxRdWF0KTtcbiAgICB0aGlzLl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdvcmxkIHJvdGF0aW9uLCBkZWZpbmluZyB0aGUgcm90YXRpb24gYnkgdXNpbmcgYSB1bml0IHF1YXRlcm5pb24uXG4gICAqIEByZW1hcmtzIE5lZWQgdG8gcmUtYXNzaWduIGFmdGVyIG1vZGlmaWNhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIHRha2VzIGVmZmVjdC5cbiAgICovXG4gIGdldCB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbigpOiBRdWF0ZXJuaW9uIHtcbiAgICBpZiAodGhpcy5faXNDb250YWluRGlydHlGbGFnKFRyYW5zZm9ybUZsYWcuV29ybGRRdWF0KSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgUXVhdGVybmlvbi5tdWx0aXBseShwYXJlbnQud29ybGRSb3RhdGlvblF1YXRlcm5pb24sIHRoaXMucm90YXRpb25RdWF0ZXJuaW9uLCB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbi5jb3B5RnJvbSh0aGlzLnJvdGF0aW9uUXVhdGVybmlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbjtcbiAgfVxuXG4gIHNldCB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbih2YWx1ZTogUXVhdGVybmlvbikge1xuICAgIGlmICh0aGlzLl93b3JsZFJvdGF0aW9uUXVhdGVybmlvbiAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3dvcmxkUm90YXRpb25RdWF0ZXJuaW9uLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fZ2V0UGFyZW50VHJhbnNmb3JtKCk7XG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgUXVhdGVybmlvbi5pbnZlcnQocGFyZW50LndvcmxkUm90YXRpb25RdWF0ZXJuaW9uLCBMaXRlVHJhbnNmb3JtLl90ZW1wUXVhdDApO1xuICAgICAgUXVhdGVybmlvbi5tdWx0aXBseSh2YWx1ZSwgTGl0ZVRyYW5zZm9ybS5fdGVtcFF1YXQwLCB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24uY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiA9IHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbjtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLldvcmxkUXVhdCk7XG4gIH1cblxuICAvKipcbiAgICogTG9jYWwgc2NhbGluZy5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IHNjYWxlKCk6IFZlY3RvcjMge1xuICAgIHJldHVybiB0aGlzLl9zY2FsZTtcbiAgfVxuXG4gIHNldCBzY2FsZSh2YWx1ZTogVmVjdG9yMykge1xuICAgIGlmICh0aGlzLl9zY2FsZSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3NjYWxlLmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnVHJ1ZShUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KTtcbiAgICB0aGlzLl91cGRhdGVXb3JsZFNjYWxlRmxhZygpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvY2FsIG1hdHJpeC5cbiAgICogQHJlbWFya3MgTmVlZCB0byByZS1hc3NpZ24gYWZ0ZXIgbW9kaWZpY2F0aW9uIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2RpZmljYXRpb24gdGFrZXMgZWZmZWN0LlxuICAgKi9cbiAgZ2V0IGxvY2FsTWF0cml4KCk6IE1hdHJpeCB7XG4gICAgaWYgKHRoaXMuX2lzQ29udGFpbkRpcnR5RmxhZyhUcmFuc2Zvcm1GbGFnLkxvY2FsTWF0cml4KSkge1xuICAgICAgTWF0cml4LmFmZmluZVRyYW5zZm9ybWF0aW9uKHRoaXMuX3NjYWxlLCB0aGlzLnJvdGF0aW9uUXVhdGVybmlvbiwgdGhpcy5fcG9zaXRpb24sIHRoaXMuX2xvY2FsTWF0cml4KTtcbiAgICAgIHRoaXMuX3NldERpcnR5RmxhZ0ZhbHNlKFRyYW5zZm9ybUZsYWcuTG9jYWxNYXRyaXgpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fbG9jYWxNYXRyaXg7XG4gIH1cblxuICBzZXQgbG9jYWxNYXRyaXgodmFsdWU6IE1hdHJpeCkge1xuICAgIGlmICh0aGlzLl9sb2NhbE1hdHJpeCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX2xvY2FsTWF0cml4LmNvcHlGcm9tKHZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5fbG9jYWxNYXRyaXguZGVjb21wb3NlKHRoaXMuX3Bvc2l0aW9uLCB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb24sIHRoaXMuX3NjYWxlKTtcbiAgICB0aGlzLl9zZXREaXJ0eUZsYWdUcnVlKFRyYW5zZm9ybUZsYWcuTG9jYWxFdWxlcik7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Mb2NhbE1hdHJpeCk7XG4gICAgdGhpcy5fdXBkYXRlQWxsV29ybGRGbGFnKCk7XG4gIH1cblxuICAvKipcbiAgICogV29ybGQgbWF0cml4LlxuICAgKiBAcmVtYXJrcyBOZWVkIHRvIHJlLWFzc2lnbiBhZnRlciBtb2RpZmljYXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIG1vZGlmaWNhdGlvbiB0YWtlcyBlZmZlY3QuXG4gICAqL1xuICBnZXQgd29ybGRNYXRyaXgoKTogTWF0cml4IHtcbiAgICBpZiAodGhpcy5faXNDb250YWluRGlydHlGbGFnKFRyYW5zZm9ybUZsYWcuV29ybGRNYXRyaXgpKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLl9nZXRQYXJlbnRUcmFuc2Zvcm0oKTtcbiAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgTWF0cml4Lm11bHRpcGx5KHBhcmVudC53b3JsZE1hdHJpeCwgdGhpcy5sb2NhbE1hdHJpeCwgdGhpcy5fd29ybGRNYXRyaXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fd29ybGRNYXRyaXguY29weUZyb20odGhpcy5sb2NhbE1hdHJpeCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zZXREaXJ0eUZsYWdGYWxzZShUcmFuc2Zvcm1GbGFnLldvcmxkTWF0cml4KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3dvcmxkTWF0cml4O1xuICB9XG5cbiAgc2V0IHdvcmxkTWF0cml4KHZhbHVlOiBNYXRyaXgpIHtcbiAgICBpZiAodGhpcy5fd29ybGRNYXRyaXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl93b3JsZE1hdHJpeC5jb3B5RnJvbSh2YWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuX2dldFBhcmVudFRyYW5zZm9ybSgpO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgIE1hdHJpeC5pbnZlcnQocGFyZW50LndvcmxkTWF0cml4LCBMaXRlVHJhbnNmb3JtLl90ZW1wTWF0NDIpO1xuICAgICAgTWF0cml4Lm11bHRpcGx5KExpdGVUcmFuc2Zvcm0uX3RlbXBNYXQ0MiwgdmFsdWUsIHRoaXMuX2xvY2FsTWF0cml4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbG9jYWxNYXRyaXguY29weUZyb20odmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsTWF0cml4ID0gdGhpcy5fbG9jYWxNYXRyaXg7XG4gICAgdGhpcy5fc2V0RGlydHlGbGFnRmFsc2UoVHJhbnNmb3JtRmxhZy5Xb3JsZE1hdHJpeCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHBvc2l0aW9uIGJ5IFgsIFksIFogdmFsdWUuXG4gICAqIEBwYXJhbSB4IC0gWCBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB5IC0gWSBjb29yZGluYXRlXG4gICAqIEBwYXJhbSB6IC0gWiBjb29yZGluYXRlXG4gICAqL1xuICBzZXRQb3NpdGlvbih4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcG9zaXRpb24uc2V0KHgsIHksIHopO1xuICAgIHRoaXMucG9zaXRpb24gPSB0aGlzLl9wb3NpdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbG9jYWwgcm90YXRpb24gYnkgdGhlIFgsIFksIFosIGFuZCBXIGNvbXBvbmVudHMgb2YgdGhlIHF1YXRlcm5pb24uXG4gICAqIEBwYXJhbSB4IC0gWCBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKiBAcGFyYW0geSAtIFkgY29tcG9uZW50IG9mIHF1YXRlcm5pb25cbiAgICogQHBhcmFtIHogLSBaIGNvbXBvbmVudCBvZiBxdWF0ZXJuaW9uXG4gICAqIEBwYXJhbSB3IC0gVyBjb21wb25lbnQgb2YgcXVhdGVybmlvblxuICAgKi9cbiAgc2V0Um90YXRpb25RdWF0ZXJuaW9uKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3JvdGF0aW9uUXVhdGVybmlvbi5zZXQoeCwgeSwgeiwgdyk7XG4gICAgdGhpcy5yb3RhdGlvblF1YXRlcm5pb24gPSB0aGlzLl9yb3RhdGlvblF1YXRlcm5pb247XG4gIH1cblxuICAvKipcbiAgICogU2V0IGxvY2FsIHNjYWxpbmcgYnkgc2NhbGluZyB2YWx1ZXMgYWxvbmcgWCwgWSwgWiBheGlzLlxuICAgKiBAcGFyYW0geCAtIFNjYWxpbmcgYWxvbmcgWCBheGlzXG4gICAqIEBwYXJhbSB5IC0gU2NhbGluZyBhbG9uZyBZIGF4aXNcbiAgICogQHBhcmFtIHogLSBTY2FsaW5nIGFsb25nIFogYXhpc1xuICAgKi9cbiAgc2V0U2NhbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3NjYWxlLnNldCh4LCB5LCB6KTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy5fc2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgd29ybGQgdHJhbnNmb3JtIGNoYW5nZSBmbGFnLlxuICAgKiBAcmV0dXJucyBDaGFuZ2UgZmxhZ1xuICAgKi9cbiAgcmVnaXN0ZXJXb3JsZENoYW5nZUZsYWcoKTogTGl0ZVVwZGF0ZUZsYWcge1xuICAgIHJldHVybiB0aGlzLl91cGRhdGVGbGFnTWFuYWdlci5yZWdpc3RlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4IG9yIHdvcmxkUm90YXRpb25RdWF0ZXJuaW9uKSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkUG9zaXRpb25GbGFnKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3ApKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdwKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZVdvcmxkUG9zaXRpb25GbGFnKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHdvcmxkTWF0cml4OiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFBvc2l0aW9uOiBXaWxsIHRyaWdnZXIgdGhlIHdvcmxkTWF0cml4LCBsb2NhbCBwb3NpdGlvbiB1cGRhdGUgb2YgaXRzZWxmIGFuZCB0aGUgd29ybGRNYXRyaXggdXBkYXRlIG9mIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEdldCB3b3JsZFJvdGF0aW9uUXVhdGVybmlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZCByb3RhdGlvbiAoaW4gcXVhdGVybmlvbikgdXBkYXRlIG9mIGl0c2VsZiBhbmQgYWxsIHBhcmVudCBlbnRpdGllcy5cbiAgICogR2V0IHdvcmxkUm90YXRpb246IFdpbGwgdHJpZ2dlciB0aGUgd29ybGQgcm90YXRpb24oaW4gZXVsZXIgYW5kIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIHdvcmxkIHJvdGF0aW9uKGluIHF1YXRlcm5pb24pIHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBJbiBzdW1tYXJ5LCBhbnkgdXBkYXRlIG9mIHJlbGF0ZWQgdmFyaWFibGVzIHdpbGwgY2F1c2UgdGhlIGRpcnR5IG1hcmsgb2Ygb25lIG9mIHRoZSBmdWxsIHByb2Nlc3MgKHdvcmxkTWF0cml4IG9yIHdvcmxkUm90YXRpb25RdWF0ZXJuaW9uKSB0byBiZSBmYWxzZS5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZVdvcmxkUm90YXRpb25GbGFnKCkge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV2VXcSkpIHtcbiAgICAgIHRoaXMuX3dvcmxkQXNzb2NpYXRlZENoYW5nZShUcmFuc2Zvcm1GbGFnLldtV2VXcSk7XG4gICAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXIpIHtcbiAgICAgICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fb3duZXIuX3NoYXBlcztcbiAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMCwgbjogbnVtYmVyID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgIHNoYXBlc1tpXS5fdHJhbnNmb3JtLl91cGRhdGVXb3JsZFJvdGF0aW9uRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCB3b3JsZE1hdHJpeDogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCB1cGRhdGUgb2YgaXRzZWxmIGFuZCBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRQb3NpdGlvbjogV2lsbCB0cmlnZ2VyIHRoZSB3b3JsZE1hdHJpeCwgbG9jYWwgcG9zaXRpb24gdXBkYXRlIG9mIGl0c2VsZiBhbmQgdGhlIHdvcmxkTWF0cml4IHVwZGF0ZSBvZiBhbGwgcGFyZW50IGVudGl0aWVzLlxuICAgKiBHZXQgd29ybGRTY2FsZTogV2lsbCB0cmlnZ2VyIHRoZSBzY2FsaW5nIHVwZGF0ZSBvZiBpdHNlbGYgYW5kIGFsbCBwYXJlbnQgZW50aXRpZXMuXG4gICAqIEluIHN1bW1hcnksIGFueSB1cGRhdGUgb2YgcmVsYXRlZCB2YXJpYWJsZXMgd2lsbCBjYXVzZSB0aGUgZGlydHkgbWFyayBvZiBvbmUgb2YgdGhlIGZ1bGwgcHJvY2VzcyAod29ybGRNYXRyaXgpIHRvIGJlIGZhbHNlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlV29ybGRTY2FsZUZsYWcoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0NvbnRhaW5EaXJ0eUZsYWdzKFRyYW5zZm9ybUZsYWcuV21XcykpIHtcbiAgICAgIHRoaXMuX3dvcmxkQXNzb2NpYXRlZENoYW5nZShUcmFuc2Zvcm1GbGFnLldtV3MpO1xuICAgICAgaWYgKHRoaXMuX293bmVyIGluc3RhbmNlb2YgTGl0ZUNvbGxpZGVyKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlcyA9IHRoaXMuX293bmVyLl9zaGFwZXM7XG4gICAgICAgIGZvciAobGV0IGk6IG51bWJlciA9IDAsIG46IG51bWJlciA9IHNoYXBlcy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICBzaGFwZXNbaV0uX3RyYW5zZm9ybS5fdXBkYXRlV29ybGRTY2FsZUZsYWcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGUgYWxsIHdvcmxkIHRyYW5zZm9ybSBwcm9wZXJ0eSBkaXJ0eSBmbGFnLCB0aGUgcHJpbmNpcGxlIGlzIHRoZSBzYW1lIGFzIGFib3ZlLlxuICAgKi9cbiAgcHJpdmF0ZSBfdXBkYXRlQWxsV29ybGRGbGFnKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faXNDb250YWluRGlydHlGbGFncyhUcmFuc2Zvcm1GbGFnLldtV3BXZVdxV3MpKSB7XG4gICAgICB0aGlzLl93b3JsZEFzc29jaWF0ZWRDaGFuZ2UoVHJhbnNmb3JtRmxhZy5XbVdwV2VXcVdzKTtcbiAgICAgIGlmICh0aGlzLl9vd25lciBpbnN0YW5jZW9mIExpdGVDb2xsaWRlcikge1xuICAgICAgICBjb25zdCBzaGFwZXMgPSB0aGlzLl9vd25lci5fc2hhcGVzO1xuICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwLCBuOiBudW1iZXIgPSBzaGFwZXMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgc2hhcGVzW2ldLl90cmFuc2Zvcm0uX3VwZGF0ZUFsbFdvcmxkRmxhZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGFyZW50VHJhbnNmb3JtKCk6IExpdGVUcmFuc2Zvcm0gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuX2lzUGFyZW50RGlydHkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRUcmFuc2Zvcm1DYWNoZTtcbiAgICB9XG4gICAgbGV0IHBhcmVudENhY2hlOiBMaXRlVHJhbnNmb3JtID0gbnVsbDtcbiAgICBpZiAodGhpcy5fb3duZXIgaW5zdGFuY2VvZiBMaXRlQ29sbGlkZXJTaGFwZSkge1xuICAgICAgbGV0IHBhcmVudCA9IHRoaXMuX293bmVyLl9jb2xsaWRlcjtcbiAgICAgIHBhcmVudENhY2hlID0gcGFyZW50Ll90cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgdGhpcy5fcGFyZW50VHJhbnNmb3JtQ2FjaGUgPSBwYXJlbnRDYWNoZTtcbiAgICB0aGlzLl9pc1BhcmVudERpcnR5ID0gZmFsc2U7XG4gICAgcmV0dXJuIHBhcmVudENhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNDb250YWluRGlydHlGbGFncyh0YXJnZXREaXJ0eUZsYWdzOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuX2RpcnR5RmxhZyAmIHRhcmdldERpcnR5RmxhZ3MpID09PSB0YXJnZXREaXJ0eUZsYWdzO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNDb250YWluRGlydHlGbGFnKHR5cGU6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5fZGlydHlGbGFnICYgdHlwZSkgIT0gMDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldERpcnR5RmxhZ1RydWUodHlwZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZGlydHlGbGFnIHw9IHR5cGU7XG4gIH1cblxuICBwcml2YXRlIF9zZXREaXJ0eUZsYWdGYWxzZSh0eXBlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9kaXJ0eUZsYWcgJj0gfnR5cGU7XG4gIH1cblxuICBwcml2YXRlIF93b3JsZEFzc29jaWF0ZWRDaGFuZ2UodHlwZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fZGlydHlGbGFnIHw9IHR5cGU7XG4gICAgdGhpcy5fdXBkYXRlRmxhZ01hbmFnZXIuZGlzdHJpYnV0ZSgpO1xuICB9XG59XG5cbi8qKlxuICogRGlydHkgZmxhZyBvZiB0cmFuc2Zvcm0uXG4gKi9cbmVudW0gVHJhbnNmb3JtRmxhZyB7XG4gIExvY2FsRXVsZXIgPSAweDEsXG4gIExvY2FsUXVhdCA9IDB4MixcbiAgV29ybGRQb3NpdGlvbiA9IDB4NCxcbiAgV29ybGRFdWxlciA9IDB4OCxcbiAgV29ybGRRdWF0ID0gMHgxMCxcbiAgV29ybGRTY2FsZSA9IDB4MjAsXG4gIExvY2FsTWF0cml4ID0gMHg0MCxcbiAgV29ybGRNYXRyaXggPSAweDgwLFxuXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkUG9zaXRpb24gKi9cbiAgV21XcCA9IDB4ODQsXG4gIC8qKiBXb3JsZE1hdHJpeCB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgKi9cbiAgV21XZVdxID0gMHg5OCxcbiAgLyoqIFdvcmxkTWF0cml4IHwgV29ybGRQb3NpdGlvbiB8IFdvcmxkRXVsZXIgfCBXb3JsZFF1YXQgKi9cbiAgV21XcFdlV3EgPSAweDljLFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFNjYWxlICovXG4gIFdtV3MgPSAweGEwLFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uIHwgV29ybGRTY2FsZSAqL1xuICBXbVdwV3MgPSAweGE0LFxuICAvKiogV29ybGRNYXRyaXggfCBXb3JsZFBvc2l0aW9uIHwgV29ybGRFdWxlciB8IFdvcmxkUXVhdCB8IFdvcmxkU2NhbGUgKi9cbiAgV21XcFdlV3FXcyA9IDB4YmNcbn1cbiIsImltcG9ydCB7IElDb2xsaWRlciB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgUmF5LCBWZWN0b3IzIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmVcIjtcbmltcG9ydCB7IExpdGVIaXRSZXN1bHQgfSBmcm9tIFwiLi9MaXRlSGl0UmVzdWx0XCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlVHJhbnNmb3JtIH0gZnJvbSBcIi4vTGl0ZVRyYW5zZm9ybVwiO1xuXG4vKipcbiAqIEFic3RyYWN0IGNsYXNzIG9mIHBoeXNpY2FsIGNvbGxpZGVyLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSUNvbGxpZGVyIHtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfc2hhcGVzOiBMaXRlQ29sbGlkZXJTaGFwZVtdID0gW107XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgX3RyYW5zZm9ybTogTGl0ZVRyYW5zZm9ybSA9IG5ldyBMaXRlVHJhbnNmb3JtKCk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5vd25lciA9IHRoaXM7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5hZGRTaGFwZSB9XG4gICAqL1xuICBhZGRTaGFwZShzaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCBvbGRDb2xsaWRlciA9IHNoYXBlLl9jb2xsaWRlcjtcbiAgICBpZiAob2xkQ29sbGlkZXIgIT09IHRoaXMpIHtcbiAgICAgIGlmIChvbGRDb2xsaWRlcikge1xuICAgICAgICBvbGRDb2xsaWRlci5yZW1vdmVTaGFwZShzaGFwZSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zaGFwZXMucHVzaChzaGFwZSk7XG4gICAgICBzaGFwZS5fY29sbGlkZXIgPSB0aGlzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLnJlbW92ZVNoYXBlIH1cbiAgICovXG4gIHJlbW92ZVNoYXBlKHNoYXBlOiBMaXRlQ29sbGlkZXJTaGFwZSk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2hhcGVzLmluZGV4T2Yoc2hhcGUpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX3NoYXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgc2hhcGUuX2NvbGxpZGVyID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlci5zZXRXb3JsZFRyYW5zZm9ybSB9XG4gICAqL1xuICBzZXRXb3JsZFRyYW5zZm9ybShwb3NpdGlvbjogVmVjdG9yMywgcm90YXRpb246IFF1YXRlcm5pb24pOiB2b2lkIHtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCByb3RhdGlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUNvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtIH1cbiAgICovXG4gIGdldFdvcmxkVHJhbnNmb3JtKG91dFBvc2l0aW9uOiBWZWN0b3IzLCBvdXRSb3RhdGlvbjogUXVhdGVybmlvbik6IHZvaWQge1xuICAgIGNvbnN0IHsgcG9zaXRpb24sIHJvdGF0aW9uUXVhdGVybmlvbiB9ID0gdGhpcy5fdHJhbnNmb3JtO1xuICAgIG91dFBvc2l0aW9uLnNldChwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KTtcbiAgICBvdXRSb3RhdGlvbi5zZXQocm90YXRpb25RdWF0ZXJuaW9uLngsIHJvdGF0aW9uUXVhdGVybmlvbi55LCByb3RhdGlvblF1YXRlcm5pb24ueiwgcm90YXRpb25RdWF0ZXJuaW9uLncpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXIuZGVzdHJveSB9XG4gICAqL1xuICBkZXN0cm95KCk6IHZvaWQge31cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBfcmF5Y2FzdChyYXk6IFJheSwgb25SYXljYXN0OiAob2JqOiBudW1iZXIpID0+IGJvb2xlYW4sIGhpdDogTGl0ZUhpdFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGhpdC5kaXN0YW5jZSA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgY29uc3Qgc2hhcGVzID0gdGhpcy5fc2hhcGVzO1xuICAgIGZvciAobGV0IGkgPSAwLCBuID0gc2hhcGVzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgY29uc3Qgc2hhcGUgPSBzaGFwZXNbaV07XG4gICAgICBvblJheWNhc3Qoc2hhcGUuX2lkKSAmJiBzaGFwZS5fcmF5Y2FzdChyYXksIGhpdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhpdC5kaXN0YW5jZSAhPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICB9XG59XG4iLCJpbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IElEeW5hbWljQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IFF1YXRlcm5pb24sIFZlY3RvcjMgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZVwiO1xuXG4vKipcbiAqIEEgZHluYW1pYyBjb2xsaWRlciBjYW4gYWN0IHdpdGggc2VsZi1kZWZpbmVkIG1vdmVtZW50IG9yIHBoeXNpY2FsIGZvcmNlXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlRHluYW1pY0NvbGxpZGVyIGV4dGVuZHMgTGl0ZUNvbGxpZGVyIGltcGxlbWVudHMgSUR5bmFtaWNDb2xsaWRlciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGR5bmFtaWMgYWN0b3IuXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIFRoZSBnbG9iYWwgcG9zaXRpb25cbiAgICogQHBhcmFtIHJvdGF0aW9uIC0gVGhlIGdsb2JhbCByb3RhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCByb3RhdGlvbi53KTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5hZGRGb3JjZSB9XG4gICAqL1xuICBhZGRGb3JjZShmb3JjZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgYWRkRm9yY2UuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuYWRkVG9ycXVlIH1cbiAgICovXG4gIGFkZFRvcnF1ZSh0b3JxdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZFRvcnF1ZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5tb3ZlIH1cbiAgICovXG4gIG1vdmUocG9zaXRpb25PclJvdGF0aW9uOiBWZWN0b3IzIHwgUXVhdGVybmlvbiwgcm90YXRpb24/OiBRdWF0ZXJuaW9uKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBtb3ZlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNsZWVwIH1cbiAgICovXG4gIHNsZWVwKCk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgcHV0VG9TbGVlcC4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRBbmd1bGFyRGFtcGluZyB9XG4gICAqL1xuICBzZXRBbmd1bGFyRGFtcGluZyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRBbmd1bGFyRGFtcGluZy4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRBbmd1bGFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0QW5ndWxhclZlbG9jaXR5KHZhbHVlOiBWZWN0b3IzKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRBbmd1bGFyVmVsb2NpdHkuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0Q2VudGVyT2ZNYXNzIH1cbiAgICovXG4gIHNldENlbnRlck9mTWFzcyh2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0Q2VudGVyT2ZNYXNzLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENvbGxpc2lvbkRldGVjdGlvbk1vZGUgfVxuICAgKi9cbiAgc2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRDb2xsaXNpb25EZXRlY3Rpb25Nb2RlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldENvbnN0cmFpbnRzIH1cbiAgICovXG4gIHNldENvbnN0cmFpbnRzKGZsYWdzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldENvbnN0cmFpbnRzLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldEluZXJ0aWFUZW5zb3IgfVxuICAgKi9cbiAgc2V0SW5lcnRpYVRlbnNvcih2YWx1ZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SW5lcnRpYVRlbnNvci4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSUR5bmFtaWNDb2xsaWRlci5zZXRJc0tpbmVtYXRpYyB9XG4gICAqL1xuICBzZXRJc0tpbmVtYXRpYyh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0SXNLaW5lbWF0aWMuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0TGluZWFyRGFtcGluZyB9XG4gICAqL1xuICBzZXRMaW5lYXJEYW1waW5nKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldExpbmVhckRhbXBpbmcuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElEeW5hbWljQ29sbGlkZXIuc2V0TGluZWFyVmVsb2NpdHkgfVxuICAgKi9cbiAgc2V0TGluZWFyVmVsb2NpdHkodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldExpbmVhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1hc3MgfVxuICAgKi9cbiAgc2V0TWFzcyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRNYXNzLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1heEFuZ3VsYXJWZWxvY2l0eSB9XG4gICAqL1xuICBzZXRNYXhBbmd1bGFyVmVsb2NpdHkodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF4QW5ndWxhclZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldE1heERlcGVuZXRyYXRpb25WZWxvY2l0eSB9XG4gICAqL1xuICBzZXRNYXhEZXBlbmV0cmF0aW9uVmVsb2NpdHkodmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgc2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5LiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldFNsZWVwVGhyZXNob2xkIH1cbiAgICovXG4gIHNldFNsZWVwVGhyZXNob2xkKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHNldFNsZWVwVGhyZXNob2xkLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLnNldFNvbHZlckl0ZXJhdGlvbnMgfVxuICAgKi9cbiAgc2V0U29sdmVySXRlcmF0aW9ucyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBzZXRTb2x2ZXJJdGVyYXRpb25zLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJRHluYW1pY0NvbGxpZGVyLndha2VVcCB9XG4gICAqL1xuICB3YWtlVXAoKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCB3YWtlVXAuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cbn1cbiIsIi8qKlxuICogSGlnaC1wZXJmb3JtYW5jZSB1bm9yZGVyZWQgYXJyYXksIGRlbGV0ZSB1c2VzIGV4Y2hhbmdlIG1ldGhvZCB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLCBpbnRlcm5hbCBjYXBhY2l0eSBvbmx5IGluY3JlYXNlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIERpc29yZGVyZWRBcnJheTxUPiB7XG4gIF9lbGVtZW50czogVFtdO1xuXG4gIGxlbmd0aDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihjb3VudDogbnVtYmVyID0gMCkge1xuICAgIHRoaXMuX2VsZW1lbnRzID0gbmV3IEFycmF5PFQ+KGNvdW50KTtcbiAgfVxuXG4gIGFkZChlbGVtZW50OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubGVuZ3RoID09PSB0aGlzLl9lbGVtZW50cy5sZW5ndGgpIHRoaXMuX2VsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgZWxzZSB0aGlzLl9lbGVtZW50c1t0aGlzLmxlbmd0aF0gPSBlbGVtZW50O1xuICAgIHRoaXMubGVuZ3RoKys7XG4gIH1cblxuICBkZWxldGUoZWxlbWVudDogVCk6IHZvaWQge1xuICAgIC8vVE9ETzogSXQgY2FuIGJlIG9wdGltaXplZCBmb3IgY3VzdG9tIGJpbmFyeSBzZWFyY2ggYW5kIG90aGVyIGFsZ29yaXRobXMsIGN1cnJlbnRseSB0aGlzLl9lbGVtZW50cz49dGhpcy5sZW5ndGggd2FzdGVzIHBlcmZvcm1hbmNlLlxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZWxlbWVudHMuaW5kZXhPZihlbGVtZW50KTtcbiAgICB0aGlzLmRlbGV0ZUJ5SW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgZ2V0KGluZGV4OiBudW1iZXIpOiBUIHtcbiAgICBpZiAoaW5kZXggPj0gdGhpcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IFwiSW5kZXggaXMgb3V0IG9mIHJhbmdlLlwiO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudHNbaW5kZXhdO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcmV0dXJucyBUaGUgcmVwbGFjZWQgaXRlbSBpcyB1c2VkIHRvIHJlc2V0IGl0cyBpbmRleC5cbiAgICovXG4gIGRlbGV0ZUJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFQge1xuICAgIHZhciBlbGVtZW50czogVFtdID0gdGhpcy5fZWxlbWVudHM7XG4gICAgbGV0IGVuZDogVCA9IG51bGw7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5sZW5ndGggLSAxO1xuICAgIGlmIChpbmRleCAhPT0gbGFzdEluZGV4KSB7XG4gICAgICBlbmQgPSBlbGVtZW50c1tsYXN0SW5kZXhdO1xuICAgICAgZWxlbWVudHNbaW5kZXhdID0gZW5kO1xuICAgIH1cbiAgICB0aGlzLmxlbmd0aC0tO1xuICAgIHJldHVybiBlbmQ7XG4gIH1cblxuICBnYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9lbGVtZW50cy5sZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgfVxufVxuIiwiaW1wb3J0IHsgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5cbi8qKlxuICogU3RydWN0dXJlIHVzZWQgdG8gZ2V0IGluZm9ybWF0aW9uIGJhY2sgZnJvbSBhIHJheWNhc3Qgb3IgYSBzd2VlcC5cbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUhpdFJlc3VsdCB7XG4gIC8qKiBUaGUgY29sbGlkZXIgdGhhdCB3YXMgaGl0LiAqL1xuICBzaGFwZUlEOiBudW1iZXIgPSAtMTtcbiAgLyoqIFRoZSBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIGhpdCBwb2ludC4gKi9cbiAgZGlzdGFuY2U6IG51bWJlciA9IDA7XG4gIC8qKiBUaGUgaGl0IHBvaW50IG9mIHRoZSBjb2xsaWRlciB0aGF0IHdhcyBoaXQgaW4gd29ybGQgc3BhY2UuICovXG4gIHBvaW50OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgLyoqIFRoZSBoaXQgbm9ybWFsIG9mIHRoZSBjb2xsaWRlciB0aGF0IHdhcyBoaXQgaW4gd29ybGQgc3BhY2UuICovXG4gIG5vcm1hbDogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKCk7XG59XG4iLCJpbXBvcnQgeyBJQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgQm91bmRpbmdCb3gsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiLi4vTGl0ZVBoeXNpY3NNYXRlcmlhbFwiO1xuXG4vKipcbiAqIEJveCBjb2xsaWRlciBzaGFwZSBpbiBMaXRlLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZUJveENvbGxpZGVyU2hhcGUgZXh0ZW5kcyBMaXRlQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElCb3hDb2xsaWRlclNoYXBlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBCb3g6IEJvdW5kaW5nQm94ID0gbmV3IEJvdW5kaW5nQm94KCk7XG4gIHByaXZhdGUgX2hhbGZTaXplOiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKTtcbiAgcHJpdmF0ZSBfc2NhbGU6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcblxuICAvKiogQGludGVybmFsICovXG4gIF9ib3hNaW46IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygtMC41LCAtMC41LCAtMC41KTtcbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBfYm94TWF4OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoMC41LCAwLjUsIDAuNSk7XG5cbiAgLyoqXG4gICAqIEluaXQgQm94IFNoYXBlLlxuICAgKiBAcGFyYW0gdW5pcXVlSUQgLSBVbmlxdWVJRCBtYXJrIFNoYXBlLlxuICAgKiBAcGFyYW0gc2l6ZSAtIFNpemUgb2YgU2hhcGUuXG4gICAqIEBwYXJhbSBtYXRlcmlhbCAtIE1hdGVyaWFsIG9mIFBoeXNYQ29sbGlkZXIuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih1bmlxdWVJRDogbnVtYmVyLCBzaXplOiBWZWN0b3IzLCBtYXRlcmlhbDogTGl0ZVBoeXNpY3NNYXRlcmlhbCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5faWQgPSB1bmlxdWVJRDtcbiAgICB0aGlzLl9oYWxmU2l6ZS5zZXQoc2l6ZS54ICogMC41LCBzaXplLnkgKiAwLjUsIHNpemUueiAqIDAuNSk7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQ29sbGlkZXJTaGFwZS5zZXRQb3NpdGlvbiB9XG4gICAqL1xuICBzZXRQb3NpdGlvbihwb3NpdGlvbjogVmVjdG9yMyk6IHZvaWQge1xuICAgIHN1cGVyLnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcbiAgICB0aGlzLl9zZXRCb25kaW5nQm94KCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX3RyYW5zZm9ybS5wb3NpdGlvbiA9IHRoaXMuX3RyYW5zZm9ybS5wb3NpdGlvbi5tdWx0aXBseShzY2FsZSk7XG4gICAgdGhpcy5fc2NhbGUuY29weUZyb20oc2NhbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJQm94Q29sbGlkZXJTaGFwZS5zZXRTaXplIH1cbiAgICovXG4gIHNldFNpemUodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICB0aGlzLl9oYWxmU2l6ZS5zZXQodmFsdWUueCAqIDAuNSwgdmFsdWUueSAqIDAuNSwgdmFsdWUueiAqIDAuNSk7XG4gICAgdGhpcy5fc2V0Qm9uZGluZ0JveCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIGhpdDogTGl0ZUhpdFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGxvY2FsUmF5ID0gdGhpcy5fZ2V0TG9jYWxSYXkocmF5KTtcblxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gTGl0ZUJveENvbGxpZGVyU2hhcGUuX3RlbXBCb3g7XG4gICAgYm91bmRpbmdCb3gubWluLnNldChcbiAgICAgIC10aGlzLl9oYWxmU2l6ZS54ICogdGhpcy5fc2NhbGUueCxcbiAgICAgIC10aGlzLl9oYWxmU2l6ZS55ICogdGhpcy5fc2NhbGUueSxcbiAgICAgIC10aGlzLl9oYWxmU2l6ZS56ICogdGhpcy5fc2NhbGUuelxuICAgICk7XG4gICAgYm91bmRpbmdCb3gubWF4LnNldChcbiAgICAgIHRoaXMuX2hhbGZTaXplLnggKiB0aGlzLl9zY2FsZS54LFxuICAgICAgdGhpcy5faGFsZlNpemUueSAqIHRoaXMuX3NjYWxlLnksXG4gICAgICB0aGlzLl9oYWxmU2l6ZS56ICogdGhpcy5fc2NhbGUuelxuICAgICk7XG4gICAgY29uc3QgcmF5RGlzdGFuY2UgPSBsb2NhbFJheS5pbnRlcnNlY3RCb3goYm91bmRpbmdCb3gpO1xuICAgIGlmIChyYXlEaXN0YW5jZSAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUhpdFJlc3VsdChsb2NhbFJheSwgcmF5RGlzdGFuY2UsIGhpdCwgcmF5Lm9yaWdpbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldEJvbmRpbmdCb3goKTogdm9pZCB7XG4gICAgY29uc3QgeyBwb3NpdGlvbjogY2VudGVyIH0gPSB0aGlzLl90cmFuc2Zvcm07XG4gICAgY29uc3QgaGFsZlNpemUgPSB0aGlzLl9oYWxmU2l6ZTtcblxuICAgIFZlY3RvcjMuYWRkKGNlbnRlciwgaGFsZlNpemUsIHRoaXMuX2JveE1heCk7XG4gICAgVmVjdG9yMy5zdWJ0cmFjdChjZW50ZXIsIGhhbGZTaXplLCB0aGlzLl9ib3hNaW4pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgTGl0ZUNvbGxpZGVyU2hhcGUgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJTaGFwZVwiO1xuaW1wb3J0IHsgQm91bmRpbmdTcGhlcmUsIFF1YXRlcm5pb24sIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlSGl0UmVzdWx0IH0gZnJvbSBcIi4uL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVQaHlzaWNzTWF0ZXJpYWwgfSBmcm9tIFwiLi4vTGl0ZVBoeXNpY3NNYXRlcmlhbFwiO1xuXG4vKipcbiAqIFNwaGVyZSBjb2xsaWRlciBzaGFwZSBpbiBMaXRlLlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUgZXh0ZW5kcyBMaXRlQ29sbGlkZXJTaGFwZSBpbXBsZW1lbnRzIElTcGhlcmVDb2xsaWRlclNoYXBlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBTcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG5cbiAgcHJpdmF0ZSBfcmFkaXVzOiBudW1iZXIgPSAxO1xuICBwcml2YXRlIF9tYXhTY2FsZTogbnVtYmVyID0gMTtcblxuICBnZXQgd29ybGRSYWRpdXMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcmFkaXVzICogdGhpcy5fbWF4U2NhbGU7XG4gIH1cblxuICAvKipcbiAgICogSW5pdCBzcGhlcmUgc2hhcGUuXG4gICAqIEBwYXJhbSB1bmlxdWVJRCAtIFVuaXF1ZUlEIG1hcmsgY29sbGlkZXJcbiAgICogQHBhcmFtIHJhZGl1cyAtIFNpemUgb2YgU3BoZXJlQ29sbGlkZXJcbiAgICogQHBhcmFtIG1hdGVyaWFsIC0gTWF0ZXJpYWwgb2YgUGh5c1hDb2xsaWRlclxuICAgKi9cbiAgY29uc3RydWN0b3IodW5pcXVlSUQ6IG51bWJlciwgcmFkaXVzOiBudW1iZXIsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XG4gICAgdGhpcy5faWQgPSB1bmlxdWVJRDtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVNwaGVyZUNvbGxpZGVyU2hhcGUuc2V0UmFkaXVzIH1cbiAgICovXG4gIHNldFJhZGl1cyh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcmFkaXVzID0gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElDb2xsaWRlclNoYXBlLnNldFdvcmxkU2NhbGUgfVxuICAgKi9cbiAgc2V0V29ybGRTY2FsZShzY2FsZTogVmVjdG9yMyk6IHZvaWQge1xuICAgIHRoaXMuX21heFNjYWxlID0gTWF0aC5tYXgoc2NhbGUueCwgTWF0aC5tYXgoc2NhbGUueCwgc2NhbGUueSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgX3JheWNhc3QocmF5OiBSYXksIGhpdDogTGl0ZUhpdFJlc3VsdCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJvdW5kaW5nU3BoZXJlID0gTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGUuX3RlbXBTcGhlcmU7XG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKHRoaXMuX3RyYW5zZm9ybS5wb3NpdGlvbiwgdGhpcy5fY29sbGlkZXIuX3RyYW5zZm9ybS53b3JsZE1hdHJpeCwgYm91bmRpbmdTcGhlcmUuY2VudGVyKTtcbiAgICBib3VuZGluZ1NwaGVyZS5yYWRpdXMgPSB0aGlzLndvcmxkUmFkaXVzO1xuXG4gICAgY29uc3QgcmF5RGlzdGFuY2UgPSByYXkuaW50ZXJzZWN0U3BoZXJlKGJvdW5kaW5nU3BoZXJlKTtcbiAgICBpZiAocmF5RGlzdGFuY2UgIT09IC0xKSB7XG4gICAgICB0aGlzLl91cGRhdGVIaXRSZXN1bHQocmF5LCByYXlEaXN0YW5jZSwgaGl0LCByYXkub3JpZ2luLCB0cnVlKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBJQ2hhcmFjdGVyQ29udHJvbGxlciwgSVBoeXNpY3NNYW5hZ2VyIH0gZnJvbSBcIkBnYWxhY2Vhbi9lbmdpbmUtZGVzaWduXCI7XG5pbXBvcnQgeyBCb3VuZGluZ0JveCwgQm91bmRpbmdTcGhlcmUsIENvbGxpc2lvblV0aWwsIFJheSwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBEaXNvcmRlcmVkQXJyYXkgfSBmcm9tIFwiLi9EaXNvcmRlcmVkQXJyYXlcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZUhpdFJlc3VsdCB9IGZyb20gXCIuL0xpdGVIaXRSZXN1bHRcIjtcbmltcG9ydCB7IExpdGVCb3hDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZUJveENvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZUNvbGxpZGVyU2hhcGVcIjtcbmltcG9ydCB7IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlIH0gZnJvbSBcIi4vc2hhcGUvTGl0ZVNwaGVyZUNvbGxpZGVyU2hhcGVcIjtcblxuLyoqXG4gKiBBIG1hbmFnZXIgaXMgYSBjb2xsZWN0aW9uIG9mIGNvbGxpZGVycyBhbmQgY29uc3RyYWludHMgd2hpY2ggY2FuIGludGVyYWN0LlxuICovXG5leHBvcnQgY2xhc3MgTGl0ZVBoeXNpY3NNYW5hZ2VyIGltcGxlbWVudHMgSVBoeXNpY3NNYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RlbXBTcGhlcmU6IEJvdW5kaW5nU3BoZXJlID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZW1wQm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuICBwcml2YXRlIHN0YXRpYyBfY3VycmVudEhpdDogTGl0ZUhpdFJlc3VsdCA9IG5ldyBMaXRlSGl0UmVzdWx0KCk7XG4gIHByaXZhdGUgc3RhdGljIF9oaXRSZXN1bHQ6IExpdGVIaXRSZXN1bHQgPSBuZXcgTGl0ZUhpdFJlc3VsdCgpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX29uQ29udGFjdEVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RFeGl0PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNvbnRhY3RTdGF5PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9vblRyaWdnZXJFbnRlcj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyRXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcbiAgcHJpdmF0ZSByZWFkb25seSBfb25UcmlnZ2VyU3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZDtcblxuICBwcml2YXRlIF9jb2xsaWRlcnM6IExpdGVDb2xsaWRlcltdID0gW107XG4gIHByaXZhdGUgX3NwaGVyZTogQm91bmRpbmdTcGhlcmUgPSBuZXcgQm91bmRpbmdTcGhlcmUoKTtcbiAgcHJpdmF0ZSBfYm94OiBCb3VuZGluZ0JveCA9IG5ldyBCb3VuZGluZ0JveCgpO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRFdmVudHM6IERpc29yZGVyZWRBcnJheTxUcmlnZ2VyRXZlbnQ+ID0gbmV3IERpc29yZGVyZWRBcnJheTxUcmlnZ2VyRXZlbnQ+KCk7XG4gIHByaXZhdGUgX2V2ZW50TWFwOiBSZWNvcmQ8bnVtYmVyLCBSZWNvcmQ8bnVtYmVyLCBUcmlnZ2VyRXZlbnQ+PiA9IHt9O1xuICBwcml2YXRlIF9ldmVudFBvb2w6IFRyaWdnZXJFdmVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgb25Db250YWN0RW50ZXI/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0RXhpdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvbkNvbnRhY3RTdGF5PzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlckVudGVyPzogKG9iajE6IG51bWJlciwgb2JqMjogbnVtYmVyKSA9PiB2b2lkLFxuICAgIG9uVHJpZ2dlckV4aXQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyU3RheT86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZFxuICApIHtcbiAgICB0aGlzLl9vbkNvbnRhY3RFbnRlciA9IG9uQ29udGFjdEVudGVyO1xuICAgIHRoaXMuX29uQ29udGFjdEV4aXQgPSBvbkNvbnRhY3RFeGl0O1xuICAgIHRoaXMuX29uQ29udGFjdFN0YXkgPSBvbkNvbnRhY3RTdGF5O1xuICAgIHRoaXMuX29uVHJpZ2dlckVudGVyID0gb25UcmlnZ2VyRW50ZXI7XG4gICAgdGhpcy5fb25UcmlnZ2VyRXhpdCA9IG9uVHJpZ2dlckV4aXQ7XG4gICAgdGhpcy5fb25UcmlnZ2VyU3RheSA9IG9uVHJpZ2dlclN0YXk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5zZXRHcmF2aXR5IH1cbiAgICovXG4gIHNldEdyYXZpdHkodmFsdWU6IFZlY3RvcjMpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyhcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGdyYXZpdHkuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIuYWRkQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBhZGRDb2xsaWRlclNoYXBlKGNvbGxpZGVyU2hhcGU6IExpdGVDb2xsaWRlclNoYXBlKTogdm9pZCB7XG4gICAgdGhpcy5fZXZlbnRNYXBbY29sbGlkZXJTaGFwZS5faWRdID0ge307XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHJlbW92ZUNvbGxpZGVyU2hhcGUoY29sbGlkZXJTaGFwZTogTGl0ZUNvbGxpZGVyU2hhcGUpOiB2b2lkIHtcbiAgICBjb25zdCB7IF9ldmVudFBvb2w6IGV2ZW50UG9vbCwgX2N1cnJlbnRFdmVudHM6IGN1cnJlbnRFdmVudHMgfSA9IHRoaXM7XG4gICAgY29uc3QgeyBfaWQ6IHNoYXBlSUQgfSA9IGNvbGxpZGVyU2hhcGU7XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRFdmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gY3VycmVudEV2ZW50cy5nZXQoaSk7XG4gICAgICBpZiAoZXZlbnQuaW5kZXgxID09IHNoYXBlSUQgfHwgZXZlbnQuaW5kZXgyID09IHNoYXBlSUQpIHtcbiAgICAgICAgY3VycmVudEV2ZW50cy5kZWxldGVCeUluZGV4KGkpO1xuICAgICAgICBldmVudFBvb2wucHVzaChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGRlbGV0ZSB0aGlzLl9ldmVudE1hcFtzaGFwZUlEXTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3NNYW5hZ2VyLmFkZENvbGxpZGVyIH1cbiAgICovXG4gIGFkZENvbGxpZGVyKGFjdG9yOiBMaXRlQ29sbGlkZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jb2xsaWRlcnMucHVzaChhY3Rvcik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDb2xsaWRlciB9XG4gICAqL1xuICByZW1vdmVDb2xsaWRlcihjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9jb2xsaWRlcnMuaW5kZXhPZihjb2xsaWRlcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fY29sbGlkZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hbmFnZXIudXBkYXRlIH1cbiAgICovXG4gIHVwZGF0ZShkZWx0YVRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBjb2xsaWRlcnMgPSB0aGlzLl9jb2xsaWRlcnM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgdGhpcy5fY29sbGlzaW9uRGV0ZWN0aW9uKGRlbHRhVGltZSwgY29sbGlkZXJzW2ldKTtcbiAgICB9XG4gICAgdGhpcy5fZmlyZUV2ZW50KCk7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yYXljYXN0IH1cbiAgICovXG4gIHJheWNhc3QoXG4gICAgcmF5OiBSYXksXG4gICAgZGlzdGFuY2U6IG51bWJlcixcbiAgICBvblJheWNhc3Q6IChvYmo6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBoaXQ/OiAoc2hhcGVVbmlxdWVJRDogbnVtYmVyLCBkaXN0YW5jZTogbnVtYmVyLCBwb3NpdGlvbjogVmVjdG9yMywgbm9ybWFsOiBWZWN0b3IzKSA9PiB2b2lkXG4gICk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbGxpZGVycyA9IHRoaXMuX2NvbGxpZGVycztcblxuICAgIGxldCBoaXRSZXN1bHQ6IExpdGVIaXRSZXN1bHQ7XG4gICAgaWYgKGhpdCkge1xuICAgICAgaGl0UmVzdWx0ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl9oaXRSZXN1bHQ7XG4gICAgfVxuXG4gICAgbGV0IGlzSGl0ID0gZmFsc2U7XG4gICAgY29uc3QgY3VySGl0ID0gTGl0ZVBoeXNpY3NNYW5hZ2VyLl9jdXJyZW50SGl0O1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjb2xsaWRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbGxpZGVyID0gY29sbGlkZXJzW2ldO1xuXG4gICAgICBpZiAoY29sbGlkZXIuX3JheWNhc3QocmF5LCBvblJheWNhc3QsIGN1ckhpdCkpIHtcbiAgICAgICAgaXNIaXQgPSB0cnVlO1xuICAgICAgICBpZiAoY3VySGl0LmRpc3RhbmNlIDwgZGlzdGFuY2UpIHtcbiAgICAgICAgICBpZiAoaGl0UmVzdWx0KSB7XG4gICAgICAgICAgICBoaXRSZXN1bHQubm9ybWFsLmNvcHlGcm9tKGN1ckhpdC5ub3JtYWwpO1xuICAgICAgICAgICAgaGl0UmVzdWx0LnBvaW50LmNvcHlGcm9tKGN1ckhpdC5wb2ludCk7XG4gICAgICAgICAgICBoaXRSZXN1bHQuZGlzdGFuY2UgPSBjdXJIaXQuZGlzdGFuY2U7XG4gICAgICAgICAgICBoaXRSZXN1bHQuc2hhcGVJRCA9IGN1ckhpdC5zaGFwZUlEO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGlzdGFuY2UgPSBjdXJIaXQuZGlzdGFuY2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWlzSGl0ICYmIGhpdFJlc3VsdCkge1xuICAgICAgaGl0UmVzdWx0LnNoYXBlSUQgPSAtMTtcbiAgICAgIGhpdFJlc3VsdC5kaXN0YW5jZSA9IDA7XG4gICAgICBoaXRSZXN1bHQucG9pbnQuc2V0KDAsIDAsIDApO1xuICAgICAgaGl0UmVzdWx0Lm5vcm1hbC5zZXQoMCwgMCwgMCk7XG4gICAgfSBlbHNlIGlmIChpc0hpdCAmJiBoaXRSZXN1bHQpIHtcbiAgICAgIGhpdChoaXRSZXN1bHQuc2hhcGVJRCwgaGl0UmVzdWx0LmRpc3RhbmNlLCBoaXRSZXN1bHQucG9pbnQsIGhpdFJlc3VsdC5ub3JtYWwpO1xuICAgIH1cbiAgICByZXR1cm4gaXNIaXQ7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5hZGRDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIGFkZENoYXJhY3RlckNvbnRyb2xsZXIoY2hhcmFjdGVyQ29udHJvbGxlcjogSUNoYXJhY3RlckNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IGFkZENoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWFuYWdlci5yZW1vdmVDaGFyYWN0ZXJDb250cm9sbGVyIH1cbiAgICovXG4gIHJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIoY2hhcmFjdGVyQ29udHJvbGxlcjogSUNoYXJhY3RlckNvbnRyb2xsZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHJlbW92ZUNoYXJhY3RlckNvbnRyb2xsZXIuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBib3VuZGluZyBib3ggaW4gd29ybGQgc3BhY2UgZnJvbSBib3hDb2xsaWRlci5cbiAgICogQHBhcmFtIGJveENvbGxpZGVyIC0gVGhlIGJveENvbGxpZGVyIHRvIGNhbGN1bGF0ZVxuICAgKiBAcGFyYW0gb3V0IC0gVGhlIGNhbGN1bGF0ZWQgYm91bmRpbmdCb3hcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIF91cGRhdGVXb3JsZEJveChib3hDb2xsaWRlcjogTGl0ZUJveENvbGxpZGVyU2hhcGUsIG91dDogQm91bmRpbmdCb3gpOiB2b2lkIHtcbiAgICBjb25zdCBtYXQgPSBib3hDb2xsaWRlci5fdHJhbnNmb3JtLndvcmxkTWF0cml4O1xuICAgIG91dC5taW4uY29weUZyb20oYm94Q29sbGlkZXIuX2JveE1pbik7XG4gICAgb3V0Lm1heC5jb3B5RnJvbShib3hDb2xsaWRlci5fYm94TWF4KTtcbiAgICBCb3VuZGluZ0JveC50cmFuc2Zvcm0ob3V0LCBtYXQsIG91dCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzcGhlcmUgaW5mbyBvZiB0aGUgZ2l2ZW4gc3BoZXJlIGNvbGxpZGVyIGluIHdvcmxkIHNwYWNlLlxuICAgKiBAcGFyYW0gc3BoZXJlQ29sbGlkZXIgLSBUaGUgZ2l2ZW4gc3BoZXJlIGNvbGxpZGVyXG4gICAqIEBwYXJhbSBvdXQgLSBUaGUgY2FsY3VsYXRlZCBib3VuZGluZ1NwaGVyZVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX3VwV29ybGRTcGhlcmUoc3BoZXJlQ29sbGlkZXI6IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlLCBvdXQ6IEJvdW5kaW5nU3BoZXJlKTogdm9pZCB7XG4gICAgVmVjdG9yMy50cmFuc2Zvcm1Db29yZGluYXRlKHNwaGVyZUNvbGxpZGVyLl90cmFuc2Zvcm0ucG9zaXRpb24sIHNwaGVyZUNvbGxpZGVyLl90cmFuc2Zvcm0ud29ybGRNYXRyaXgsIG91dC5jZW50ZXIpO1xuICAgIG91dC5yYWRpdXMgPSBzcGhlcmVDb2xsaWRlci53b3JsZFJhZGl1cztcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyaWdnZXIoaW5kZXgxOiBudW1iZXIsIGluZGV4MjogbnVtYmVyKTogVHJpZ2dlckV2ZW50IHtcbiAgICBsZXQgZXZlbnQ6IFRyaWdnZXJFdmVudDtcbiAgICBpZiAodGhpcy5fZXZlbnRQb29sLmxlbmd0aCkge1xuICAgICAgZXZlbnQgPSB0aGlzLl9ldmVudFBvb2wucG9wKCk7XG4gICAgICBldmVudC5pbmRleDEgPSBpbmRleDE7XG4gICAgICBldmVudC5pbmRleDIgPSBpbmRleDI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV2ZW50ID0gbmV3IFRyaWdnZXJFdmVudChpbmRleDEsIGluZGV4Mik7XG4gICAgfVxuICAgIHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA9IGV2ZW50O1xuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbGxpc2lvbkRldGVjdGlvbihkZWx0YVRpbWU6IG51bWJlciwgbXlDb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogdm9pZCB7XG4gICAgY29uc3QgY29sbGlkZXJzID0gdGhpcy5fY29sbGlkZXJzO1xuXG4gICAgY29uc3QgbXlDb2xsaWRlclNoYXBlcyA9IG15Q29sbGlkZXIuX3NoYXBlcztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbXlDb2xsaWRlclNoYXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgbXlTaGFwZSA9IG15Q29sbGlkZXJTaGFwZXNbaV07XG4gICAgICBpZiAobXlTaGFwZSBpbnN0YW5jZW9mIExpdGVCb3hDb2xsaWRlclNoYXBlKSB7XG4gICAgICAgIExpdGVQaHlzaWNzTWFuYWdlci5fdXBkYXRlV29ybGRCb3gobXlTaGFwZSwgdGhpcy5fYm94KTtcbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IGNvbGxpZGVycy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbGxpZGVyU2hhcGUgPSBjb2xsaWRlcnNbal0uX3NoYXBlcztcbiAgICAgICAgICBmb3IgKGxldCBrID0gMCwgbGVuID0gY29sbGlkZXJTaGFwZS5sZW5ndGg7IGsgPCBsZW47IGsrKykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSBjb2xsaWRlclNoYXBlW2tdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgxID0gc2hhcGUuX2lkO1xuICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gbXlTaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2V2ZW50TWFwW2luZGV4MV1baW5kZXgyXSA6IHRoaXMuX2V2ZW50TWFwW2luZGV4Ml1baW5kZXgxXTtcbiAgICAgICAgICAgIGlmIChldmVudCAhPT0gdW5kZWZpbmVkICYmICFldmVudC5hbHJlYWR5SW52b2tlZCkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzaGFwZSAhPSBteVNoYXBlICYmIHRoaXMuX2JveENvbGxpc2lvbihzaGFwZSkpIHtcbiAgICAgICAgICAgICAgaWYgKGV2ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudCA9IGluZGV4MSA8IGluZGV4MiA/IHRoaXMuX2dldFRyaWdnZXIoaW5kZXgxLCBpbmRleDIpIDogdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDIsIGluZGV4MSk7XG4gICAgICAgICAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcjtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRFdmVudHMuYWRkKGV2ZW50KTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuRW50ZXIpIHtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLlN0YXk7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5zdGF0ZSA9PT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobXlTaGFwZSBpbnN0YW5jZW9mIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKSB7XG4gICAgICAgIExpdGVQaHlzaWNzTWFuYWdlci5fdXBXb3JsZFNwaGVyZShteVNoYXBlLCB0aGlzLl9zcGhlcmUpO1xuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gY29sbGlkZXJzLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XG4gICAgICAgICAgY29uc3QgY29sbGlkZXJTaGFwZSA9IGNvbGxpZGVyc1tqXS5fc2hhcGVzO1xuICAgICAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4gPSBjb2xsaWRlclNoYXBlLmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgICAgICAgICBjb25zdCBzaGFwZSA9IGNvbGxpZGVyU2hhcGVba107XG4gICAgICAgICAgICBjb25zdCBpbmRleDEgPSBzaGFwZS5faWQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleDIgPSBteVNoYXBlLl9pZDtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gaW5kZXgxIDwgaW5kZXgyID8gdGhpcy5fZXZlbnRNYXBbaW5kZXgxXVtpbmRleDJdIDogdGhpcy5fZXZlbnRNYXBbaW5kZXgyXVtpbmRleDFdO1xuICAgICAgICAgICAgaWYgKGV2ZW50ICE9PSB1bmRlZmluZWQgJiYgIWV2ZW50LmFscmVhZHlJbnZva2VkKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNoYXBlICE9IG15U2hhcGUgJiYgdGhpcy5fc3BoZXJlQ29sbGlzaW9uKHNoYXBlKSkge1xuICAgICAgICAgICAgICBpZiAoZXZlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gaW5kZXgxIDwgaW5kZXgyID8gdGhpcy5fZ2V0VHJpZ2dlcihpbmRleDEsIGluZGV4MikgOiB0aGlzLl9nZXRUcmlnZ2VyKGluZGV4MiwgaW5kZXgxKTtcbiAgICAgICAgICAgICAgICBldmVudC5zdGF0ZSA9IFRyaWdnZXJFdmVudFN0YXRlLkVudGVyO1xuICAgICAgICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudEV2ZW50cy5hZGQoZXZlbnQpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcikge1xuICAgICAgICAgICAgICAgIGV2ZW50LnN0YXRlID0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheTtcbiAgICAgICAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXRlID09PSBUcmlnZ2VyRXZlbnRTdGF0ZS5TdGF5KSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuYWxyZWFkeUludm9rZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ZpcmVFdmVudCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IF9ldmVudFBvb2w6IGV2ZW50UG9vbCwgX2N1cnJlbnRFdmVudHM6IGN1cnJlbnRFdmVudHMgfSA9IHRoaXM7XG4gICAgZm9yIChsZXQgaSA9IGN1cnJlbnRFdmVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gY3VycmVudEV2ZW50cy5nZXQoaSk7XG4gICAgICBpZiAoIWV2ZW50LmFscmVhZHlJbnZva2VkKSB7XG4gICAgICAgIGlmIChldmVudC5zdGF0ZSA9PSBUcmlnZ2VyRXZlbnRTdGF0ZS5FbnRlcikge1xuICAgICAgICAgIHRoaXMuX29uVHJpZ2dlckVudGVyKGV2ZW50LmluZGV4MSwgZXZlbnQuaW5kZXgyKTtcbiAgICAgICAgICBldmVudC5hbHJlYWR5SW52b2tlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuc3RhdGUgPT0gVHJpZ2dlckV2ZW50U3RhdGUuU3RheSkge1xuICAgICAgICAgIHRoaXMuX29uVHJpZ2dlclN0YXkoZXZlbnQuaW5kZXgxLCBldmVudC5pbmRleDIpO1xuICAgICAgICAgIGV2ZW50LmFscmVhZHlJbnZva2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQuc3RhdGUgPSBUcmlnZ2VyRXZlbnRTdGF0ZS5FeGl0O1xuICAgICAgICB0aGlzLl9ldmVudE1hcFtldmVudC5pbmRleDFdW2V2ZW50LmluZGV4Ml0gPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgdGhpcy5fb25UcmlnZ2VyRXhpdChldmVudC5pbmRleDEsIGV2ZW50LmluZGV4Mik7XG5cbiAgICAgICAgY3VycmVudEV2ZW50cy5kZWxldGVCeUluZGV4KGkpO1xuICAgICAgICBldmVudFBvb2wucHVzaChldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYm94Q29sbGlzaW9uKG90aGVyOiBMaXRlQ29sbGlkZXJTaGFwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVCb3hDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBib3ggPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBCb3g7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG90aGVyLCBib3gpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c0JveEFuZEJveChib3gsIHRoaXMuX2JveCk7XG4gICAgfSBlbHNlIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBzcGhlcmUgPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBTcGhlcmU7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUob3RoZXIsIHNwaGVyZSk7XG4gICAgICByZXR1cm4gQ29sbGlzaW9uVXRpbC5pbnRlcnNlY3RzU3BoZXJlQW5kQm94KHNwaGVyZSwgdGhpcy5fYm94KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3BoZXJlQ29sbGlzaW9uKG90aGVyOiBMaXRlQ29sbGlkZXJTaGFwZSk6IGJvb2xlYW4ge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVCb3hDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBib3ggPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBCb3g7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwZGF0ZVdvcmxkQm94KG90aGVyLCBib3gpO1xuICAgICAgcmV0dXJuIENvbGxpc2lvblV0aWwuaW50ZXJzZWN0c1NwaGVyZUFuZEJveCh0aGlzLl9zcGhlcmUsIGJveCk7XG4gICAgfSBlbHNlIGlmIChvdGhlciBpbnN0YW5jZW9mIExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKSB7XG4gICAgICBjb25zdCBzcGhlcmUgPSBMaXRlUGh5c2ljc01hbmFnZXIuX3RlbXBTcGhlcmU7XG4gICAgICBMaXRlUGh5c2ljc01hbmFnZXIuX3VwV29ybGRTcGhlcmUob3RoZXIsIHNwaGVyZSk7XG4gICAgICByZXR1cm4gQ29sbGlzaW9uVXRpbC5pbnRlcnNlY3RzU3BoZXJlQW5kU3BoZXJlKHNwaGVyZSwgdGhpcy5fc3BoZXJlKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUGh5c2ljcyBzdGF0ZVxuICovXG5lbnVtIFRyaWdnZXJFdmVudFN0YXRlIHtcbiAgRW50ZXIsXG4gIFN0YXksXG4gIEV4aXRcbn1cblxuLyoqXG4gKiBUcmlnZ2VyIGV2ZW50IHRvIHN0b3JlIGludGVyYWN0aXZlIG9iamVjdCBpZHMgYW5kIHN0YXRlLlxuICovXG5jbGFzcyBUcmlnZ2VyRXZlbnQge1xuICBzdGF0ZTogVHJpZ2dlckV2ZW50U3RhdGU7XG4gIGluZGV4MTogbnVtYmVyO1xuICBpbmRleDI6IG51bWJlcjtcbiAgYWxyZWFkeUludm9rZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihpbmRleDE6IG51bWJlciwgaW5kZXgyOiBudW1iZXIpIHtcbiAgICB0aGlzLmluZGV4MSA9IGluZGV4MTtcbiAgICB0aGlzLmluZGV4MiA9IGluZGV4MjtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSVBoeXNpY3NNYXRlcmlhbCB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuXG4vKipcbiAqIFBoeXNpY3MgbWF0ZXJpYWwgZGVzY3JpYmVzIGhvdyB0byBoYW5kbGUgY29sbGlkaW5nIG9iamVjdHMgKGZyaWN0aW9uLCBib3VuY2luZXNzKS5cbiAqL1xuZXhwb3J0IGNsYXNzIExpdGVQaHlzaWNzTWF0ZXJpYWwgaW1wbGVtZW50cyBJUGh5c2ljc01hdGVyaWFsIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc3RhdGljRnJpY3Rpb246IG51bWJlcixcbiAgICBkeW5hbWljRnJpY3Rpb246IG51bWJlcixcbiAgICBib3VuY2luZXNzOiBudW1iZXIsXG4gICAgZnJpY3Rpb25Db21iaW5lOiBudW1iZXIsXG4gICAgYm91bmNlQ29tYmluZTogbnVtYmVyXG4gICkge31cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0Qm91bmNpbmVzcyB9XG4gICAqL1xuICBzZXRCb3VuY2luZXNzKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHBoeXNpY3MgbWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0RHluYW1pY0ZyaWN0aW9uIH1cbiAgICovXG4gIHNldER5bmFtaWNGcmljdGlvbih2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLnNldFN0YXRpY0ZyaWN0aW9uIH1cbiAgICovXG4gIHNldFN0YXRpY0ZyaWN0aW9uKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHBoeXNpY3MgbWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0Qm91bmNlQ29tYmluZSB9XG4gICAqL1xuICBzZXRCb3VuY2VDb21iaW5lKHZhbHVlOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IHBoeXNpY3MgbWF0ZXJpYWwuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzTWF0ZXJpYWwuc2V0RnJpY3Rpb25Db21iaW5lIH1cbiAgICovXG4gIHNldEZyaWN0aW9uQ29tYmluZSh2YWx1ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBwaHlzaWNzIG1hdGVyaWFsLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljc01hdGVyaWFsLmRlc3Ryb3kgfVxuICAgKi9cbiAgZGVzdHJveSgpOiB2b2lkIHt9XG59XG4iLCJpbXBvcnQgeyBJU3RhdGljQ29sbGlkZXIgfSBmcm9tIFwiQGdhbGFjZWFuL2VuZ2luZS1kZXNpZ25cIjtcbmltcG9ydCB7IExpdGVDb2xsaWRlciB9IGZyb20gXCIuL0xpdGVDb2xsaWRlclwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5cbi8qKlxuICogQSBzdGF0aWMgY29sbGlkZXIgY29tcG9uZW50IHRoYXQgd2lsbCBub3QgbW92ZS5cbiAqIEByZW1hcmtzIE1vc3RseSB1c2VkIGZvciBvYmplY3Qgd2hpY2ggYWx3YXlzIHN0YXlzIGF0IHRoZSBzYW1lIHBsYWNlIGFuZCBuZXZlciBtb3ZlcyBhcm91bmQuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaXRlU3RhdGljQ29sbGlkZXIgZXh0ZW5kcyBMaXRlQ29sbGlkZXIgaW1wbGVtZW50cyBJU3RhdGljQ29sbGlkZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBzdGF0aWMgYWN0b3IuXG4gICAqIEBwYXJhbSBwb3NpdGlvbiAtIFRoZSBnbG9iYWwgcG9zaXRpb25cbiAgICogQHBhcmFtIHJvdGF0aW9uIC0gVGhlIGdsb2JhbCByb3RhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90cmFuc2Zvcm0uc2V0UG9zaXRpb24ocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueik7XG4gICAgdGhpcy5fdHJhbnNmb3JtLnNldFJvdGF0aW9uUXVhdGVybmlvbihyb3RhdGlvbi54LCByb3RhdGlvbi55LCByb3RhdGlvbi56LCByb3RhdGlvbi53KTtcbiAgfVxufVxuIiwiLyoqXG4gKiAgU3RhdGljIGludGVyZmFjZSBpbXBsZW1lbnQgZGVjb3JhdG9yLlxuICogIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzOTU1MTU3L2hvdy10by1kZWZpbmUtc3RhdGljLXByb3BlcnR5LWluLXR5cGVzY3JpcHQtaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQ8VD4oKSB7XG4gIHJldHVybiA8VSBleHRlbmRzIFQ+KGNvbnN0cnVjdG9yOiBVKSA9PiB7XG4gICAgY29uc3RydWN0b3I7XG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBJQm94Q29sbGlkZXJTaGFwZSxcbiAgSUNhcHN1bGVDb2xsaWRlclNoYXBlLFxuICBJQ2hhcmFjdGVyQ29udHJvbGxlcixcbiAgSUR5bmFtaWNDb2xsaWRlcixcbiAgSVBoeXNpY3MsXG4gIElQaHlzaWNzTWFuYWdlcixcbiAgSVBoeXNpY3NNYXRlcmlhbCxcbiAgSVBsYW5lQ29sbGlkZXJTaGFwZSxcbiAgSVNwaGVyZUNvbGxpZGVyU2hhcGUsXG4gIElTdGF0aWNDb2xsaWRlcixcbiAgSUZpeGVkSm9pbnQsXG4gIElIaW5nZUpvaW50LFxuICBJU3ByaW5nSm9pbnQsXG59IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lLWRlc2lnblwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gXCJAZ2FsYWNlYW4vZW5naW5lXCI7XG5pbXBvcnQgeyBMaXRlRHluYW1pY0NvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZUR5bmFtaWNDb2xsaWRlclwiO1xuaW1wb3J0IHsgTGl0ZVBoeXNpY3NNYW5hZ2VyIH0gZnJvbSBcIi4vTGl0ZVBoeXNpY3NNYW5hZ2VyXCI7XG5pbXBvcnQgeyBMaXRlUGh5c2ljc01hdGVyaWFsIH0gZnJvbSBcIi4vTGl0ZVBoeXNpY3NNYXRlcmlhbFwiO1xuaW1wb3J0IHsgTGl0ZVN0YXRpY0NvbGxpZGVyIH0gZnJvbSBcIi4vTGl0ZVN0YXRpY0NvbGxpZGVyXCI7XG5pbXBvcnQgeyBMaXRlQm94Q29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVCb3hDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9IGZyb20gXCIuL3NoYXBlL0xpdGVTcGhlcmVDb2xsaWRlclNoYXBlXCI7XG5pbXBvcnQgeyBMaXRlQ29sbGlkZXIgfSBmcm9tIFwiLi9MaXRlQ29sbGlkZXJcIjtcbmltcG9ydCB7IFN0YXRpY0ludGVyZmFjZUltcGxlbWVudCB9IGZyb20gXCIuL1N0YXRpY0ludGVyZmFjZUltcGxlbWVudFwiO1xuXG5AU3RhdGljSW50ZXJmYWNlSW1wbGVtZW50PElQaHlzaWNzPigpXG5leHBvcnQgY2xhc3MgTGl0ZVBoeXNpY3Mge1xuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVBoeXNpY3NNYW5hZ2VyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQaHlzaWNzTWFuYWdlcihcbiAgICBvbkNvbnRhY3RCZWdpbj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvbkNvbnRhY3RFbmQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25Db250YWN0UGVyc2lzdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJCZWdpbj86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZCxcbiAgICBvblRyaWdnZXJFbmQ/OiAob2JqMTogbnVtYmVyLCBvYmoyOiBudW1iZXIpID0+IHZvaWQsXG4gICAgb25UcmlnZ2VyUGVyc2lzdD86IChvYmoxOiBudW1iZXIsIG9iajI6IG51bWJlcikgPT4gdm9pZFxuICApOiBJUGh5c2ljc01hbmFnZXIge1xuICAgIHJldHVybiBuZXcgTGl0ZVBoeXNpY3NNYW5hZ2VyKFxuICAgICAgb25Db250YWN0QmVnaW4sXG4gICAgICBvbkNvbnRhY3RFbmQsXG4gICAgICBvbkNvbnRhY3RQZXJzaXN0LFxuICAgICAgb25UcmlnZ2VyQmVnaW4sXG4gICAgICBvblRyaWdnZXJFbmQsXG4gICAgICBvblRyaWdnZXJQZXJzaXN0XG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlU3RhdGljQ29sbGlkZXIgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZVN0YXRpY0NvbGxpZGVyKHBvc2l0aW9uOiBWZWN0b3IzLCByb3RhdGlvbjogUXVhdGVybmlvbik6IElTdGF0aWNDb2xsaWRlciB7XG4gICAgcmV0dXJuIG5ldyBMaXRlU3RhdGljQ29sbGlkZXIocG9zaXRpb24sIHJvdGF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlRHluYW1pY0NvbGxpZGVyIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVEeW5hbWljQ29sbGlkZXIocG9zaXRpb246IFZlY3RvcjMsIHJvdGF0aW9uOiBRdWF0ZXJuaW9uKTogSUR5bmFtaWNDb2xsaWRlciB7XG4gICAgcmV0dXJuIG5ldyBMaXRlRHluYW1pY0NvbGxpZGVyKHBvc2l0aW9uLCByb3RhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIoKTogSUNoYXJhY3RlckNvbnRyb2xsZXIge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgY3JlYXRlQ2hhcmFjdGVyQ29udHJvbGxlci4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlUGh5c2ljc01hdGVyaWFsIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQaHlzaWNzTWF0ZXJpYWwoXG4gICAgc3RhdGljRnJpY3Rpb246IG51bWJlcixcbiAgICBkeW5hbWljRnJpY3Rpb246IG51bWJlcixcbiAgICBib3VuY2luZXNzOiBudW1iZXIsXG4gICAgZnJpY3Rpb25Db21iaW5lOiBudW1iZXIsXG4gICAgYm91bmNlQ29tYmluZTogbnVtYmVyXG4gICk6IElQaHlzaWNzTWF0ZXJpYWwge1xuICAgIHJldHVybiBuZXcgTGl0ZVBoeXNpY3NNYXRlcmlhbChzdGF0aWNGcmljdGlvbiwgZHluYW1pY0ZyaWN0aW9uLCBib3VuY2luZXNzLCBmcmljdGlvbkNvbWJpbmUsIGJvdW5jZUNvbWJpbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVCb3hDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVCb3hDb2xsaWRlclNoYXBlKHVuaXF1ZUlEOiBudW1iZXIsIHNpemU6IFZlY3RvcjMsIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsKTogSUJveENvbGxpZGVyU2hhcGUge1xuICAgIHJldHVybiBuZXcgTGl0ZUJveENvbGxpZGVyU2hhcGUodW5pcXVlSUQsIHNpemUsIG1hdGVyaWFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlU3BoZXJlQ29sbGlkZXJTaGFwZSB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlU3BoZXJlQ29sbGlkZXJTaGFwZShcbiAgICB1bmlxdWVJRDogbnVtYmVyLFxuICAgIHJhZGl1czogbnVtYmVyLFxuICAgIG1hdGVyaWFsOiBMaXRlUGh5c2ljc01hdGVyaWFsXG4gICk6IElTcGhlcmVDb2xsaWRlclNoYXBlIHtcbiAgICByZXR1cm4gbmV3IExpdGVTcGhlcmVDb2xsaWRlclNoYXBlKHVuaXF1ZUlELCByYWRpdXMsIG1hdGVyaWFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlUGxhbmVDb2xsaWRlclNoYXBlIH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVQbGFuZUNvbGxpZGVyU2hhcGUodW5pcXVlSUQ6IG51bWJlciwgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWwpOiBJUGxhbmVDb2xsaWRlclNoYXBlIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IFBsYW5lQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlQ2Fwc3VsZUNvbGxpZGVyU2hhcGUgfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlKFxuICAgIHVuaXF1ZUlEOiBudW1iZXIsXG4gICAgcmFkaXVzOiBudW1iZXIsXG4gICAgaGVpZ2h0OiBudW1iZXIsXG4gICAgbWF0ZXJpYWw6IExpdGVQaHlzaWNzTWF0ZXJpYWxcbiAgKTogSUNhcHN1bGVDb2xsaWRlclNoYXBlIHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG5cbiAgLyoqXG4gICAqIHtAaW5oZXJpdERvYyBJUGh5c2ljcy5jcmVhdGVGaXhlZEpvaW50IH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVGaXhlZEpvaW50KGNvbGxpZGVyOiBMaXRlQ29sbGlkZXIpOiBJRml4ZWRKb2ludCB7XG4gICAgdGhyb3cgXCJQaHlzaWNzLWxpdGUgZG9uJ3Qgc3VwcG9ydCBDYXBzdWxlQ29sbGlkZXJTaGFwZS4gVXNlIFBoeXNpY3MtUGh5c1ggaW5zdGVhZCFcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiB7QGluaGVyaXREb2MgSVBoeXNpY3MuY3JlYXRlSGluZ2VKb2ludCB9XG4gICAqL1xuICBzdGF0aWMgY3JlYXRlSGluZ2VKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSUhpbmdlSm9pbnQge1xuICAgIHRocm93IFwiUGh5c2ljcy1saXRlIGRvbid0IHN1cHBvcnQgQ2Fwc3VsZUNvbGxpZGVyU2hhcGUuIFVzZSBQaHlzaWNzLVBoeXNYIGluc3RlYWQhXCI7XG4gIH1cblxuICAvKipcbiAgICoge0Bpbmhlcml0RG9jIElQaHlzaWNzLmNyZWF0ZVNwcmluZ0pvaW50IH1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGVTcHJpbmdKb2ludChjb2xsaWRlcjogTGl0ZUNvbGxpZGVyKTogSVNwcmluZ0pvaW50IHtcbiAgICB0aHJvdyBcIlBoeXNpY3MtbGl0ZSBkb24ndCBzdXBwb3J0IENhcHN1bGVDb2xsaWRlclNoYXBlLiBVc2UgUGh5c2ljcy1QaHlzWCBpbnN0ZWFkIVwiO1xuICB9XG59XG4iXSwibmFtZXMiOlsicmVtb3ZlRnJvbUFycmF5IiwiYXJyYXkiLCJpdGVtIiwiaW5kZXgiLCJpbmRleE9mIiwibGFzdCIsImxlbmd0aCIsIkxpdGVVcGRhdGVGbGFnIiwiX2ZsYWdzIiwiZmxhZyIsInB1c2giLCJkZXN0cm95IiwiTGl0ZVVwZGF0ZUZsYWdNYW5hZ2VyIiwiX3VwZGF0ZUZsYWdzIiwicmVnaXN0ZXIiLCJkaXN0cmlidXRlIiwidXBkYXRlRmxhZ3MiLCJpIiwiTGl0ZUNvbGxpZGVyU2hhcGUiLCJfdHJhbnNmb3JtIiwiTGl0ZVRyYW5zZm9ybSIsIl9pbnZNb2RlbE1hdHJpeCIsIk1hdHJpeCIsIm93bmVyIiwiX2ludmVyc2VXb3JsZE1hdEZsYWciLCJyZWdpc3RlcldvcmxkQ2hhbmdlRmxhZyIsInNldFJvdGF0aW9uIiwicm90YXRpb24iLCJjb25zb2xlIiwibG9nIiwic2V0UG9zaXRpb24iLCJwb3NpdGlvbiIsIngiLCJ5IiwieiIsInNldENvbnRhY3RPZmZzZXQiLCJvZmZzZXQiLCJzZXRNYXRlcmlhbCIsIm1hdGVyaWFsIiwic2V0VW5pcXVlSUQiLCJpZCIsIl9pZCIsInNldElzVHJpZ2dlciIsInZhbHVlIiwiX3VwZGF0ZUhpdFJlc3VsdCIsInJheSIsInJheURpc3RhbmNlIiwib3V0SGl0Iiwib3JpZ2luIiwiaXNXb3JsZFJheSIsImhpdFBvaW50IiwiX3RlbXBQb2ludCIsImdldFBvaW50IiwiVmVjdG9yMyIsInRyYW5zZm9ybUNvb3JkaW5hdGUiLCJ3b3JsZE1hdHJpeCIsImRpc3RhbmNlIiwicG9pbnQiLCJjb3B5RnJvbSIsInNoYXBlSUQiLCJfZ2V0TG9jYWxSYXkiLCJ3b3JsZFRvTG9jYWwiLCJfZ2V0SW52TW9kZWxNYXRyaXgiLCJvdXRSYXkiLCJfcmF5IiwidHJhbnNmb3JtTm9ybWFsIiwiZGlyZWN0aW9uIiwibm9ybWFsaXplIiwiaW52ZXJ0IiwiUmF5IiwiX3Bvc2l0aW9uIiwiX3JvdGF0aW9uIiwiX3JvdGF0aW9uUXVhdGVybmlvbiIsIlF1YXRlcm5pb24iLCJfc2NhbGUiLCJfd29ybGRSb3RhdGlvblF1YXRlcm5pb24iLCJfbG9jYWxNYXRyaXgiLCJfd29ybGRNYXRyaXgiLCJfdXBkYXRlRmxhZ01hbmFnZXIiLCJfaXNQYXJlbnREaXJ0eSIsIl9wYXJlbnRUcmFuc2Zvcm1DYWNoZSIsIl9kaXJ0eUZsYWciLCJzZXQiLCJzZXRSb3RhdGlvblF1YXRlcm5pb24iLCJ3Iiwicm90YXRpb25RdWF0ZXJuaW9uIiwic2V0U2NhbGUiLCJzY2FsZSIsIl91cGRhdGVXb3JsZFBvc2l0aW9uRmxhZyIsIl9pc0NvbnRhaW5EaXJ0eUZsYWdzIiwiX3dvcmxkQXNzb2NpYXRlZENoYW5nZSIsIl9vd25lciIsIkxpdGVDb2xsaWRlciIsInNoYXBlcyIsIl9zaGFwZXMiLCJuIiwiX3VwZGF0ZVdvcmxkUm90YXRpb25GbGFnIiwiX3VwZGF0ZVdvcmxkU2NhbGVGbGFnIiwiX3VwZGF0ZUFsbFdvcmxkRmxhZyIsIl9nZXRQYXJlbnRUcmFuc2Zvcm0iLCJwYXJlbnRDYWNoZSIsInBhcmVudCIsIl9jb2xsaWRlciIsInRhcmdldERpcnR5RmxhZ3MiLCJfaXNDb250YWluRGlydHlGbGFnIiwidHlwZSIsIl9zZXREaXJ0eUZsYWdUcnVlIiwiX3NldERpcnR5RmxhZ0ZhbHNlIiwicm90YXRpb25FdWxlciIsIk1hdGhVdGlsIiwiZGVncmVlVG9SYWRpYW4iLCJ3b3JsZFJvdGF0aW9uUXVhdGVybmlvbiIsIm11bHRpcGx5IiwiX3RlbXBRdWF0MCIsImxvY2FsTWF0cml4IiwiYWZmaW5lVHJhbnNmb3JtYXRpb24iLCJkZWNvbXBvc2UiLCJfdGVtcE1hdDQyIiwiVHJhbnNmb3JtRmxhZyIsIkxvY2FsRXVsZXIiLCJMb2NhbFF1YXQiLCJXb3JsZFBvc2l0aW9uIiwiV29ybGRFdWxlciIsIldvcmxkUXVhdCIsIldvcmxkU2NhbGUiLCJMb2NhbE1hdHJpeCIsIldvcmxkTWF0cml4IiwiV21XcCIsIldtV2VXcSIsIldtV3BXZVdxIiwiV21XcyIsIldtV3BXcyIsIldtV3BXZVdxV3MiLCJhZGRTaGFwZSIsInNoYXBlIiwib2xkQ29sbGlkZXIiLCJyZW1vdmVTaGFwZSIsInNwbGljZSIsInNldFdvcmxkVHJhbnNmb3JtIiwiZ2V0V29ybGRUcmFuc2Zvcm0iLCJvdXRQb3NpdGlvbiIsIm91dFJvdGF0aW9uIiwiX3JheWNhc3QiLCJvblJheWNhc3QiLCJoaXQiLCJOdW1iZXIiLCJNQVhfVkFMVUUiLCJMaXRlRHluYW1pY0NvbGxpZGVyIiwiYWRkRm9yY2UiLCJmb3JjZSIsImFkZFRvcnF1ZSIsInRvcnF1ZSIsIm1vdmUiLCJwb3NpdGlvbk9yUm90YXRpb24iLCJzbGVlcCIsInNldEFuZ3VsYXJEYW1waW5nIiwic2V0QW5ndWxhclZlbG9jaXR5Iiwic2V0Q2VudGVyT2ZNYXNzIiwic2V0Q29sbGlzaW9uRGV0ZWN0aW9uTW9kZSIsInNldENvbnN0cmFpbnRzIiwiZmxhZ3MiLCJzZXRJbmVydGlhVGVuc29yIiwic2V0SXNLaW5lbWF0aWMiLCJzZXRMaW5lYXJEYW1waW5nIiwic2V0TGluZWFyVmVsb2NpdHkiLCJzZXRNYXNzIiwic2V0TWF4QW5ndWxhclZlbG9jaXR5Iiwic2V0TWF4RGVwZW5ldHJhdGlvblZlbG9jaXR5Iiwic2V0U2xlZXBUaHJlc2hvbGQiLCJzZXRTb2x2ZXJJdGVyYXRpb25zIiwid2FrZVVwIiwiRGlzb3JkZXJlZEFycmF5IiwiY291bnQiLCJfZWxlbWVudHMiLCJBcnJheSIsImFkZCIsImVsZW1lbnQiLCJkZWxldGUiLCJkZWxldGVCeUluZGV4IiwiZ2V0IiwiZWxlbWVudHMiLCJlbmQiLCJsYXN0SW5kZXgiLCJnYXJiYWdlQ29sbGVjdGlvbiIsIkxpdGVIaXRSZXN1bHQiLCJub3JtYWwiLCJMaXRlQm94Q29sbGlkZXJTaGFwZSIsInVuaXF1ZUlEIiwic2l6ZSIsIl9oYWxmU2l6ZSIsIl9ib3hNaW4iLCJfYm94TWF4IiwiX3NldEJvbmRpbmdCb3giLCJzZXRXb3JsZFNjYWxlIiwic2V0U2l6ZSIsImxvY2FsUmF5IiwiYm91bmRpbmdCb3giLCJfdGVtcEJveCIsIm1pbiIsIm1heCIsImludGVyc2VjdEJveCIsImNlbnRlciIsImhhbGZTaXplIiwic3VidHJhY3QiLCJCb3VuZGluZ0JveCIsIkxpdGVTcGhlcmVDb2xsaWRlclNoYXBlIiwicmFkaXVzIiwiX3JhZGl1cyIsIl9tYXhTY2FsZSIsInNldFJhZGl1cyIsIk1hdGgiLCJib3VuZGluZ1NwaGVyZSIsIl90ZW1wU3BoZXJlIiwid29ybGRSYWRpdXMiLCJpbnRlcnNlY3RTcGhlcmUiLCJCb3VuZGluZ1NwaGVyZSIsIkxpdGVQaHlzaWNzTWFuYWdlciIsIm9uQ29udGFjdEVudGVyIiwib25Db250YWN0RXhpdCIsIm9uQ29udGFjdFN0YXkiLCJvblRyaWdnZXJFbnRlciIsIm9uVHJpZ2dlckV4aXQiLCJvblRyaWdnZXJTdGF5IiwiX2NvbGxpZGVycyIsIl9zcGhlcmUiLCJfYm94IiwiX2N1cnJlbnRFdmVudHMiLCJfZXZlbnRNYXAiLCJfZXZlbnRQb29sIiwiX29uQ29udGFjdEVudGVyIiwiX29uQ29udGFjdEV4aXQiLCJfb25Db250YWN0U3RheSIsIl9vblRyaWdnZXJFbnRlciIsIl9vblRyaWdnZXJFeGl0IiwiX29uVHJpZ2dlclN0YXkiLCJzZXRHcmF2aXR5IiwiYWRkQ29sbGlkZXJTaGFwZSIsImNvbGxpZGVyU2hhcGUiLCJyZW1vdmVDb2xsaWRlclNoYXBlIiwiZXZlbnRQb29sIiwiY3VycmVudEV2ZW50cyIsImV2ZW50IiwiaW5kZXgxIiwiaW5kZXgyIiwiYWRkQ29sbGlkZXIiLCJhY3RvciIsInJlbW92ZUNvbGxpZGVyIiwiY29sbGlkZXIiLCJ1cGRhdGUiLCJkZWx0YVRpbWUiLCJjb2xsaWRlcnMiLCJsZW4iLCJfY29sbGlzaW9uRGV0ZWN0aW9uIiwiX2ZpcmVFdmVudCIsInJheWNhc3QiLCJoaXRSZXN1bHQiLCJfaGl0UmVzdWx0IiwiaXNIaXQiLCJjdXJIaXQiLCJfY3VycmVudEhpdCIsImFkZENoYXJhY3RlckNvbnRyb2xsZXIiLCJjaGFyYWN0ZXJDb250cm9sbGVyIiwicmVtb3ZlQ2hhcmFjdGVyQ29udHJvbGxlciIsIl9nZXRUcmlnZ2VyIiwicG9wIiwiVHJpZ2dlckV2ZW50IiwibXlDb2xsaWRlciIsIm15Q29sbGlkZXJTaGFwZXMiLCJteVNoYXBlIiwiX3VwZGF0ZVdvcmxkQm94IiwiaiIsImsiLCJ1bmRlZmluZWQiLCJhbHJlYWR5SW52b2tlZCIsIl9ib3hDb2xsaXNpb24iLCJzdGF0ZSIsIkVudGVyIiwiU3RheSIsIl91cFdvcmxkU3BoZXJlIiwiX3NwaGVyZUNvbGxpc2lvbiIsIkV4aXQiLCJvdGhlciIsImJveCIsIkNvbGxpc2lvblV0aWwiLCJpbnRlcnNlY3RzQm94QW5kQm94Iiwic3BoZXJlIiwiaW50ZXJzZWN0c1NwaGVyZUFuZEJveCIsImludGVyc2VjdHNTcGhlcmVBbmRTcGhlcmUiLCJib3hDb2xsaWRlciIsIm91dCIsIm1hdCIsInRyYW5zZm9ybSIsInNwaGVyZUNvbGxpZGVyIiwiVHJpZ2dlckV2ZW50U3RhdGUiLCJMaXRlUGh5c2ljc01hdGVyaWFsIiwic3RhdGljRnJpY3Rpb24iLCJkeW5hbWljRnJpY3Rpb24iLCJib3VuY2luZXNzIiwiZnJpY3Rpb25Db21iaW5lIiwiYm91bmNlQ29tYmluZSIsInNldEJvdW5jaW5lc3MiLCJzZXREeW5hbWljRnJpY3Rpb24iLCJzZXRTdGF0aWNGcmljdGlvbiIsInNldEJvdW5jZUNvbWJpbmUiLCJzZXRGcmljdGlvbkNvbWJpbmUiLCJMaXRlU3RhdGljQ29sbGlkZXIiLCJTdGF0aWNJbnRlcmZhY2VJbXBsZW1lbnQiLCJjb25zdHJ1Y3RvciIsIkxpdGVQaHlzaWNzIiwiY3JlYXRlUGh5c2ljc01hbmFnZXIiLCJvbkNvbnRhY3RCZWdpbiIsIm9uQ29udGFjdEVuZCIsIm9uQ29udGFjdFBlcnNpc3QiLCJvblRyaWdnZXJCZWdpbiIsIm9uVHJpZ2dlckVuZCIsIm9uVHJpZ2dlclBlcnNpc3QiLCJjcmVhdGVTdGF0aWNDb2xsaWRlciIsImNyZWF0ZUR5bmFtaWNDb2xsaWRlciIsImNyZWF0ZUNoYXJhY3RlckNvbnRyb2xsZXIiLCJjcmVhdGVQaHlzaWNzTWF0ZXJpYWwiLCJjcmVhdGVCb3hDb2xsaWRlclNoYXBlIiwiY3JlYXRlU3BoZXJlQ29sbGlkZXJTaGFwZSIsImNyZWF0ZVBsYW5lQ29sbGlkZXJTaGFwZSIsImNyZWF0ZUNhcHN1bGVDb2xsaWRlclNoYXBlIiwiaGVpZ2h0IiwiY3JlYXRlRml4ZWRKb2ludCIsImNyZWF0ZUhpbmdlSm9pbnQiLCJjcmVhdGVTcHJpbmdKb2ludCJdLCJtYXBwaW5ncyI6Ijs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBd0NBO0FBQ08sU0FBUyxVQUFVLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0FBQzFELElBQUksSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLEVB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
|
|
1266
|
+
//# sourceMappingURL=module.js.map
|